mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	- Improved r1034 fix
- Minor tweaks
This commit is contained in:
		@@ -57,7 +57,7 @@ CDialog::~CDialog()
 | 
			
		||||
** Enables RTL layout.
 | 
			
		||||
**
 | 
			
		||||
*/
 | 
			
		||||
void CDialog::SetRTL()
 | 
			
		||||
void CDialog::SetDialogRTL()
 | 
			
		||||
{
 | 
			
		||||
	SetWindowLong(m_Window, GWL_EXSTYLE, GetWindowLong(m_Window, GWL_EXSTYLE) | WS_EX_LAYOUTRTL);
 | 
			
		||||
}
 | 
			
		||||
@@ -91,7 +91,8 @@ BOOL CALLBACK CDialog::SetFontProc(HWND hWnd, LPARAM lParam)
 | 
			
		||||
** Constructor.
 | 
			
		||||
**
 | 
			
		||||
*/
 | 
			
		||||
CTab::CTab(HINSTANCE instance, HWND owner, WORD tabId, DLGPROC tabProc) : CDialog(CreateDialog(instance, MAKEINTRESOURCE(tabId), owner, tabProc)),
 | 
			
		||||
CDialog::CTab::CTab(HINSTANCE instance, HWND owner, WORD tabId, DLGPROC tabProc) :
 | 
			
		||||
	m_Window(CreateDialog(instance, MAKEINTRESOURCE(tabId), owner, tabProc)),
 | 
			
		||||
	m_Initialized(false)
 | 
			
		||||
{
 | 
			
		||||
	EnableThemeDialogTexture(m_Window, ETDT_ENABLETAB);
 | 
			
		||||
@@ -103,7 +104,23 @@ CTab::CTab(HINSTANCE instance, HWND owner, WORD tabId, DLGPROC tabProc) : CDialo
 | 
			
		||||
** Destructor.
 | 
			
		||||
**
 | 
			
		||||
*/
 | 
			
		||||
CTab::~CTab()
 | 
			
		||||
CDialog::CTab::~CTab()
 | 
			
		||||
{
 | 
			
		||||
	DestroyWindow(m_Window);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
** Activate
 | 
			
		||||
**
 | 
			
		||||
** Activates the tab.
 | 
			
		||||
**
 | 
			
		||||
*/
 | 
			
		||||
void CDialog::CTab::Activate()
 | 
			
		||||
{
 | 
			
		||||
	if (!m_Initialized)
 | 
			
		||||
	{
 | 
			
		||||
		Initialize();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	BringWindowToTop(m_Window);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -25,11 +25,28 @@ public:
 | 
			
		||||
	HWND GetWindow() { return m_Window; }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	class CTab
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		HWND GetWindow() { return m_Window; }
 | 
			
		||||
		bool IsInitialized() { return m_Initialized; }
 | 
			
		||||
		void Activate();
 | 
			
		||||
 | 
			
		||||
		virtual void Initialize() {}
 | 
			
		||||
		virtual void Resize(int w, int h) {}
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
		CTab(HINSTANCE instance, HWND owner, WORD tabId, DLGPROC tabProc);
 | 
			
		||||
		virtual ~CTab();
 | 
			
		||||
 | 
			
		||||
		HWND m_Window;
 | 
			
		||||
		bool m_Initialized;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	CDialog(HWND wnd);
 | 
			
		||||
	virtual ~CDialog();
 | 
			
		||||
 | 
			
		||||
	void SetRTL();
 | 
			
		||||
 | 
			
		||||
	void SetDialogRTL();
 | 
			
		||||
	void SetDialogFont();
 | 
			
		||||
 | 
			
		||||
	HWND m_Window;
 | 
			
		||||
@@ -40,19 +57,4 @@ private:
 | 
			
		||||
	static BOOL CALLBACK SetFontProc(HWND hWnd, LPARAM lParam);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class CTab : public CDialog
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	bool IsInitialized() { return m_Initialized; }
 | 
			
		||||
 | 
			
		||||
	virtual void Initialize() {}
 | 
			
		||||
	virtual void Resize(int w, int h) {}
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	CTab(HINSTANCE instance, HWND owner, WORD tabId, DLGPROC tabProc);
 | 
			
		||||
	virtual ~CTab();
 | 
			
		||||
 | 
			
		||||
	bool m_Initialized;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -247,7 +247,7 @@ INT_PTR CDialogAbout::OnInitDialog(WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	if (wcscmp(GetString(ID_STR_ISRTL), L"1") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		// Use RTL layout if using a RTL language
 | 
			
		||||
		SetRTL();
 | 
			
		||||
		SetDialogRTL();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HWND item = GetDlgItem(m_Window, IDC_ABOUT_TAB);
 | 
			
		||||
@@ -302,32 +302,22 @@ INT_PTR CDialogAbout::OnNotify(WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	case IDC_ABOUT_TAB:
 | 
			
		||||
		if (nm->code == TCN_SELCHANGE)
 | 
			
		||||
		{
 | 
			
		||||
			CTab* tab;
 | 
			
		||||
			int sel = TabCtrl_GetCurSel(nm->hwndFrom);
 | 
			
		||||
			if (sel == 0)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabLog;
 | 
			
		||||
				m_TabLog.Activate();
 | 
			
		||||
			}
 | 
			
		||||
			else if (sel == 1)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabMeasures;
 | 
			
		||||
				m_TabMeasures.Activate();
 | 
			
		||||
			}
 | 
			
		||||
			else if (sel == 2)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabPlugins;
 | 
			
		||||
				m_TabPlugins.Activate();
 | 
			
		||||
			}
 | 
			
		||||
			else // if (sel == 3)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabVersion;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (tab)
 | 
			
		||||
			{
 | 
			
		||||
				if (!tab->IsInitialized())
 | 
			
		||||
				{
 | 
			
		||||
					tab->Initialize();
 | 
			
		||||
				}
 | 
			
		||||
				BringWindowToTop(tab->GetWindow());
 | 
			
		||||
				m_TabVersion.Activate();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
 
 | 
			
		||||
@@ -229,7 +229,7 @@ INT_PTR CDialogManage::OnInitDialog(WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	if (wcscmp(GetString(ID_STR_ISRTL), L"1") == 0)
 | 
			
		||||
	{
 | 
			
		||||
		// Use RTL layout if using a RTL language
 | 
			
		||||
		SetRTL();
 | 
			
		||||
		SetDialogRTL();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HWND item = GetDlgItem(m_Window, IDC_MANAGE_TAB);
 | 
			
		||||
@@ -306,28 +306,18 @@ INT_PTR CDialogManage::OnNotify(WPARAM wParam, LPARAM lParam)
 | 
			
		||||
	case IDC_MANAGE_TAB:
 | 
			
		||||
		if (nm->code == TCN_SELCHANGE)
 | 
			
		||||
		{
 | 
			
		||||
			CTab* tab;
 | 
			
		||||
			int sel = TabCtrl_GetCurSel(nm->hwndFrom);
 | 
			
		||||
			if (sel == 0)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabSkins;
 | 
			
		||||
				m_TabSkins.Activate();
 | 
			
		||||
			}
 | 
			
		||||
			else if (sel == 1)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabThemes;
 | 
			
		||||
				m_TabThemes.Activate();
 | 
			
		||||
			}
 | 
			
		||||
			else // if (sel == 2)
 | 
			
		||||
			{
 | 
			
		||||
				tab = &m_TabSettings;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (tab)
 | 
			
		||||
			{
 | 
			
		||||
				if (!tab->IsInitialized())
 | 
			
		||||
				{
 | 
			
		||||
					tab->Initialize();
 | 
			
		||||
				}
 | 
			
		||||
				BringWindowToTop(tab->GetWindow());
 | 
			
		||||
				m_TabSettings.Activate();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
@@ -477,11 +467,10 @@ void CDialogManage::CTabSkins::Update(CMeterWindow* meterWindow, bool deleted)
 | 
			
		||||
		HWND item = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW);
 | 
			
		||||
		TreeView_DeleteAllItems(item);
 | 
			
		||||
 | 
			
		||||
		TV_INSERTSTRUCT tvi = {0};
 | 
			
		||||
		tvi.hParent = NULL;
 | 
			
		||||
		tvi.hInsertAfter = TVI_LAST;
 | 
			
		||||
		tvi.item.mask= TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
 | 
			
		||||
		tvi.item.iImage = tvi.item.iSelectedImage= 0;
 | 
			
		||||
		TVINSERTSTRUCT tvi = {0};
 | 
			
		||||
		tvi.hInsertAfter = TVI_FIRST;
 | 
			
		||||
		tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
 | 
			
		||||
		tvi.item.iImage = tvi.item.iSelectedImage = 0;
 | 
			
		||||
		PopulateTree(item, tvi, Rainmeter->m_ConfigMenu);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -763,25 +752,24 @@ void CDialogManage::CTabSkins::ReadSkin()
 | 
			
		||||
** Populates the treeview with folders and skins.
 | 
			
		||||
**
 | 
			
		||||
*/
 | 
			
		||||
void CDialogManage::CTabSkins::PopulateTree(HWND tree, TV_INSERTSTRUCT& tvi, const std::vector<CRainmeter::CONFIGMENU>& configMenuData)
 | 
			
		||||
void CDialogManage::CTabSkins::PopulateTree(HWND tree, TVINSERTSTRUCT& tvi, const std::vector<CRainmeter::CONFIGMENU>& configMenuData)
 | 
			
		||||
{
 | 
			
		||||
	for (int i = 0, isize = (int)configMenuData.size(); i < isize; ++i)
 | 
			
		||||
	for (int i = (int)configMenuData.size() - 1; i >= 0; --i)
 | 
			
		||||
	{
 | 
			
		||||
		const CRainmeter::CONFIGMENU& configMenuS = configMenuData[i];
 | 
			
		||||
		tvi.item.pszText =(WCHAR*)configMenuS.name.c_str();
 | 
			
		||||
		if (configMenuS.index == -1)
 | 
			
		||||
		{
 | 
			
		||||
			tvi.item.iImage = tvi.item.iSelectedImage = 0;
 | 
			
		||||
			tvi.item.pszText =(WCHAR*)configMenuS.name.c_str();
 | 
			
		||||
			HTREEITEM hOldParent = tvi.hParent;
 | 
			
		||||
			tvi.hParent = (HTREEITEM)SendMessage(tree, TVM_INSERTITEM, 0, (LPARAM)&tvi);
 | 
			
		||||
			tvi.hParent = (HTREEITEM)TreeView_InsertItem(tree, &tvi);
 | 
			
		||||
			PopulateTree(tree, tvi, configMenuS.children);
 | 
			
		||||
			tvi.hParent = hOldParent;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			tvi.item.iImage = tvi.item.iSelectedImage = 1;
 | 
			
		||||
			tvi.item.pszText = (WCHAR*)configMenuS.name.c_str();
 | 
			
		||||
			SendMessage(tree, TVM_INSERTITEM, 0, (LPARAM)&tvi);
 | 
			
		||||
			TreeView_InsertItem(tree, &tvi);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ private:
 | 
			
		||||
		void DisableControls(bool clear = false);
 | 
			
		||||
		void ReadSkin();
 | 
			
		||||
 | 
			
		||||
		static void PopulateTree(HWND tree, TV_INSERTSTRUCT& tvi, const std::vector<CRainmeter::CONFIGMENU>& configMenuData);
 | 
			
		||||
		static void PopulateTree(HWND tree, TVINSERTSTRUCT& tvi, const std::vector<CRainmeter::CONFIGMENU>& configMenuData);
 | 
			
		||||
 | 
			
		||||
		std::wstring m_FileName;
 | 
			
		||||
		std::wstring m_SkinName;
 | 
			
		||||
 
 | 
			
		||||
@@ -265,7 +265,24 @@ HICON CTrayWindow::CreateTrayIcon(double value)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Return the default icon if there is no valid measure
 | 
			
		||||
	return (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_RAINMETER), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
 | 
			
		||||
	HINSTANCE hExe = GetModuleHandle(NULL);
 | 
			
		||||
	HINSTANCE hComctl = GetModuleHandle(L"Comctl32");
 | 
			
		||||
	if (hComctl)
 | 
			
		||||
	{
 | 
			
		||||
		// Try LoadIconMetric for better quality with high DPI
 | 
			
		||||
		FPLOADICONMETRIC loadIconMetric = (FPLOADICONMETRIC)GetProcAddress(hComctl, "LoadIconMetric");
 | 
			
		||||
		if (loadIconMetric)
 | 
			
		||||
		{
 | 
			
		||||
			HICON icon;
 | 
			
		||||
			HRESULT hr = loadIconMetric(hExe, MAKEINTRESOURCE(IDI_RAINMETER), LIM_SMALL, &icon);
 | 
			
		||||
			if (SUCCEEDED(hr))
 | 
			
		||||
			{
 | 
			
		||||
				return icon;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (HICON)LoadImage(hExe, MAKEINTRESOURCE(IDI_RAINMETER), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CTrayWindow::ReadConfig(CConfigParser& parser)
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,8 @@
 | 
			
		||||
#include <gdiplus.h>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
typedef HRESULT (WINAPI * FPLOADICONMETRIC)(HINSTANCE hinst, PCWSTR pszName, int lims, HICON* phico);
 | 
			
		||||
 | 
			
		||||
#define WM_TRAY_DELAYED_REFRESH_ALL WM_APP + 0
 | 
			
		||||
#define WM_TRAY_DELAYED_EXECUTE     WM_APP + 1
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user