Add Scores Window for gtk141

This commit is contained in:
daleclack 2022-10-20 23:38:44 +08:00
parent 8e751b2b7d
commit b32b98b1db
6 changed files with 74 additions and 7 deletions

View File

@ -1,30 +1,39 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<!-- Created with Cambalache 0.11.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="scores_win">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTreeView" id="scores_view">
<property name="height-request">300</property>
<property name="valign">start</property>
<property name="width-request">400</property>
<property name="height-request">300</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="btn_box">
<property name="height-request">3</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label"> </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
@ -32,13 +41,18 @@
<child>
<object class="GtkButton" id="btnclose">
<property name="label">Close</property>
<property name="can-focus">False</property>
<property name="receives-default">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>

View File

@ -1,5 +1,4 @@
#include "InputBox.hh"
#include <fstream>
InputBox::InputBox(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &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();

View File

@ -1,7 +1,6 @@
#pragma once
#include <gtkmm.h>
#include <vector>
#include "jsonfile.hh"
#include "ScoresWin.hh"

View File

@ -6,7 +6,42 @@ ScoresWin::ScoresWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &
{
// 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<std::string> &name_vec, std::vector<int> &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()

View File

@ -7,11 +7,29 @@ class ScoresWin : public Gtk::Window{
public:
static ScoresWin *create();
ScoresWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
void show_with_vectors(std::vector<std::string> &name_vec, std::vector<int> &time_vec);
private:
Glib::RefPtr<Gtk::Builder> 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<std::string> player_name;
Gtk::TreeModelColumn<int> win_time;
};
ModelColumns column1;
Glib::RefPtr<Gtk::ListStore> store;
// Sort function
int sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2);
};

View File

@ -1,5 +1,7 @@
#pragma once
#include "../json_nlohmann/json.hpp"
#include <fstream>
#include <vector>
using json = nlohmann::json;