diff --git a/Gtkmm3/gtk141_minesweeper2/res/scoreswin.ui b/Gtkmm3/gtk141_minesweeper2/res/scoreswin.ui index 957c57b..d853dc7 100644 --- a/Gtkmm3/gtk141_minesweeper2/res/scoreswin.ui +++ b/Gtkmm3/gtk141_minesweeper2/res/scoreswin.ui @@ -1,30 +1,39 @@ - + + + False + False vertical - 300 - start 400 + 300 + False + start + False + True 1 3 + False + False True + False False 1 @@ -32,13 +41,18 @@ Close + False + False + False + True 2 + False False 2 diff --git a/Gtkmm3/gtk141_minesweeper2/src/InputBox.cc b/Gtkmm3/gtk141_minesweeper2/src/InputBox.cc index 4192eca..4166053 100644 --- a/Gtkmm3/gtk141_minesweeper2/src/InputBox.cc +++ b/Gtkmm3/gtk141_minesweeper2/src/InputBox.cc @@ -1,5 +1,4 @@ #include "InputBox.hh" -#include InputBox::InputBox(BaseObjectType *cobject, const Glib::RefPtr &ref_Glade) : Gtk::Dialog(cobject), @@ -34,7 +33,7 @@ void InputBox::on_response(int response_id) // If show scores checkbutton is checked, show scores window if(check_scores->get_active()){ - scores_win1->show_all(); + scores_win1->show_with_vectors(names, times); } } hide(); diff --git a/Gtkmm3/gtk141_minesweeper2/src/InputBox.hh b/Gtkmm3/gtk141_minesweeper2/src/InputBox.hh index 800d501..94a38d2 100644 --- a/Gtkmm3/gtk141_minesweeper2/src/InputBox.hh +++ b/Gtkmm3/gtk141_minesweeper2/src/InputBox.hh @@ -1,7 +1,6 @@ #pragma once #include -#include #include "jsonfile.hh" #include "ScoresWin.hh" diff --git a/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.cc b/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.cc index 2aba74a..7454a62 100644 --- a/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.cc +++ b/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.cc @@ -6,7 +6,42 @@ ScoresWin::ScoresWin(BaseObjectType *cobject, const Glib::RefPtr & { // Get Widgets ref_builder->get_widget("btnclose", btnclose); + ref_builder->get_widget("scores_view", tree_view); btnclose->signal_clicked().connect(sigc::mem_fun(*this, &ScoresWin::hide)); + + // Create the list store + store = Gtk::ListStore::create(column1); + tree_view->set_model(store); + tree_view->append_column("name", column1.player_name); + tree_view->append_column("time", column1.win_time); +} + +void ScoresWin::show_with_vectors(std::vector &name_vec, std::vector &time_vec){ + // Clear the store + store->clear(); + + // Append data to the store + for(int i = 0; i < name_vec.size(); i++){ + auto row = *(store->append()); + row[column1.player_name] = name_vec[i]; + row[column1.win_time] = time_vec[i]; + } + store->set_sort_func(column1.win_time, sigc::mem_fun(*this, &ScoresWin::sort_func)); + + show_all(); +} + +int ScoresWin::sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2){ + auto row1 = *iter1; + auto row2 = *iter2; + if(row1[column1.win_time] < row2[column1.win_time]){ + return -1; + } + if(row1[column1.win_time] == row2[column1.win_time]){ + return 0; + }else{ + return 1; + } } ScoresWin *ScoresWin::create() diff --git a/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.hh b/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.hh index 34f3c84..b0e83b4 100644 --- a/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.hh +++ b/Gtkmm3/gtk141_minesweeper2/src/ScoresWin.hh @@ -7,11 +7,29 @@ class ScoresWin : public Gtk::Window{ public: static ScoresWin *create(); ScoresWin(BaseObjectType *cobject, const Glib::RefPtr &ref_Glade); - + void show_with_vectors(std::vector &name_vec, std::vector &time_vec); + private: Glib::RefPtr ref_builder; // Child widgets Gtk::Button *btnclose; Gtk::TreeView *tree_view; + + // TreeView data + class ModelColumns : public Gtk::TreeModelColumnRecord{ + public: + ModelColumns(){ + add(player_name); + add(win_time); + } + Gtk::TreeModelColumn player_name; + Gtk::TreeModelColumn win_time; + }; + ModelColumns column1; + + Glib::RefPtr store; + + // Sort function + int sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2); }; diff --git a/Gtkmm3/gtk141_minesweeper2/src/jsonfile.hh b/Gtkmm3/gtk141_minesweeper2/src/jsonfile.hh index 2fe7821..6fbdabb 100644 --- a/Gtkmm3/gtk141_minesweeper2/src/jsonfile.hh +++ b/Gtkmm3/gtk141_minesweeper2/src/jsonfile.hh @@ -1,5 +1,7 @@ #pragma once #include "../json_nlohmann/json.hpp" +#include +#include using json = nlohmann::json;