Fix the scores window of gtk142
This commit is contained in:
parent
1d023d0d97
commit
cf1a3729fc
|
@ -11,7 +11,8 @@ ScoresWin::ScoresWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &
|
||||||
|
|
||||||
// Create the list store
|
// Create the list store
|
||||||
store = Gtk::ListStore::create(column1);
|
store = Gtk::ListStore::create(column1);
|
||||||
store->set_sort_column(column1.win_time, Gtk::SortType::DESCENDING);
|
store->set_sort_column(column1.win_time, Gtk::SortType::ASCENDING);
|
||||||
|
store->set_sort_func(column1.win_time, sigc::mem_fun(*this, &ScoresWin::sort_func));
|
||||||
// store->set_default_sort_func(sigc::mem_fun(*this, &ScoresWin::sort_func));
|
// store->set_default_sort_func(sigc::mem_fun(*this, &ScoresWin::sort_func));
|
||||||
tree_view->set_model(store);
|
tree_view->set_model(store);
|
||||||
tree_view->append_column("name", column1.player_name);
|
tree_view->append_column("name", column1.player_name);
|
||||||
|
@ -45,17 +46,19 @@ void ScoresWin::update_and_show()
|
||||||
show();
|
show();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ScoresWin::sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2)
|
int ScoresWin::sort_func(const Gtk::TreeModel::const_iterator &iter1, const Gtk::TreeModel::const_iterator &iter2)
|
||||||
{
|
{
|
||||||
// Sort by the game time
|
// Sort by the game time
|
||||||
auto row1 = *iter1;
|
auto row1 = *iter1;
|
||||||
auto row2 = *iter2;
|
auto row2 = *iter2;
|
||||||
if (row1[column1.win_time] < row2[column1.win_time])
|
if (row1[column1.win_time] < row2[column1.win_time])
|
||||||
{
|
{
|
||||||
|
// g_print("test1\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (row1[column1.win_time] == row2[column1.win_time])
|
if (row1[column1.win_time] == row2[column1.win_time])
|
||||||
{
|
{
|
||||||
|
// g_print("test2\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -31,5 +31,5 @@ class ScoresWin : public Gtk::Window{
|
||||||
Glib::RefPtr<Gtk::ListStore> store;
|
Glib::RefPtr<Gtk::ListStore> store;
|
||||||
|
|
||||||
// Sort function
|
// Sort function
|
||||||
int sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2);
|
int sort_func(const Gtk::TreeModel::const_iterator &iter1, const Gtk::TreeModel::const_iterator &iter2);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "MenuWin.hh"
|
#include "MenuWin.hh"
|
||||||
#include "Win1.hh"
|
#include "Win1.hh"
|
||||||
#include "Win2.hh"
|
#include "Win2.hh"
|
||||||
|
#include "jsonfile.hh"
|
||||||
|
|
||||||
WinShown curr_win;
|
WinShown curr_win;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ MenuWin::MenuWin()
|
||||||
{
|
{
|
||||||
// Initalize window
|
// Initalize window
|
||||||
set_icon_name("org.gtk.daleclack");
|
set_icon_name("org.gtk.daleclack");
|
||||||
set_default_size(300, 200);
|
set_default_size(1024, 576);
|
||||||
|
|
||||||
// Add actions
|
// Add actions
|
||||||
add_action("new_win1", sigc::mem_fun(*this, &MenuWin::new_win1));
|
add_action("new_win1", sigc::mem_fun(*this, &MenuWin::new_win1));
|
||||||
|
|
|
@ -16,6 +16,7 @@ private:
|
||||||
Gtk::Box main_box, btn_box;
|
Gtk::Box main_box, btn_box;
|
||||||
Gtk::Button btn_main, btn_win1, btn_win2;
|
Gtk::Button btn_main, btn_win1, btn_win2;
|
||||||
Gtk::Label label1;
|
Gtk::Label label1;
|
||||||
|
Gtk::Overlay overlay1;
|
||||||
|
|
||||||
// Windows
|
// Windows
|
||||||
Win1 window1;
|
Win1 window1;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../json_nlohmann/json.hpp"
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
|
@ -1,33 +1,116 @@
|
||||||
use std::{fs, io, iter::Map};
|
/*
|
||||||
|
Cfgfile example build with Rust,
|
||||||
|
the original cfgfile is built in Aug 10, 2021,
|
||||||
|
and this is the rust version
|
||||||
|
*/
|
||||||
|
use std::{
|
||||||
|
fs::File,
|
||||||
|
io::{self, BufRead, BufReader},
|
||||||
|
process::exit,
|
||||||
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let funcs = [about, read_cfg, append_cfg, quit_app];
|
||||||
|
|
||||||
|
println!("1.Read a config file;2.Append/Create a config to a config file;3.exit");
|
||||||
|
// Read user selection
|
||||||
|
let mut selection = String::new();
|
||||||
|
loop {
|
||||||
|
io::stdin()
|
||||||
|
.read_line(&mut selection)
|
||||||
|
.expect("Read Line Failed!");
|
||||||
|
|
||||||
|
let selection = selection.trim();
|
||||||
|
if selection == "0" || selection == "1" || selection == "2" || selection == "3" {
|
||||||
|
let index: usize = selection.parse().unwrap();
|
||||||
|
funcs[index]();
|
||||||
|
} else {
|
||||||
|
println!("Input is vaild!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// let v: Vec<&str> = config_str.split('\n').collect();
|
||||||
|
|
||||||
|
// println!("The Length:{}", v.len());
|
||||||
|
// for element in v.iter(){
|
||||||
|
// println!("{}", element);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let longterm: Vec<&str> = v[0].split("=").collect();
|
||||||
|
// let stable: Vec<&str> = v[1].split("=").collect();
|
||||||
|
// let devel: Vec<&str> = v[2].split("=").collect();
|
||||||
|
|
||||||
|
// println!("{}:{}", longterm[0], longterm[1]);
|
||||||
|
// println!("{}:{}", stable[0], stable[1]);
|
||||||
|
// println!("{}:{}", devel[0], devel[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_cfg_file(filename: String, key: String, value: &mut String) {
|
||||||
|
// let mut value = String::new();
|
||||||
|
let key = key.trim();
|
||||||
|
// Open the file
|
||||||
|
// If the file not exist, create it
|
||||||
|
let filename = filename.trim();
|
||||||
|
let file1 = match File::open(filename) {
|
||||||
|
Ok(file1) => file1,
|
||||||
|
Err(_) => File::create(filename).unwrap(),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a BufReader and read the file line by line
|
||||||
|
let reader = BufReader::new(file1);
|
||||||
|
for (_, line) in reader.lines().enumerate() {
|
||||||
|
let line = line.unwrap();
|
||||||
|
// Check the vaild config line
|
||||||
|
let result = line.find("=");
|
||||||
|
if result != None {
|
||||||
|
// split the content line to key and value
|
||||||
|
let key_value: Vec<&str> = line.split("=").collect();
|
||||||
|
let key1 = key_value[0].clone();
|
||||||
|
if key1 == key {
|
||||||
|
// Push the value
|
||||||
|
value.push_str(key_value[1]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn about() {
|
||||||
|
println!("The Cfgfile test for Rust by daleclack");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_cfg() {
|
||||||
|
println!("Read a config file!");
|
||||||
// Read the filename
|
// Read the filename
|
||||||
|
println!("Input filename");
|
||||||
let mut filename = String::new();
|
let mut filename = String::new();
|
||||||
io::stdin()
|
io::stdin()
|
||||||
.read_line(&mut filename)
|
.read_line(&mut filename)
|
||||||
.expect("Failed to read the line!");
|
.expect("Failed to read the line!");
|
||||||
|
|
||||||
// Open the file
|
// Read the value
|
||||||
let filename = filename.trim();
|
println!("Input Key");
|
||||||
let config_str = match fs::read_to_string(filename) {
|
let mut key = String::new();
|
||||||
Ok(config_str) => config_str,
|
io::stdin()
|
||||||
Err(_) => String::from("-1"),
|
.read_line(&mut key)
|
||||||
};
|
.expect("Failed to read the line!");
|
||||||
|
let key1 = key.clone();
|
||||||
|
|
||||||
//println!("The content of file:{}", config_str);
|
let mut value = String::new();
|
||||||
|
read_cfg_file(filename, key, &mut value);
|
||||||
let v: Vec<&str> = config_str.splitn(3, '\n').collect();
|
println!("{}:{}", key1.trim(), value);
|
||||||
|
}
|
||||||
//println!("{}\n{}\n{}\n", v[0], v[1], v[2]);
|
|
||||||
|
fn append_cfg() {
|
||||||
let longterm: Vec<&str> = v[0].split("=").collect();
|
println!("Append a config to cfgfile!");
|
||||||
let stable: Vec<&str> = v[1].split("=").collect();
|
// Read the filename
|
||||||
let devel: Vec<&str> = v[2].split("=").collect();
|
println!("Input filename");
|
||||||
|
let mut filename = String::new();
|
||||||
println!("{}:{}", longterm[0], longterm[1]);
|
io::stdin()
|
||||||
println!("{}:{}", stable[0], stable[1]);
|
.read_line(&mut filename)
|
||||||
println!("{}:{}", devel[0], devel[1]);
|
.expect("Failed to read the line!");
|
||||||
|
}
|
||||||
// Get a line of string
|
|
||||||
//let config_map : Map<String, String>;
|
fn quit_app() {
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
This is the config file of Xe Release
|
||||||
|
See more on github.com/daleclack/Xe-Release
|
||||||
|
|
||||||
Longterm=5.7
|
Longterm=5.7
|
||||||
Stable=7.12
|
Stable=7.12
|
||||||
Develop=8.0
|
Develop=8.0
|
||||||
|
Release_Path_Unix=/mnt/Dell/Gtk_Dev/Xe-Project
|
||||||
|
Release_Path_Win32=D:\Gtk_Dev\Xe-Project
|
||||||
|
|
Loading…
Reference in New Issue