Attempt to make columns sortable for game list

This commit is contained in:
Blaypeg 2014-05-25 19:45:44 +01:00
parent 360070bddb
commit 95f67080f8
2 changed files with 64 additions and 1 deletions

View file

@ -11,6 +11,7 @@ GameViewer::GameViewer(wxWindow* parent) : wxListView(parent)
m_path = "/dev_hdd0/game/";
Bind(wxEVT_LIST_ITEM_ACTIVATED, &GameViewer::DClick, this);
Bind(wxEVT_LIST_COL_CLICK, &GameViewer::OnColClick, this);
Refresh();
}
@ -25,6 +26,48 @@ void GameViewer::DoResize(wxSize size)
SetSize(size);
}
int wxCALLBACK ListItemCompare(long item1, long item2, long sortinfo)
{
ListSortInfo *SortInfo = (ListSortInfo *)sortinfo;
int Column = SortInfo->Column;
GameViewer *pGameViewer = SortInfo->GameViewerCtrl;
bool SortAscending = SortInfo->SortAscending;
long index1 = pGameViewer->FindItem(0, item1);
long index2 = pGameViewer->FindItem(0, item2);
wxString string1 = pGameViewer->GetItemText(index1, Column);
wxString string2 = pGameViewer->GetItemText(index2, Column);
if (string1.Cmp(string2) < 0)
{
return SortAscending ? -1 : 1;
}
else
if (string1.Cmp(string2) > 0)
{
return SortAscending ? 1 : -1;
}
else
{
return 0;
}
}
void GameViewer::OnColClick(wxListEvent& event)
{
if (event.GetColumn() == SortInfo.Column)
{
SortInfo.SortAscending = SortInfo.SortAscending ? FALSE : TRUE;
}
else
{
SortInfo.SortAscending = TRUE;
}
SortInfo.Column = event.GetColumn();
SortInfo.GameViewerCtrl = this;
SortItems(ListItemCompare, (long)&SortInfo);
}
void GameViewer::LoadGames()
{
vfsDir dir(m_path);

View file

@ -216,6 +216,21 @@ public:
}
};
class ListSortInfo
{
public:
ListSortInfo()
{
SortAscending = false;
Column = -1;
}
bool SortAscending;
int Column;
class GameViewer *GameViewerCtrl;
};
class GameViewer : public wxListView
{
std::string m_path;
@ -223,7 +238,12 @@ class GameViewer : public wxListView
std::vector<GameInfo> m_game_data;
ColumnsArr m_columns;
int n_lastItem;
public:
ListSortInfo SortInfo;
GameViewer(wxWindow* parent);
~GameViewer();
@ -237,7 +257,7 @@ public:
void LoadSettings();
void Refresh();
private:
virtual void DClick(wxListEvent& event);
void OnColClick(wxListEvent& event);
};