diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index eb3d41aa6e..c57efd12c8 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -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); diff --git a/rpcs3/Gui/GameViewer.h b/rpcs3/Gui/GameViewer.h index d31fc241fc..e14d5b4f1e 100644 --- a/rpcs3/Gui/GameViewer.h +++ b/rpcs3/Gui/GameViewer.h @@ -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 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); };