aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-12-25 18:30:56 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-12-25 18:30:56 +0100
commit5df6e9395c4ec744f38e7ce874ff7c02e8a3afbd (patch)
treec8435f7b80ee82adee59a0e1a7e84abc6302b3e2 /src
parent8cc460fd202703646f7c908a4fb2a485b21dc9e1 (diff)
Improve game filtering
Diffstat (limited to 'src')
-rw-r--r--src/base_tab/BaseGameTab.cpp11
-rw-r--r--src/base_tab/BaseGameTab.hpp1
-rw-r--r--src/base_tab/GameListManager.cpp22
-rw-r--r--src/base_tab/GameListManager.hpp4
-rw-r--r--src/gui.cpp4
-rw-r--r--src/gui.h6
6 files changed, 44 insertions, 4 deletions
diff --git a/src/base_tab/BaseGameTab.cpp b/src/base_tab/BaseGameTab.cpp
index 6084d67..29729c4 100644
--- a/src/base_tab/BaseGameTab.cpp
+++ b/src/base_tab/BaseGameTab.cpp
@@ -16,12 +16,23 @@ BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnExport, this, ID_EXPORT_BUTTON);
this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseGameTab::OnOpenGame, this, wxID_ANY);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnImport, this, ID_IMPORT_BUTTON);
+ this->Bind(wxEVT_BUTTON, &BaseGameTab::OnApplyFilter, this, ID_APPLY_FILTER_BUTTON);
+ this->Bind(wxEVT_TEXT_ENTER, &BaseGameTab::OnApplyFilter, this, ID_SEARCH_TERMS);
current_base->SetLabel(base_file);
search_terms->SetHint("e.g: Paul Morphy");
LoadFile();
}
+void BaseGameTab::OnApplyFilter(wxCommandEvent &event){
+ wxString terms=search_terms->GetValue();
+ if(terms.length()>0){
+ glm->Filter(terms.ToStdString());
+ } else {
+ glm->ClearFilter();
+ }
+}
+
void BaseGameTab::OnImport(wxCommandEvent &event) {
AppendGameDialog *dia = new AppendGameDialog(this, base);
dia->ShowModal();
diff --git a/src/base_tab/BaseGameTab.hpp b/src/base_tab/BaseGameTab.hpp
index 45cc552..c9be350 100644
--- a/src/base_tab/BaseGameTab.hpp
+++ b/src/base_tab/BaseGameTab.hpp
@@ -27,6 +27,7 @@ public:
void OnExport(wxCommandEvent &event);
void OnOpenGame(wxListEvent &event);
void OnImport(wxCommandEvent &event);
+ void OnApplyFilter(wxCommandEvent &event);
std::shared_ptr<Game> GetGame() { return (std::shared_ptr<Game>(NULL)); }
std::shared_ptr<GameBase> GetBase() { return (std::shared_ptr<GameBase>(base)); };
}; \ No newline at end of file
diff --git a/src/base_tab/GameListManager.cpp b/src/base_tab/GameListManager.cpp
index e073eed..35b6158 100644
--- a/src/base_tab/GameListManager.cpp
+++ b/src/base_tab/GameListManager.cpp
@@ -68,3 +68,25 @@ long GameListManager::GetItemGameId(long item){
return std::stol(listItem.GetText().ToStdString());
}
+void GameListManager::Filter(std::string terms){
+ ClearDisplayedRow();
+ for(int i=0;i<rows.size();i++){
+ RType row=rows[i];
+ if(TERMS_IN(White) ||
+ TERMS_IN(Black) ||
+ TERMS_IN(Event) ||
+ TERMS_IN(Round) ||
+ TERMS_IN(Result) ||
+ TERMS_IN(Eco)){
+ DisplayRow(i);
+ }
+ }
+}
+
+void GameListManager::ClearFilter() {
+ ClearDisplayedRow();
+ for(int i=0;i<rows.size();i++){
+ DisplayRow(i);
+ }
+}
+
diff --git a/src/base_tab/GameListManager.hpp b/src/base_tab/GameListManager.hpp
index edfd18b..5c80a68 100644
--- a/src/base_tab/GameListManager.hpp
+++ b/src/base_tab/GameListManager.hpp
@@ -1,5 +1,7 @@
#include "ochess.hpp"
+#define TERMS_IN(COL) (row.COL.find(terms) != std::string::npos)
+
typedef std::string CType;
typedef struct Item {
@@ -26,4 +28,6 @@ public:
void MarkItemAsDeleted(long item);
std::vector<long> GetSelectedItems();
long GetItemGameId(long item);
+ void Filter(std::string terms);
+ void ClearFilter();
}; \ No newline at end of file
diff --git a/src/gui.cpp b/src/gui.cpp
index db34ebb..ae717a5 100644
--- a/src/gui.cpp
+++ b/src/gui.cpp
@@ -549,10 +549,10 @@ TabBase_TabGames::TabBase_TabGames( wxWindow* parent, wxWindowID id, const wxPoi
m_staticText28->Wrap( -1 );
bSizer34->Add( m_staticText28, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
- search_terms = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ search_terms = new wxTextCtrl( this, ID_SEARCH_TERMS, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
bSizer34->Add( search_terms, 1, wxALL|wxEXPAND, 5 );
- apply_filter_button = new wxButton( this, wxID_ANY, wxT("Apply"), wxDefaultPosition, wxDefaultSize, 0 );
+ apply_filter_button = new wxButton( this, ID_APPLY_FILTER_BUTTON, wxT("Apply"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer34->Add( apply_filter_button, 0, wxALL, 5 );
diff --git a/src/gui.h b/src/gui.h
index 3775973..347cd89 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -57,8 +57,10 @@
#define LIVE_ANALYSIS_GAME_BUTTON 1012
#define ID_SAVE_BUTTON 1013
#define ID_EXPORT_BUTTON 1014
-#define ID_IMPORT_BUTTON 1015
-#define ID_DELETE_BUTTON 1016
+#define ID_SEARCH_TERMS 1015
+#define ID_APPLY_FILTER_BUTTON 1016
+#define ID_IMPORT_BUTTON 1017
+#define ID_DELETE_BUTTON 1018
///////////////////////////////////////////////////////////////////////////////
/// Class MainFrame