mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Changes by JamesAC and spx to the "About" dialog.
This commit is contained in:
@ -29,6 +29,7 @@ extern CRainmeter* Rainmeter;
|
||||
|
||||
INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
HWND g_DialogWin = NULL;
|
||||
VOID UpdateWidgets(HWND window);
|
||||
|
||||
struct PLUGIN_INFO
|
||||
{
|
||||
@ -43,7 +44,7 @@ HWND OpenAboutDialog(HWND hwndOwner, HINSTANCE instance)
|
||||
if (g_DialogWin == NULL)
|
||||
{
|
||||
g_DialogWin = CreateDialog(instance, MAKEINTRESOURCE(IDD_ABOUT_DIALOG), hwndOwner, AboutProc);
|
||||
|
||||
|
||||
if (g_DialogWin)
|
||||
{
|
||||
HICON hIcon = LoadIcon(instance, MAKEINTRESOURCE(IDI_TRAY));
|
||||
@ -61,72 +62,109 @@ void UpdateAboutStatistics()
|
||||
if (g_DialogWin != NULL && IsWindowVisible(g_DialogWin))
|
||||
{
|
||||
HWND widget;
|
||||
widget = GetDlgItem(g_DialogWin, IDC_CONFIG_TAB);
|
||||
int selected = TabCtrl_GetCurSel(widget);
|
||||
widget = GetDlgItem(g_DialogWin, IDC_ABOUT_ENTRIES);
|
||||
int selected = (int)SendMessage(widget, LB_GETCURSEL, NULL, NULL);
|
||||
int count = (int)SendMessage(widget, LB_GETCOUNT, NULL, NULL);
|
||||
int current = 0;
|
||||
|
||||
widget = GetDlgItem(g_DialogWin, IDC_STATISTICS);
|
||||
SendMessage(widget, WM_SETREDRAW, 0, 0);
|
||||
|
||||
std::map<std::wstring, CMeterWindow*>& windows = Rainmeter->GetAllMeterWindows();
|
||||
|
||||
std::map<std::wstring, CMeterWindow*>::const_iterator iter = windows.begin();
|
||||
for( ; iter != windows.end(); ++iter)
|
||||
if (selected == 0)
|
||||
{
|
||||
if (current == selected)
|
||||
int count = ListView_GetItemCount(widget);
|
||||
|
||||
std::list<CRainmeter::LOG_INFO>::const_iterator iter = Rainmeter->m_LogData.begin();
|
||||
LVITEM vitem;
|
||||
vitem.mask = LVIF_TEXT;
|
||||
|
||||
int i = 0;
|
||||
for ( ; iter != Rainmeter->m_LogData.end(); ++iter)
|
||||
{
|
||||
int count = ListView_GetItemCount(widget);
|
||||
|
||||
CMeterWindow* meterWindow = (*iter).second;
|
||||
std::list<CMeasure*>& measures = meterWindow->GetMeasures();
|
||||
|
||||
int index = 0;
|
||||
std::list<CMeasure*>::const_iterator i = measures.begin();
|
||||
for( ; i != measures.end(); ++i)
|
||||
if (i < count)
|
||||
{
|
||||
const WCHAR* name = (*i)->GetName();
|
||||
const WCHAR* val = (*i)->GetStats();
|
||||
|
||||
std::wstring range;
|
||||
WCHAR buffer[256];
|
||||
double minVal = (*i)->GetMinValue();
|
||||
double maxVal = (*i)->GetMaxValue();
|
||||
CMeasure::GetScaledValue(1, minVal, buffer);
|
||||
range = buffer;
|
||||
range += L" - ";
|
||||
CMeasure::GetScaledValue(1, maxVal, buffer);
|
||||
range += buffer;
|
||||
|
||||
if (name && wcslen(name) > 0)
|
||||
{
|
||||
if (index < count)
|
||||
{
|
||||
ListView_SetItemText(widget, index, 0, (WCHAR*)name);
|
||||
}
|
||||
else
|
||||
{
|
||||
LVITEM vitem;
|
||||
vitem.mask = LVIF_TEXT;
|
||||
vitem.iItem = 0;
|
||||
vitem.iSubItem = 0;
|
||||
vitem.pszText = (WCHAR*)name;
|
||||
ListView_InsertItem(widget, &vitem);
|
||||
}
|
||||
|
||||
if (val && wcslen(val) > 0)
|
||||
{
|
||||
ListView_SetItemText(widget, index, 1, (WCHAR*)val);
|
||||
}
|
||||
ListView_SetItemText(widget, index, 2, (WCHAR*)range.c_str());
|
||||
++index;
|
||||
}
|
||||
ListView_SetItemText(widget, i, 0, (WCHAR*)(*iter).type.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
vitem.iItem = i;
|
||||
vitem.iSubItem = 0;
|
||||
vitem.pszText = (WCHAR*)(*iter).type.c_str();
|
||||
ListView_InsertItem(widget, &vitem);
|
||||
}
|
||||
ListView_SetItemText(widget, i, 1, (WCHAR*)(*iter).timestamp.c_str());
|
||||
ListView_SetItemText(widget, i, 2, (WCHAR*)(*iter).message.c_str());
|
||||
|
||||
break;
|
||||
++i;
|
||||
}
|
||||
++current;
|
||||
}
|
||||
else if (selected == 2)
|
||||
{
|
||||
widget = GetDlgItem(g_DialogWin, IDC_ABOUT_ENTRIES);
|
||||
SendMessage(widget, LB_SETCURSEL, 1, NULL);
|
||||
UpdateWidgets(g_DialogWin);
|
||||
}
|
||||
else if (selected > 2)
|
||||
{
|
||||
std::map<std::wstring, CMeterWindow*>& windows = Rainmeter->GetAllMeterWindows();
|
||||
|
||||
std::map<std::wstring, CMeterWindow*>::const_iterator iter = windows.begin();
|
||||
for( ; iter != windows.end(); ++iter)
|
||||
{
|
||||
if (current == selected - 3)
|
||||
{
|
||||
int count = ListView_GetItemCount(widget);
|
||||
|
||||
CMeterWindow* meterWindow = (*iter).second;
|
||||
std::list<CMeasure*>& measures = meterWindow->GetMeasures();
|
||||
|
||||
int index = 0;
|
||||
std::list<CMeasure*>::const_iterator i = measures.begin();
|
||||
for( ; i != measures.end(); ++i)
|
||||
{
|
||||
const WCHAR* name = (*i)->GetName();
|
||||
const WCHAR* val = (*i)->GetStats();
|
||||
|
||||
std::wstring range;
|
||||
WCHAR buffer[256];
|
||||
double minVal = (*i)->GetMinValue();
|
||||
double maxVal = (*i)->GetMaxValue();
|
||||
CMeasure::GetScaledValue(1, minVal, buffer);
|
||||
range = buffer;
|
||||
range += L" - ";
|
||||
CMeasure::GetScaledValue(1, maxVal, buffer);
|
||||
range += buffer;
|
||||
|
||||
if (name && wcslen(name) > 0)
|
||||
{
|
||||
if (index < count)
|
||||
{
|
||||
ListView_SetItemText(widget, index, 0, (WCHAR*)name);
|
||||
}
|
||||
else
|
||||
{
|
||||
LVITEM vitem;
|
||||
vitem.mask = LVIF_TEXT;
|
||||
vitem.iItem = 0;
|
||||
vitem.iSubItem = 0;
|
||||
vitem.pszText = (WCHAR*)name;
|
||||
ListView_InsertItem(widget, &vitem);
|
||||
}
|
||||
|
||||
if (val && wcslen(val) > 0)
|
||||
{
|
||||
ListView_SetItemText(widget, index, 1, (WCHAR*)val);
|
||||
}
|
||||
ListView_SetItemText(widget, index, 2, (WCHAR*)range.c_str());
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
++current;
|
||||
}
|
||||
}
|
||||
SendMessage(widget, WM_SETREDRAW, 1, 0);
|
||||
}
|
||||
}
|
||||
@ -134,14 +172,25 @@ void UpdateAboutStatistics()
|
||||
void UpdateWidgets(HWND window)
|
||||
{
|
||||
HWND widget;
|
||||
widget = GetDlgItem(g_DialogWin, IDC_CONFIG_TAB);
|
||||
int selected = TabCtrl_GetCurSel(widget);
|
||||
int count = TabCtrl_GetItemCount(widget);
|
||||
widget = GetDlgItem(g_DialogWin, IDC_ABOUT_ENTRIES);
|
||||
int selected = (int)SendMessage(widget, LB_GETCURSEL, NULL, NULL);
|
||||
int count = (int)SendMessage(widget, LB_GETCOUNT, NULL, NULL);
|
||||
|
||||
widget = GetDlgItem(g_DialogWin, IDC_STATISTICS);
|
||||
ListView_DeleteAllItems(widget);
|
||||
|
||||
if (count == selected + 1)
|
||||
if (selected == 0)
|
||||
{
|
||||
LVCOLUMN lvc;
|
||||
lvc.mask = LVCF_TEXT;
|
||||
lvc.pszText = L"Log Type";
|
||||
ListView_SetColumn(widget, 0, &lvc);
|
||||
lvc.pszText = L"Time";
|
||||
ListView_SetColumn(widget, 1, &lvc);
|
||||
lvc.pszText = L"Message";
|
||||
ListView_SetColumn(widget, 2, &lvc);
|
||||
}
|
||||
else if (selected == 1)
|
||||
{
|
||||
LVCOLUMN lvc;
|
||||
lvc.mask = LVCF_TEXT;
|
||||
@ -185,7 +234,7 @@ void UpdateWidgets(HWND window)
|
||||
ListView_SetItemState(widget, 0, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
LVCOLUMN lvc;
|
||||
lvc.mask = LVCF_TEXT;
|
||||
@ -284,12 +333,12 @@ void RepositionControls(HWND hwndDlg)
|
||||
MapWindowPoints(widget, hwndDlg, (LPPOINT)&wr, 2);
|
||||
SetWindowPos(widget, NULL, ((r.right - (wr.right - wr.left)) / 2) + 9, wr.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
|
||||
|
||||
widget = GetDlgItem(hwndDlg, IDC_CONFIG_TAB);
|
||||
SetWindowPos(widget, NULL, 0, 0, r.right - 22, r.bottom - 175, SWP_NOMOVE | SWP_NOZORDER);
|
||||
widget = GetDlgItem(hwndDlg, IDC_ABOUT_ENTRIES);
|
||||
SetWindowPos(widget, NULL, 0, 0, (r.right - 28) / 3, r.bottom - 170, SWP_NOMOVE | SWP_NOZORDER);
|
||||
widget = GetDlgItem(hwndDlg, IDC_STATISTICS);
|
||||
SetWindowPos(widget, NULL, 0, 0, r.right - 44, r.bottom - 210, SWP_NOMOVE | SWP_NOZORDER);
|
||||
SetWindowPos(widget, NULL, 18 + ((r.right - 28) / 3), 130, 2 * ((r.right - 28) / 3), r.bottom - 170, SWP_NOZORDER);
|
||||
widget = GetDlgItem(hwndDlg, IDOK);
|
||||
SetWindowPos(widget, NULL, (r.right - br.right) / 2, r.bottom - br.bottom - 11, br.right, br.bottom, SWP_NOZORDER);
|
||||
SetWindowPos(widget, NULL, (r.right - br.right) / 2, r.bottom - br.bottom - 9, br.right, br.bottom, SWP_NOZORDER);
|
||||
}
|
||||
|
||||
BOOL OnInitAboutDialog(HWND window)
|
||||
@ -305,22 +354,27 @@ BOOL OnInitAboutDialog(HWND window)
|
||||
swprintf(tmpSz, L"Built on %s", ConvertToWide(__DATE__).c_str());
|
||||
SetWindowText(widget, tmpSz);
|
||||
|
||||
// Add tabs for each config
|
||||
widget = GetDlgItem(window, IDC_CONFIG_TAB);
|
||||
TCITEM tie;
|
||||
tie.mask = TCIF_TEXT;
|
||||
// Add entries for each config
|
||||
widget = GetDlgItem(window, IDC_ABOUT_ENTRIES);
|
||||
std::map<std::wstring, CMeterWindow*>& windows = Rainmeter->GetAllMeterWindows();
|
||||
std::map<std::wstring, CMeterWindow*>::const_iterator iter = windows.begin();
|
||||
int i = 0;
|
||||
for( ; iter != windows.end(); ++iter)
|
||||
{
|
||||
CMeterWindow* meterWindow = (*iter).second;
|
||||
wchar_t* skinName = (WCHAR*)meterWindow->GetSkinName().c_str();
|
||||
SendMessage(widget, LB_ADDSTRING, NULL, (LPARAM) skinName);
|
||||
size_t namelength = wcslen(skinName);
|
||||
|
||||
tie.pszText = (WCHAR*)meterWindow->GetSkinName().c_str();
|
||||
TabCtrl_InsertItem(widget, i++, &tie);
|
||||
int currwidth = (INT)SendMessage(widget, LB_GETHORIZONTALEXTENT, NULL, NULL);
|
||||
if(6 * namelength > currwidth)
|
||||
{
|
||||
SendMessage(widget, LB_SETHORIZONTALEXTENT, 6 * namelength, NULL);
|
||||
}
|
||||
}
|
||||
tie.pszText = L"Plugins";
|
||||
TabCtrl_InsertItem(widget, i, &tie);
|
||||
SendMessage(widget, LB_INSERTSTRING, 0, (LPARAM) L"Log");
|
||||
SendMessage(widget, LB_INSERTSTRING, 1, (LPARAM) L"Plugins");
|
||||
SendMessage(widget, LB_INSERTSTRING, 2, (LPARAM) L"--------------------");
|
||||
|
||||
// Add columns to the list view
|
||||
widget = GetDlgItem(window, IDC_STATISTICS);
|
||||
@ -331,15 +385,15 @@ BOOL OnInitAboutDialog(HWND window)
|
||||
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||||
lvc.iSubItem = 0;
|
||||
lvc.pszText = L"Measure";
|
||||
lvc.cx = 150;
|
||||
lvc.cx = 110;
|
||||
lvc.fmt = LVCFMT_LEFT; // left-aligned column
|
||||
ListView_InsertColumn(widget, 0, &lvc);
|
||||
lvc.iSubItem = 1;
|
||||
lvc.cx = 130;
|
||||
lvc.cx = 100;
|
||||
lvc.pszText = L"Value";
|
||||
ListView_InsertColumn(widget, 1, &lvc);
|
||||
lvc.iSubItem = 1;
|
||||
lvc.cx = 130;
|
||||
lvc.cx = 150;
|
||||
lvc.pszText = L"Range";
|
||||
ListView_InsertColumn(widget, 2, &lvc);
|
||||
|
||||
@ -374,17 +428,6 @@ INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa
|
||||
RepositionControls(hwndDlg);
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
LPNMHDR lpnmhdr = (LPNMHDR)lParam;
|
||||
if (lpnmhdr->code == TCN_SELCHANGE)
|
||||
{
|
||||
UpdateWidgets(hwndDlg);
|
||||
UpdateAboutStatistics();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
Rainmeter->SaveSettings();
|
||||
DestroyWindow(hwndDlg);
|
||||
@ -410,6 +453,14 @@ INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa
|
||||
DestroyWindow(hwndDlg);
|
||||
g_DialogWin = NULL;
|
||||
return TRUE;
|
||||
|
||||
case IDC_ABOUT_ENTRIES:
|
||||
if (HIWORD(wParam) == LBN_SELCHANGE)
|
||||
{
|
||||
UpdateWidgets(hwndDlg);
|
||||
UpdateAboutStatistics();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user