About Skins: Variables now sorted in alphabetical order.

This commit is contained in:
Birunthan Mohanathas 2012-02-23 16:33:05 +00:00
parent 1121f2659a
commit ef55909da2
2 changed files with 32 additions and 1 deletions

View File

@ -747,9 +747,10 @@ void CDialogAbout::CTabSkins::UpdateMeasureList(CMeterWindow* meterWindow)
int count = ListView_GetItemCount(item);
LVITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_GROUPID;
lvi.mask = LVIF_TEXT | LVIF_GROUPID | LVIF_PARAM;
lvi.iSubItem = 0;
lvi.iItem = 0;
lvi.lParam = 0;
lvi.iGroupId = 0;
const std::list<CMeasure*>& measures = m_SkinWindow->GetMeasures();
@ -779,11 +780,16 @@ void CDialogAbout::CTabSkins::UpdateMeasureList(CMeterWindow* meterWindow)
++lvi.iItem;
}
int topIndex = ListView_GetTopIndex(item);
int countPerPage = ListView_GetCountPerPage(item);
int selIndex = ListView_GetNextItem(item, -1, LVNI_FOCUSED | LVNI_SELECTED);
lvi.iGroupId = 1;
const auto& variables = m_SkinWindow->GetParser().GetVariables();
for (auto iter = variables.cbegin(); iter != variables.cend(); ++iter)
{
lvi.pszText = (WCHAR*)(*iter).first.c_str();
lvi.lParam = (LPARAM)&(*iter).first;
if (lvi.iItem < count)
{
@ -806,9 +812,32 @@ void CDialogAbout::CTabSkins::UpdateMeasureList(CMeterWindow* meterWindow)
--count;
}
ListView_SortItems(item, ListSortProc, 0);
// Ensure that the visible same items are visible
ListView_EnsureVisible(item, topIndex - countPerPage + 1, FALSE);
if (selIndex != -1)
{
ListView_SetItemState(item, selIndex, LVIS_FOCUSED | LVNI_SELECTED, LVIS_FOCUSED | LVNI_SELECTED);
}
SendMessage(item, WM_SETREDRAW, TRUE, 0);
}
int CALLBACK CDialogAbout::CTabSkins::ListSortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// Measures
if (!lParam1 && !lParam2) return 0;
if (!lParam1) return -1;
if (!lParam2) return 1;
// Variables
const std::wstring* str1 = (const std::wstring*)lParam1;
const std::wstring* str2 = (const std::wstring*)lParam2;
return wcscmp(str1->c_str(), str2->c_str());
}
/*
** Dialog procedure for the measures dialog.
**

View File

@ -84,6 +84,8 @@ private:
void UpdateMeasureList(CMeterWindow* meterWindow);
private:
static int CALLBACK ListSortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
CMeterWindow* m_SkinWindow;
};