Added SkinPath, ConfigEditor, and TrayIcon to Manage/Settings dialog

Also added Help button to Manage dialog
This commit is contained in:
Brian Ferguson 2012-11-12 13:02:01 -07:00
parent 34ceeddecb
commit f52dffefb1
8 changed files with 173 additions and 15 deletions

View File

@ -1,4 +1,5 @@
#include <windows.h> #include <windows.h>
#include <CommCtrl.h>
#include "../Library/resource.h" #include "../Library/resource.h"
#include "../Version.h" #include "../Version.h"
@ -203,6 +204,7 @@ FONT 8, "MS Shell Dlg 2", 0, 0, 0x0
PUSHBUTTON STR_REFRESHALL, IDC_MANAGE_REFRESHALL_BUTTON, 5, 303, NUM_BUTTONWIDTH, 14 PUSHBUTTON STR_REFRESHALL, IDC_MANAGE_REFRESHALL_BUTTON, 5, 303, NUM_BUTTONWIDTH, 14
PUSHBUTTON STR_EDITSETTINGS, IDC_MANAGE_EDITSETTINGS_BUTTON, NUM_BUTTONWIDTH + 9, 303, NUM_BUTTONWIDTH, 14 PUSHBUTTON STR_EDITSETTINGS, IDC_MANAGE_EDITSETTINGS_BUTTON, NUM_BUTTONWIDTH + 9, 303, NUM_BUTTONWIDTH, 14
PUSHBUTTON STR_OPENLOG, IDC_MANAGE_OPENLOG_BUTTON, NUM_BUTTONWIDTH + NUM_BUTTONWIDTH + 13, 303, NUM_BUTTONWIDTH, 14 PUSHBUTTON STR_OPENLOG, IDC_MANAGE_OPENLOG_BUTTON, NUM_BUTTONWIDTH + NUM_BUTTONWIDTH + 13, 303, NUM_BUTTONWIDTH, 14
PUSHBUTTON STR_HELP, IDC_MANAGE_HELP_BUTTON, 444 - 50 - 5, 303, 50, 14
PUSHBUTTON STR_CLOSE, IDCLOSE, 444, 303, 50, 14 PUSHBUTTON STR_CLOSE, IDCLOSE, 444, 303, 50, 14
} }
@ -232,12 +234,12 @@ FONT 8, "MS Shell Dlg 2", 0, 0, 0x0
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
LTEXT STR_COORDINATESSC, IDC_STATIC, 165, 169, NUM_LABELWIDTH, 9 LTEXT STR_COORDINATESSC, IDC_STATIC, 165, 169, NUM_LABELWIDTH, 9
EDITTEXT IDC_MANAGESKINS_X_TEXT, 165 + NUM_LABELWIDTH, 166, 38, 14, WS_BORDER | WS_TABSTOP | WS_DISABLED EDITTEXT IDC_MANAGESKINS_X_TEXT, 165 + NUM_LABELWIDTH, 166, 38, 14, ES_NUMBER | WS_BORDER | WS_TABSTOP | WS_DISABLED
EDITTEXT IDC_MANAGESKINS_Y_TEXT, 165 + NUM_LABELWIDTH + 42, 166, 38, 14, ES_NUMBER | WS_BORDER | WS_TABSTOP | WS_DISABLED EDITTEXT IDC_MANAGESKINS_Y_TEXT, 165 + NUM_LABELWIDTH + 42, 166, 38, 14, ES_NUMBER | WS_BORDER | WS_TABSTOP | WS_DISABLED
LTEXT STR_POSITIONSC, IDC_STATIC, 165, 190, NUM_LABELWIDTH, 9 LTEXT STR_POSITIONSC, IDC_STATIC, 165, 190, NUM_LABELWIDTH, 9
COMBOBOX IDC_MANAGESKINS_ZPOSITION_COMBOBOX, 165 + NUM_LABELWIDTH, 187, 80, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED COMBOBOX IDC_MANAGESKINS_ZPOSITION_COMBOBOX, 165 + NUM_LABELWIDTH, 187, 80, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED
LTEXT STR_LOADORDERSC, IDC_STATIC, 165, 208, NUM_LABELWIDTH, 9 LTEXT STR_LOADORDERSC, IDC_STATIC, 165, 208, NUM_LABELWIDTH, 9
EDITTEXT IDC_MANAGESKINS_LOADORDER_TEXT, 165 + NUM_LABELWIDTH, 205, 80, 14, WS_BORDER | WS_TABSTOP | WS_DISABLED EDITTEXT IDC_MANAGESKINS_LOADORDER_TEXT, 165 + NUM_LABELWIDTH, 205, 80, 14, ES_NUMBER | WS_BORDER | WS_TABSTOP | WS_DISABLED
LTEXT STR_TRANSPARENCYSC, IDC_STATIC, 165, 229, NUM_LABELWIDTH, 9 LTEXT STR_TRANSPARENCYSC, IDC_STATIC, 165, 229, NUM_LABELWIDTH, 9
COMBOBOX IDC_MANAGESKINS_TRANSPARENCY_COMBOBOX, 165 + NUM_LABELWIDTH, 226, 80, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED COMBOBOX IDC_MANAGESKINS_TRANSPARENCY_COMBOBOX, 165 + NUM_LABELWIDTH, 226, 80, 14, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | WS_DISABLED
LTEXT STR_ONHOVERSC, IDC_STATIC, 165, 247, NUM_LABELWIDTH, 9 LTEXT STR_ONHOVERSC, IDC_STATIC, 165, 247, NUM_LABELWIDTH, 9
@ -278,19 +280,26 @@ IDD_MANAGESETTINGS_DIALOG DIALOGEX 15, 30, 470, 260
STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg 2", 0, 0, 0x0 FONT 8, "MS Shell Dlg 2", 0, 0, 0x0
{ {
GROUPBOX STR_GENERAL, IDC_STATIC, 0, 0, 468, 86 GROUPBOX STR_GENERAL, IDC_STATIC, 0, 0, 468, 132
LTEXT STR_LANGUAGESC, IDC_STATIC, 6, 16, 87, 44 LTEXT STR_LANGUAGESC, IDC_STATIC, 6, 16, 87, 14
COMBOBOX IDC_MANAGESETTINGS_LANGUAGE_COMBOBOX, 87, 13, 140, 14, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_MANAGESETTINGS_LANGUAGE_COMBOBOX, 87, 13, 222, 14, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
//AUTOCHECKBOX "Run automatically at startup", IDC_MANAGESETTINGS_AUTOSTART_CHECKBOX, 6, 16, 140, 9, WS_DISABLED //AUTOCHECKBOX "Run automatically at startup", IDC_MANAGESETTINGS_AUTOSTART_CHECKBOX, 6, 16, 140, 9, WS_DISABLED
AUTOCHECKBOX STR_CHECKFORUPDATES, IDC_MANAGESETTINGS_CHECKUPDATES_CHECKBOX, 6, 34, 200, 9 LTEXT "Skin Path:", IDC_STATIC, 6, 35, 87, 14
AUTOCHECKBOX STR_DISABLEDRAGGING, IDC_MANAGESETTINGS_LOCKSKINS_CHECKBOX, 6, 47, 200, 9 EDITTEXT IDC_MANAGESETTINGS_SKINPATH_TEXT, 87, 32, 222, 14, ES_AUTOHSCROLL | WS_DISABLED | WS_BORDER | WS_TABSTOP
PUSHBUTTON STR_RESETSTATISTICS, IDC_MANAGESETTINGS_RESETSTATISTICS_BUTTON, 6, 64, NUM_BUTTONWIDTH + 20, 14 PUSHBUTTON "...", IDC_MANAGESETTINGS_SKINPATH_BUTTON, 317, 32, 25, 14, WS_TABSTOP
LTEXT "ConfigEditor:", IDC_STATIC, 6, 54, 87, 14
EDITTEXT IDC_MANAGESETTINGS_CONFIGEDITOR_TEXT, 87, 51, 222, 14, ES_AUTOHSCROLL | WS_DISABLED | WS_BORDER | WS_TABSTOP
PUSHBUTTON "...", IDC_MANAGESETTINGS_CONFIGEDITOR_BUTTON, 317, 51, 25, 14, WS_TABSTOP
AUTOCHECKBOX STR_CHECKFORUPDATES, IDC_MANAGESETTINGS_CHECKUPDATES_CHECKBOX, 6, 73, 150, 9
AUTOCHECKBOX STR_DISABLEDRAGGING, IDC_MANAGESETTINGS_LOCKSKINS_CHECKBOX, 6, 86, 150, 9
AUTOCHECKBOX "Show tray icon", IDC_MANAGESETTINGS_TRAYICON_CHECKBOX, 6, 99, 150, 9
PUSHBUTTON STR_RESETSTATISTICS, IDC_MANAGESETTINGS_RESETSTATISTICS_BUTTON, 6, 112, NUM_BUTTONWIDTH + 20, 14, WS_TABSTOP
GROUPBOX STR_LOGGING, IDC_STATIC, 0, 91, 468, 68 GROUPBOX STR_LOGGING, IDC_STATIC, 0, 135, 468, 66
AUTOCHECKBOX STR_DEBUGMODE, IDC_MANAGESETTINGS_VERBOSELOGGING_CHECKBOX, 6, 107, 200, 9 AUTOCHECKBOX STR_DEBUGMODE, IDC_MANAGESETTINGS_VERBOSELOGGING_CHECKBOX, 6, 152, 200, 9
AUTOCHECKBOX STR_LOGTOFILE, IDC_MANAGESETTINGS_LOGTOFILE_CHECKBOX, 6, 120, 200, 9 AUTOCHECKBOX STR_LOGTOFILE, IDC_MANAGESETTINGS_LOGTOFILE_CHECKBOX, 6, 166, 200, 9
PUSHBUTTON STR_SHOWLOGFILE, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON, 6, 137, NUM_BUTTONWIDTH + 20, 14 PUSHBUTTON STR_SHOWLOGFILE, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON, 6, 180, NUM_BUTTONWIDTH + 20, 14
PUSHBUTTON STR_DELETELOGFILE, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON, NUM_BUTTONWIDTH + 30, 137, NUM_BUTTONWIDTH + 20, 14 PUSHBUTTON STR_DELETELOGFILE, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON, NUM_BUTTONWIDTH + 30, 180, NUM_BUTTONWIDTH + 20, 14
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -26,6 +26,7 @@
#include "DialogManage.h" #include "DialogManage.h"
#include "DialogAbout.h" #include "DialogAbout.h"
#include "../Version.h" #include "../Version.h"
#include <Commdlg.h>
#define WM_DELAYED_CLOSE WM_APP + 0 #define WM_DELAYED_CLOSE WM_APP + 0
@ -267,6 +268,28 @@ INT_PTR CDialogManage::OnCommand(WPARAM wParam, LPARAM lParam)
PostMessage(m_Window, WM_DELAYED_CLOSE, 0, 0); PostMessage(m_Window, WM_DELAYED_CLOSE, 0, 0);
break; break;
case IDC_MANAGE_HELP_BUTTON:
{
std::wstring url = L"http://docs.rainmeter.net/";
HWND hwnd = c_Dialog->GetActiveTabWindow();
if (hwnd == m_TabSkins.GetWindow())
{
url.append(L"manual/user-interface/manage#SkinsTab");
}
else if (hwnd == m_TabLayouts.GetWindow())
{
url.append(L"/manual/user-interface/manage#LayoutsTab");
}
else if (hwnd == m_TabSettings.GetWindow())
{
url.append(L"/manual/user-interface/manage#SettingsTab");
}
ShellExecute(m_Window, L"open", url.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
break;
default: default:
return FALSE; return FALSE;
} }
@ -1649,6 +1672,12 @@ void CDialogManage::CTabSettings::Initialize()
BOOL isLogFile = (_waccess(Rainmeter->GetLogFile().c_str(), 0) != -1); BOOL isLogFile = (_waccess(Rainmeter->GetLogFile().c_str(), 0) != -1);
EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON), isLogFile); EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON), isLogFile);
EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON), isLogFile); EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON), isLogFile);
Edit_SetText(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SKINPATH_TEXT), Rainmeter->GetSkinPath().c_str());
Edit_SetText(GetDlgItem(m_Window, IDC_MANAGESETTINGS_CONFIGEDITOR_TEXT), Rainmeter->GetSkinEditor().c_str());
bool iconEnabled = Rainmeter->GetTrayWindow()->IsTrayIconEnabled();
Button_SetCheck(GetDlgItem(m_Window, IDC_MANAGESETTINGS_TRAYICON_CHECKBOX), iconEnabled);
} }
/* /*
@ -1762,6 +1791,75 @@ INT_PTR CDialogManage::CTabSettings::OnCommand(WPARAM wParam, LPARAM lParam)
Rainmeter->SetDebug(!Rainmeter->GetDebug()); Rainmeter->SetDebug(!Rainmeter->GetDebug());
break; break;
case IDC_MANAGESETTINGS_SKINPATH_TEXT:
if (HIWORD(wParam) == EN_CHANGE)
{
WCHAR buffer[MAX_LINE_LENGTH];
std::wstring skinPath = (GetWindowText((HWND)lParam, buffer, MAX_LINE_LENGTH) > 0) ? buffer : Rainmeter->GetSkinPath();
Rainmeter->SetSkinPath(skinPath);
}
break;
case IDC_MANAGESETTINGS_SKINPATH_BUTTON:
{
WCHAR buffer[MAX_PATH];
WCHAR* temp;
BROWSEINFO bi = {0};
bi.hwndOwner = c_Dialog->GetWindow();
bi.lpszTitle = L"Select a new Skins folder:\r\n\r\nNote: Changes take place next time you load Rainmeter.";
bi.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
PIDLIST_ABSOLUTE pidl = SHBrowseForFolder(&bi);
if (pidl && SHGetPathFromIDList(pidl, buffer))
{
temp = wcscat(buffer, L"\\");
Edit_SetText(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SKINPATH_TEXT), temp);
CoTaskMemFree(pidl);
}
}
break;
case IDC_MANAGESETTINGS_CONFIGEDITOR_TEXT:
if (HIWORD(wParam) == EN_CHANGE)
{
WCHAR buffer[MAX_LINE_LENGTH];
std::wstring editor = (GetWindowText((HWND)lParam, buffer, MAX_LINE_LENGTH) > 0) ? buffer : L"";
Rainmeter->SetSkinEditor(editor);
}
break;
case IDC_MANAGESETTINGS_CONFIGEDITOR_BUTTON:
{
WCHAR buffer[MAX_PATH];
buffer[0] = L'\0';
std::wstring editor = Rainmeter->GetSkinEditor();
editor = editor.substr(0, editor.find_last_of(L"/\\")).c_str();
OPENFILENAME ofn = { sizeof(OPENFILENAME) };
ofn.Flags = OFN_FILEMUSTEXIST;
ofn.lpstrFilter = L"Executable File (.exe)\0*.exe";
ofn.lpstrTitle = L"Select executable file";
ofn.lpstrDefExt = L"exe";
ofn.lpstrInitialDir = editor.c_str();
ofn.nFilterIndex = 0;
ofn.lpstrFile = buffer;
ofn.nMaxFile = _countof(buffer);
ofn.hwndOwner = c_Dialog->GetWindow();
if (!GetOpenFileName(&ofn))
{
break;
}
Edit_SetText(GetDlgItem(m_Window, IDC_MANAGESETTINGS_CONFIGEDITOR_TEXT), buffer);
}
break;
case IDC_MANAGESETTINGS_TRAYICON_CHECKBOX:
Rainmeter->GetTrayWindow()->SetTrayIcon(!Rainmeter->GetTrayWindow()->IsTrayIconEnabled());
break;
default: default:
return 1; return 1;
} }

View File

@ -85,7 +85,6 @@ private:
virtual void Initialize(); virtual void Initialize();
static INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR OnNotify(WPARAM wParam, LPARAM lParam);
INT_PTR OnCommand(WPARAM wParam, LPARAM lParam); INT_PTR OnCommand(WPARAM wParam, LPARAM lParam);
}; };

View File

@ -1498,6 +1498,30 @@ void CRainmeter::ToggleSkin(int folderIndex, int fileIndex)
} }
} }
void CRainmeter::SetSkinPath(std::wstring skinPath)
{
WritePrivateProfileString(L"Rainmeter", L"SkinPath", skinPath.c_str(), m_IniFile.c_str());
}
void CRainmeter::SetSkinEditor(std::wstring editor)
{
LPCWSTR tmp = editor.empty() ? NULL : editor.c_str();
if (!tmp)
{
// Get the program path associated with .ini files
WCHAR buffer[MAX_PATH];
DWORD cchOut = MAX_PATH;
HRESULT hr = AssocQueryString(ASSOCF_NOTRUNCATE, ASSOCSTR_EXECUTABLE, L".ini", L"open", buffer, &cchOut);
m_SkinEditor = (SUCCEEDED(hr) && cchOut > 0) ? buffer : L"Notepad";
}
else
{
m_SkinEditor = editor;
}
WritePrivateProfileString(L"Rainmeter", L"ConfigEditor", tmp, m_IniFile.c_str());
}
void CRainmeter::WriteActive(const std::wstring& folderPath, int fileIndex) void CRainmeter::WriteActive(const std::wstring& folderPath, int fileIndex)
{ {
WCHAR buffer[32]; WCHAR buffer[32];

View File

@ -138,6 +138,7 @@ public:
const std::wstring& GetLogFile() { return m_LogFile; } const std::wstring& GetLogFile() { return m_LogFile; }
const std::wstring& GetSettingsPath() { return m_SettingsPath; } const std::wstring& GetSettingsPath() { return m_SettingsPath; }
const std::wstring& GetSkinPath() { return m_SkinPath; } const std::wstring& GetSkinPath() { return m_SkinPath; }
void SetSkinPath(std::wstring skinPath);
std::wstring GetLayoutPath() { return m_SettingsPath + L"Layouts\\"; } std::wstring GetLayoutPath() { return m_SettingsPath + L"Layouts\\"; }
std::wstring GetPluginPath() { return m_Path + L"Plugins\\"; } std::wstring GetPluginPath() { return m_Path + L"Plugins\\"; }
std::wstring GetUserPluginPath() { return m_SettingsPath + L"Plugins\\"; } std::wstring GetUserPluginPath() { return m_SettingsPath + L"Plugins\\"; }
@ -153,6 +154,7 @@ public:
const std::wstring& GetDrive() { return m_Drive; } const std::wstring& GetDrive() { return m_Drive; }
const std::wstring& GetSkinEditor() { return m_SkinEditor; } const std::wstring& GetSkinEditor() { return m_SkinEditor; }
void SetSkinEditor(std::wstring editor);
const std::wstring& GetStatsDate() { return m_StatsDate; } const std::wstring& GetStatsDate() { return m_StatsDate; }
HWND GetWindow() { return m_Window; } HWND GetWindow() { return m_Window; }

View File

@ -333,6 +333,25 @@ void CTrayWindow::ShowUpdateNotification(const WCHAR* newVersion)
ShowNotification(TRAY_NOTIFICATION_UPDATE, GetString(ID_STR_UPDATEAVAILABLE), text.c_str()); ShowNotification(TRAY_NOTIFICATION_UPDATE, GetString(ID_STR_UPDATEAVAILABLE), text.c_str());
} }
void CTrayWindow::SetTrayIcon(bool state)
{
std::wstring iniFile = Rainmeter->GetIniFile();
if (state)
{
// Delete the key from Rainmeter.ini
WritePrivateProfileString(L"Rainmeter", L"TrayIcon", NULL, iniFile.c_str());
}
else
{
WritePrivateProfileString(L"Rainmeter", L"TrayIcon", L"0", iniFile.c_str());
}
CConfigParser parser;
parser.Initialize(iniFile, NULL, NULL);
ReadOptions(parser);
}
void CTrayWindow::ReadOptions(CConfigParser& parser) void CTrayWindow::ReadOptions(CConfigParser& parser)
{ {
// Clear old Settings // Clear old Settings

View File

@ -47,6 +47,7 @@ public:
void ReadOptions(CConfigParser& parser); void ReadOptions(CConfigParser& parser);
HWND GetWindow() { return m_Window; } HWND GetWindow() { return m_Window; }
bool IsTrayIconEnabled() { return m_IconEnabled; } bool IsTrayIconEnabled() { return m_IconEnabled; }
void SetTrayIcon(bool state);
void ShowWelcomeNotification(); void ShowWelcomeNotification();
void ShowUpdateNotification(const WCHAR* newVersion); void ShowUpdateNotification(const WCHAR* newVersion);

View File

@ -44,6 +44,7 @@
#define IDC_MANAGE_REFRESHALL_BUTTON 1001 #define IDC_MANAGE_REFRESHALL_BUTTON 1001
#define IDC_MANAGE_EDITSETTINGS_BUTTON 1002 #define IDC_MANAGE_EDITSETTINGS_BUTTON 1002
#define IDC_MANAGE_OPENLOG_BUTTON 1003 #define IDC_MANAGE_OPENLOG_BUTTON 1003
#define IDC_MANAGE_HELP_BUTTON 1004
#define IDC_MANAGESKINS_ACTIVESKINS_BUTTON 1000 #define IDC_MANAGESKINS_ACTIVESKINS_BUTTON 1000
#define IDC_MANAGESKINS_SKINS_TREEVIEW 1001 #define IDC_MANAGESKINS_SKINS_TREEVIEW 1001
@ -90,6 +91,11 @@
#define IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON 1005 #define IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON 1005
#define IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON 1006 #define IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON 1006
#define IDC_MANAGESETTINGS_LANGUAGE_COMBOBOX 1007 #define IDC_MANAGESETTINGS_LANGUAGE_COMBOBOX 1007
#define IDC_MANAGESETTINGS_SKINPATH_TEXT 1008
#define IDC_MANAGESETTINGS_SKINPATH_BUTTON 1009
#define IDC_MANAGESETTINGS_CONFIGEDITOR_TEXT 1010
#define IDC_MANAGESETTINGS_CONFIGEDITOR_BUTTON 1011
#define IDC_MANAGESETTINGS_TRAYICON_CHECKBOX 1012
#define ID_STR_ISRTL 2000 #define ID_STR_ISRTL 2000
#define ID_STR_UPDATEAVAILABLE 2001 #define ID_STR_UPDATEAVAILABLE 2001