mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Make Rainmeter a singleton class
This change is part of making the Libray project more testable. The old g_Rainmeter global pointer has been replaced with a GetRainmeter() function to guarantee that the object exists in some state.
This commit is contained in:
@ -48,8 +48,6 @@ enum INTERVAL
|
||||
|
||||
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(L"TaskbarCreated");
|
||||
|
||||
extern Rainmeter* g_Rainmeter;
|
||||
|
||||
using namespace Gdiplus;
|
||||
|
||||
TrayWindow::TrayWindow() :
|
||||
@ -89,7 +87,7 @@ void TrayWindow::Initialize()
|
||||
{
|
||||
WNDCLASS wc = {0};
|
||||
wc.lpfnWndProc = (WNDPROC)WndProc;
|
||||
wc.hInstance = g_Rainmeter->GetInstance();
|
||||
wc.hInstance = GetRainmeter().GetModuleInstance();
|
||||
wc.lpszClassName = L"RainmeterTrayClass";
|
||||
wc.hIcon = GetIcon(IDI_RAINMETER);
|
||||
|
||||
@ -339,7 +337,7 @@ void TrayWindow::SetTrayIcon(bool enabled)
|
||||
m_IconEnabled = enabled;
|
||||
|
||||
// Save to Rainmeter.ini.
|
||||
const std::wstring& iniFile = g_Rainmeter->GetIniFile();
|
||||
const std::wstring& iniFile = GetRainmeter().GetIniFile();
|
||||
WritePrivateProfileString(L"Rainmeter", L"TrayIcon", enabled ? nullptr : L"0", iniFile.c_str());
|
||||
}
|
||||
|
||||
@ -372,8 +370,8 @@ void TrayWindow::ReadOptions(ConfigParser& parser)
|
||||
|
||||
if (!measureName.empty())
|
||||
{
|
||||
ConfigParser* oldParser = g_Rainmeter->GetCurrentParser();
|
||||
g_Rainmeter->SetCurrentParser(&parser);
|
||||
ConfigParser* oldParser = GetRainmeter().GetCurrentParser();
|
||||
GetRainmeter().SetCurrentParser(&parser);
|
||||
|
||||
m_Measure = Measure::Create(measureName.c_str(), nullptr, L"TrayMeasure");
|
||||
if (m_Measure)
|
||||
@ -381,7 +379,7 @@ void TrayWindow::ReadOptions(ConfigParser& parser)
|
||||
m_Measure->ReadOptions(parser);
|
||||
}
|
||||
|
||||
g_Rainmeter->SetCurrentParser(oldParser);
|
||||
GetRainmeter().SetCurrentParser(oldParser);
|
||||
}
|
||||
|
||||
const WCHAR* type = parser.ReadString(L"TrayMeasure", L"TrayMeter", m_Measure ? L"HISTOGRAM" : L"NONE").c_str();
|
||||
@ -404,7 +402,7 @@ void TrayWindow::ReadOptions(ConfigParser& parser)
|
||||
// Load the bitmaps if defined
|
||||
if (!imageName.empty())
|
||||
{
|
||||
imageName.insert(0, g_Rainmeter->GetSkinPath());
|
||||
imageName.insert(0, GetRainmeter().GetSkinPath());
|
||||
const WCHAR* imagePath = imageName.c_str();
|
||||
if (_wcsicmp(imagePath + (imageName.size() - 4), L".ico") == 0)
|
||||
{
|
||||
@ -459,7 +457,7 @@ void TrayWindow::ReadOptions(ConfigParser& parser)
|
||||
|
||||
LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
TrayWindow* tray = g_Rainmeter->GetTrayWindow();
|
||||
TrayWindow* tray = GetRainmeter().GetTrayWindow();
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
@ -483,11 +481,11 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
break;
|
||||
|
||||
case IDM_REFRESH:
|
||||
PostMessage(g_Rainmeter->GetWindow(), WM_RAINMETER_DELAYED_REFRESH_ALL, (WPARAM)nullptr, (LPARAM)nullptr);
|
||||
PostMessage(GetRainmeter().GetWindow(), WM_RAINMETER_DELAYED_REFRESH_ALL, (WPARAM)nullptr, (LPARAM)nullptr);
|
||||
break;
|
||||
|
||||
case IDM_SHOWLOGFILE:
|
||||
g_Rainmeter->ShowLogFile();
|
||||
GetRainmeter().ShowLogFile();
|
||||
break;
|
||||
|
||||
case IDM_STARTLOG:
|
||||
@ -503,15 +501,15 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
break;
|
||||
|
||||
case IDM_DEBUGLOG:
|
||||
g_Rainmeter->SetDebug(!g_Rainmeter->GetDebug());
|
||||
GetRainmeter().SetDebug(!GetRainmeter().GetDebug());
|
||||
break;
|
||||
|
||||
case IDM_DISABLEDRAG:
|
||||
g_Rainmeter->SetDisableDragging(!g_Rainmeter->GetDisableDragging());
|
||||
GetRainmeter().SetDisableDragging(!GetRainmeter().GetDisableDragging());
|
||||
break;
|
||||
|
||||
case IDM_EDITCONFIG:
|
||||
g_Rainmeter->EditSettings();
|
||||
GetRainmeter().EditSettings();
|
||||
break;
|
||||
|
||||
case IDM_QUIT:
|
||||
@ -519,7 +517,7 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
break;
|
||||
|
||||
case IDM_OPENSKINSFOLDER:
|
||||
g_Rainmeter->OpenSkinFolder();
|
||||
GetRainmeter().OpenSkinFolder();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -530,25 +528,25 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
{
|
||||
int pos = mID - ID_THEME_FIRST;
|
||||
|
||||
const std::vector<std::wstring>& layouts = g_Rainmeter->GetAllLayouts();
|
||||
const std::vector<std::wstring>& layouts = GetRainmeter().GetAllLayouts();
|
||||
if (pos >= 0 && pos < (int)layouts.size())
|
||||
{
|
||||
g_Rainmeter->LoadLayout(layouts[pos]);
|
||||
GetRainmeter().LoadLayout(layouts[pos]);
|
||||
}
|
||||
}
|
||||
else if (mID >= ID_CONFIG_FIRST && mID <= ID_CONFIG_LAST)
|
||||
{
|
||||
std::pair<int, int> indexes = g_Rainmeter->GetMeterWindowIndex(mID);
|
||||
std::pair<int, int> indexes = GetRainmeter().GetMeterWindowIndex(mID);
|
||||
if (indexes.first != -1 && indexes.second != -1)
|
||||
{
|
||||
g_Rainmeter->ToggleSkin(indexes.first, indexes.second);
|
||||
GetRainmeter().ToggleSkin(indexes.first, indexes.second);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Forward the message to correct window
|
||||
int index = (int)(wParam >> 16);
|
||||
const std::map<std::wstring, MeterWindow*>& windows = g_Rainmeter->GetAllMeterWindows();
|
||||
const std::map<std::wstring, MeterWindow*>& windows = GetRainmeter().GetAllMeterWindows();
|
||||
|
||||
if (index < (int)windows.size())
|
||||
{
|
||||
@ -579,19 +577,19 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
switch (uMouseMsg)
|
||||
{
|
||||
case WM_MBUTTONDOWN:
|
||||
bang = g_Rainmeter->GetTrayExecuteM().c_str();
|
||||
bang = GetRainmeter().GetTrayExecuteM().c_str();
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDOWN:
|
||||
bang = g_Rainmeter->GetTrayExecuteR().c_str();
|
||||
bang = GetRainmeter().GetTrayExecuteR().c_str();
|
||||
break;
|
||||
|
||||
case WM_MBUTTONDBLCLK:
|
||||
bang = g_Rainmeter->GetTrayExecuteDM().c_str();
|
||||
bang = GetRainmeter().GetTrayExecuteDM().c_str();
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDBLCLK:
|
||||
bang = g_Rainmeter->GetTrayExecuteDR().c_str();
|
||||
bang = GetRainmeter().GetTrayExecuteDR().c_str();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -602,7 +600,7 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
if (*bang &&
|
||||
!IsCtrlKeyDown()) // Ctrl is pressed, so only run default action
|
||||
{
|
||||
g_Rainmeter->ExecuteCommand(bang, nullptr);
|
||||
GetRainmeter().ExecuteCommand(bang, nullptr);
|
||||
tray->m_TrayContextMenuEnabled = (uMouseMsg != WM_RBUTTONDOWN);
|
||||
break;
|
||||
}
|
||||
@ -618,7 +616,7 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
if (tray->m_TrayContextMenuEnabled)
|
||||
{
|
||||
POINT pos = System::GetCursorPosition();
|
||||
g_Rainmeter->ShowContextMenu(pos, nullptr);
|
||||
GetRainmeter().ShowContextMenu(pos, nullptr);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -662,19 +660,19 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
switch (wParam)
|
||||
{
|
||||
case RAINMETER_QUERY_ID_SKINS_PATH:
|
||||
sendCopyData(g_Rainmeter->GetSkinPath());
|
||||
sendCopyData(GetRainmeter().GetSkinPath());
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_SETTINGS_PATH:
|
||||
sendCopyData(g_Rainmeter->GetSettingsPath());
|
||||
sendCopyData(GetRainmeter().GetSettingsPath());
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_PLUGINS_PATH:
|
||||
sendCopyData(g_Rainmeter->GetPluginPath());
|
||||
sendCopyData(GetRainmeter().GetPluginPath());
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_PROGRAM_PATH:
|
||||
sendCopyData(g_Rainmeter->GetPath());
|
||||
sendCopyData(GetRainmeter().GetPath());
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_LOG_PATH:
|
||||
@ -682,12 +680,12 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_CONFIG_EDITOR:
|
||||
sendCopyData(g_Rainmeter->GetSkinEditor());
|
||||
sendCopyData(GetRainmeter().GetSkinEditor());
|
||||
return 0;
|
||||
|
||||
case RAINMETER_QUERY_ID_IS_DEBUGGING:
|
||||
{
|
||||
BOOL debug = g_Rainmeter->GetDebug();
|
||||
BOOL debug = GetRainmeter().GetDebug();
|
||||
SendMessage((HWND)lParam, WM_QUERY_RAINMETER_RETURN, (WPARAM)hWnd, (LPARAM)debug);
|
||||
}
|
||||
return 0;
|
||||
@ -701,7 +699,7 @@ LRESULT CALLBACK TrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
if (cds->dwData == RAINMETER_QUERY_ID_SKIN_WINDOWHANDLE)
|
||||
{
|
||||
LPCWSTR folderPath = (LPCWSTR)cds->lpData;
|
||||
MeterWindow* mw = g_Rainmeter->GetMeterWindow(folderPath);
|
||||
MeterWindow* mw = GetRainmeter().GetMeterWindow(folderPath);
|
||||
return (mw) ? (LRESULT)mw->GetWindow() : 0;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user