- Settings are now preserved and a backup is created when loading themes through Manage

- Fixed that Manage/About didn't always appear on foreground
This commit is contained in:
Birunthan Mohanathas 2011-08-28 14:08:48 +00:00
parent 6629527e83
commit 2df0f6f7f6
5 changed files with 84 additions and 37 deletions

View File

@ -82,7 +82,7 @@ void CDialogAbout::Open(int tab)
} }
} }
BringWindowToTop(c_Dialog->m_Window); SetForegroundWindow(c_Dialog->m_Window);
// Fake WM_NOTIFY to change tab // Fake WM_NOTIFY to change tab
NMHDR nm; NMHDR nm;

View File

@ -80,7 +80,7 @@ void CDialogManage::Open(int tab)
} }
} }
BringWindowToTop(c_Dialog->m_Window); SetForegroundWindow(c_Dialog->m_Window);
// Fake WM_NOTIFY to change tab // Fake WM_NOTIFY to change tab
NMHDR nm; NMHDR nm;
@ -662,7 +662,7 @@ void CDialogManage::CTabSkins::ReadSkin()
SetControls(); SetControls();
WCHAR buffer[MAX_LINE_LENGTH]; WCHAR* buffer = new WCHAR[MAX_LINE_LENGTH];
item = GetDlgItem(m_Window, IDC_MANAGESKINS_AUTHOR_TEXT); item = GetDlgItem(m_Window, IDC_MANAGESKINS_AUTHOR_TEXT);
GetPrivateProfileString(L"Rainmeter", L"Author", NULL, buffer, MAX_LINE_LENGTH, file.c_str()); GetPrivateProfileString(L"Rainmeter", L"Author", NULL, buffer, MAX_LINE_LENGTH, file.c_str());
@ -683,13 +683,22 @@ void CDialogManage::CTabSkins::ReadSkin()
SetWindowText(item, buffer); SetWindowText(item, buffer);
item = GetDlgItem(m_Window, IDC_MANAGESKINS_DESCRIPTION_TEXT); item = GetDlgItem(m_Window, IDC_MANAGESKINS_DESCRIPTION_TEXT);
GetPrivateProfileString(L"Metadata", L"Description", NULL, buffer, MAX_LINE_LENGTH, file.c_str()); std::wstring text;
std::wstring text = buffer; if (GetPrivateProfileString(L"Metadata", L"Information", NULL, buffer, MAX_LINE_LENGTH, file.c_str()) > 0)
if (GetPrivateProfileString(L"Metadata", L"Instructions", NULL, buffer, MAX_LINE_LENGTH, file.c_str()) > 0)
{ {
text += L"\r\n\r\n"; text = buffer;
text += buffer; }
else
{
// For backwards compatibility
GetPrivateProfileString(L"Metadata", L"Description", NULL, buffer, MAX_LINE_LENGTH, file.c_str());
text = buffer;
if (GetPrivateProfileString(L"Metadata", L"Instructions", NULL, buffer, MAX_LINE_LENGTH, file.c_str()) > 0)
{
text += L"\r\n\r\n";
text += buffer;
}
} }
// Replace | with newline // Replace | with newline
@ -724,6 +733,8 @@ void CDialogManage::CTabSkins::ReadSkin()
SetWindowText(item, L""); SetWindowText(item, L"");
ShowScrollBar(item, SB_VERT, FALSE); ShowScrollBar(item, SB_VERT, FALSE);
} }
delete buffer;
} }
/* /*
@ -1129,7 +1140,7 @@ INT_PTR CDialogManage::CTabSkins::OnNotify(WPARAM wParam, LPARAM lParam)
file += m_SkinName; file += m_SkinName;
file += L"\\"; file += L"\\";
file += m_FileName; file += m_FileName;
WritePrivateProfileString(L"Rainmeter", L"\r\n[Metadata]\r\nDescription=\r\nLicense=\r\nVersion", L"", file.c_str()); WritePrivateProfileString(L"Rainmeter", L"\r\n[Metadata]\r\nInformation=\r\nLicense=\r\nVersion", L"", file.c_str());
SendMessage(m_Window, WM_COMMAND, MAKEWPARAM(IDC_MANAGESKINS_EDIT_BUTTON, 0), 0); SendMessage(m_Window, WM_COMMAND, MAKEWPARAM(IDC_MANAGESKINS_EDIT_BUTTON, 0), 0);
ShowWindow(nm->hwndFrom, SW_HIDE); ShowWindow(nm->hwndFrom, SW_HIDE);
} }
@ -1319,32 +1330,46 @@ void CDialogManage::CTabThemes::Update()
{ {
if (m_LoadTheme) if (m_LoadTheme)
{ {
m_LoadTheme = false;
HWND item = GetDlgItem(m_Window, IDC_MANAGETHEMES_LOAD_BUTTON);
EnableWindow(item, TRUE);
// Called by ClearDeleteLaterList(), all MeterWindows have been deleted now so // Called by ClearDeleteLaterList(), all MeterWindows have been deleted now so
// proceed to loading theme // proceed to loading theme
item = GetDlgItem(m_Window, IDC_MANAGETHEMES_LIST); m_LoadTheme = false;
int sel = ListBox_GetCurSel(item);
const std::vector<std::wstring>& themes = Rainmeter->GetAllThemes(); const std::vector<std::wstring>& themes = Rainmeter->GetAllThemes();
std::wstring path = Rainmeter->GetSettingsPath() + L"Themes\\"; HWND item = GetDlgItem(m_Window, IDC_MANAGETHEMES_LIST);
path += themes[sel].c_str(); int sel = ListBox_GetCurSel(item);
std::wstring theme = path + L"\\Rainmeter.thm";
std::wstring wallpaper = path + L"\\RainThemes.bmp"; // Make a copy of current Rainmeter.ini
std::wstring backup = Rainmeter->GetSettingsPath() + L"Themes\\Backup";
CreateDirectory(backup.c_str(), NULL);
backup += L"\\Rainmeter.thm";
CSystem::CopyFiles(Rainmeter->GetIniFile(), backup);
// Replace Rainmeter.ini with theme
std::wstring theme = Rainmeter->GetSettingsPath() + L"Themes\\";
theme += themes[sel].c_str();
std::wstring wallpaper = theme + L"\\RainThemes.bmp";
theme += L"\\Rainmeter.thm";
CSystem::CopyFiles(theme, Rainmeter->GetIniFile()); CSystem::CopyFiles(theme, Rainmeter->GetIniFile());
PreserveSetting(backup, L"SkinPath");
PreserveSetting(backup, L"ConfigEditor");
PreserveSetting(backup, L"LogViewer");
PreserveSetting(backup, L"Logging");
PreserveSetting(backup, L"DisableVersionCheck");
PreserveSetting(backup, L"TrayExecuteL", false);
PreserveSetting(backup, L"TrayExecuteM", false);
PreserveSetting(backup, L"TrayExecuteR", false);
PreserveSetting(backup, L"TrayExecuteDM", false);
PreserveSetting(backup, L"TrayExecuteDR", false);
Rainmeter->ReadGeneralSettings(Rainmeter->GetIniFile());
if (_waccess(wallpaper.c_str(), 0) != -1) if (_waccess(wallpaper.c_str(), 0) != -1)
{ {
// Set wallpaper // Set wallpaper
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)wallpaper.c_str(), 0); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)wallpaper.c_str(), 0);
} }
Rainmeter->ReadGeneralSettings(Rainmeter->GetIniFile());
// Create meter windows for active configs // Create meter windows for active configs
const std::multimap<int, int>& configOrders = Rainmeter->m_ConfigOrders; const std::multimap<int, int>& configOrders = Rainmeter->m_ConfigOrders;
for (std::multimap<int, int>::const_iterator iter = configOrders.begin(); iter != configOrders.end(); ++iter) for (std::multimap<int, int>::const_iterator iter = configOrders.begin(); iter != configOrders.end(); ++iter)
@ -1355,9 +1380,25 @@ void CDialogManage::CTabThemes::Update()
Rainmeter->ActivateConfig((*iter).second, config.active - 1); Rainmeter->ActivateConfig((*iter).second, config.active - 1);
} }
} }
item = GetDlgItem(m_Window, IDC_MANAGETHEMES_LOAD_BUTTON);
EnableWindow(item, TRUE);
} }
} }
void CDialogManage::CTabThemes::PreserveSetting(const std::wstring& backupFile, LPCTSTR key, bool replace)
{
WCHAR* buffer = new WCHAR[MAX_LINE_LENGTH];
if ((replace || GetPrivateProfileString(L"Rainmeter", key, L"", buffer, 4, Rainmeter->GetIniFile().c_str()) == 0) &&
GetPrivateProfileString(L"Rainmeter", key, L"", buffer, MAX_LINE_LENGTH, backupFile.c_str()) > 0)
{
WritePrivateProfileString(L"Rainmeter", key, buffer, Rainmeter->GetIniFile().c_str());
}
delete buffer;
}
/* /*
** DlgProc ** DlgProc
** **

View File

@ -90,6 +90,8 @@ private:
void Update(); void Update();
private: private:
void PreserveSetting(const std::wstring& backupFile, LPCTSTR key, bool replace = true);
bool m_LoadTheme; bool m_LoadTheme;
}; };

View File

@ -268,14 +268,14 @@ BEGIN
PUSHBUTTON "Refresh", IDC_MANAGESKINS_REFRESH_BUTTON, 364, 0, 50, 14, WS_DISABLED | WS_TABSTOP PUSHBUTTON "Refresh", IDC_MANAGESKINS_REFRESH_BUTTON, 364, 0, 50, 14, WS_DISABLED | WS_TABSTOP
PUSHBUTTON "Edit", IDC_MANAGESKINS_EDIT_BUTTON, 418, 0, 50, 14, WS_DISABLED | WS_TABSTOP PUSHBUTTON "Edit", IDC_MANAGESKINS_EDIT_BUTTON, 418, 0, 50, 14, WS_DISABLED | WS_TABSTOP
LTEXT "Author:", IDC_STATIC, 165, 30, 50, 9 LTEXT "Author:", IDC_STATIC, 165, 30, 80, 9
LTEXT "", IDC_MANAGESKINS_AUTHOR_TEXT, 215, 30, 260, 9, SS_ENDELLIPSIS | SS_NOPREFIX LTEXT "", IDC_MANAGESKINS_AUTHOR_TEXT, 230, 30, 245, 9, SS_ENDELLIPSIS | SS_NOPREFIX
LTEXT "Version:", IDC_STATIC, 165, 43, 50, 9 LTEXT "Version:", IDC_STATIC, 165, 43, 80, 9
LTEXT "", IDC_MANAGESKINS_VERSION_TEXT, 215, 43, 260, 9, SS_ENDELLIPSIS | SS_NOPREFIX LTEXT "", IDC_MANAGESKINS_VERSION_TEXT, 230, 43, 245, 9, SS_ENDELLIPSIS | SS_NOPREFIX
LTEXT "License:", IDC_STATIC, 165, 57, 50, 9 LTEXT "License:", IDC_STATIC, 165, 56, 80, 9
LTEXT "", IDC_MANAGESKINS_LICENSE_TEXT, 215, 57, 260, 9, SS_ENDELLIPSIS | SS_NOPREFIX LTEXT "", IDC_MANAGESKINS_LICENSE_TEXT, 230, 56, 245, 9, SS_ENDELLIPSIS | SS_NOPREFIX
LTEXT "Description:", IDC_STATIC, 165, 71, 50, 9 LTEXT "Information:", IDC_STATIC, 165, 69, 80, 9
EDITTEXT IDC_MANAGESKINS_DESCRIPTION_TEXT, 213, 71, 253, 64, ES_MULTILINE | ES_READONLY EDITTEXT IDC_MANAGESKINS_DESCRIPTION_TEXT, 228, 69, 238, 64, ES_MULTILINE | ES_READONLY
CONTROL "<a>Add metadata</a>", IDC_MANAGESKINS_ADDMETADATA_LINK, "SysLink", 0x0, 410, 142, 50, 9 CONTROL "<a>Add metadata</a>", IDC_MANAGESKINS_ADDMETADATA_LINK, "SysLink", 0x0, 410, 142, 50, 9
CONTROL "", IDC_STATIC, STATIC, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 165, 156, 304, 1 CONTROL "", IDC_STATIC, STATIC, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 165, 156, 304, 1
@ -291,11 +291,11 @@ BEGIN
LTEXT "On hover:", IDC_STATIC, 165, 247, 80, 9 LTEXT "On hover:", IDC_STATIC, 165, 247, 80, 9
COMBOBOX IDC_MANAGESKINS_ONHOVER_COMBOBOX, 230, 244, 70, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED COMBOBOX IDC_MANAGESKINS_ONHOVER_COMBOBOX, 230, 244, 70, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "", IDC_MANAGESKINS_DISPLAYMONITOR_BUTTON, 330, 166, 90, 14, WS_DISABLED | WS_TABSTOP PUSHBUTTON "", IDC_MANAGESKINS_DISPLAYMONITOR_BUTTON, 330, 166, 90, 14, WS_DISABLED | WS_TABSTOP
AUTOCHECKBOX "Draggable", IDC_MANAGESKINS_DRAGGABLE_CHECKBOX, 330, 190, 70, 9, WS_DISABLED AUTOCHECKBOX "Draggable", IDC_MANAGESKINS_DRAGGABLE_CHECKBOX, 330, 190, 80, 9, WS_DISABLED
AUTOCHECKBOX "Click through", IDC_MANAGESKINS_CLICKTHROUGH_CHECKBOX, 330, 203, 70, 9, WS_DISABLED AUTOCHECKBOX "Click through", IDC_MANAGESKINS_CLICKTHROUGH_CHECKBOX, 330, 203, 80, 9, WS_DISABLED
AUTOCHECKBOX "Keep on screen", IDC_MANAGESKINS_KEEPONSCREEN_CHECKBOX, 330, 216, 70, 9, WS_DISABLED AUTOCHECKBOX "Keep on screen", IDC_MANAGESKINS_KEEPONSCREEN_CHECKBOX, 330, 216, 80, 9, WS_DISABLED
AUTOCHECKBOX "Save position", IDC_MANAGESKINS_SAVEPOSITION_CHECKBOX, 330, 229, 70, 9, WS_DISABLED AUTOCHECKBOX "Save position", IDC_MANAGESKINS_SAVEPOSITION_CHECKBOX, 330, 229, 80, 9, WS_DISABLED
AUTOCHECKBOX "Snap to edges", IDC_MANAGESKINS_SNAPTOEDGES_CHECKBOX, 330, 242, 70, 9, WS_DISABLED AUTOCHECKBOX "Snap to edges", IDC_MANAGESKINS_SNAPTOEDGES_CHECKBOX, 330, 242, 80, 9, WS_DISABLED
END END
IDD_MANAGETHEMES_DIALOG DIALOGEX 15, 30, 470, 260 IDD_MANAGETHEMES_DIALOG DIALOGEX 15, 30, 470, 260

View File

@ -1444,6 +1444,10 @@ void RainmeterAboutWide(const WCHAR* arg)
{ {
tab = 2; tab = 2;
} }
else if (_wcsnicmp(arg, L"Version", 7) == 0)
{
tab = 3;
}
} }
CDialogAbout::Open(tab); CDialogAbout::Open(tab);