Starta på et gtk ColumnView
parent
394c68ad26
commit
3d3bc2d858
|
@ -8,4 +8,8 @@ edition = "2021"
|
|||
[dependencies]
|
||||
csv = "1.2"
|
||||
encoding_rs = "0.8"
|
||||
encoding_rs_io = "0.1"
|
||||
encoding_rs_io = "0.1"
|
||||
[dependencies.gtk4]
|
||||
package = "gtk4"
|
||||
version = "0.6.4"
|
||||
features = ["v4_8"]
|
91
src/main.rs
91
src/main.rs
|
@ -4,6 +4,12 @@ use csv::ReaderBuilder;
|
|||
use encoding_rs::WINDOWS_1252;
|
||||
use encoding_rs_io::DecodeReaderBytesBuilder;
|
||||
|
||||
use gtk4 as gtk;
|
||||
use gtk::glib::BoxedAnyObject;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{gio, glib, Inscription};
|
||||
use std::cell::Ref;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Runner {
|
||||
num: i16,
|
||||
|
@ -32,6 +38,12 @@ struct Course {
|
|||
name: String,
|
||||
codes: Vec<String>
|
||||
}
|
||||
|
||||
struct Row {
|
||||
col1: String,
|
||||
col2: String,
|
||||
}
|
||||
|
||||
impl Course {
|
||||
fn get_empty() -> Course{
|
||||
return Course {name: String::from(""), codes: Vec::new()};
|
||||
|
@ -100,8 +112,83 @@ fn check_codes(card: &CardLog, course: &Course) -> bool{
|
|||
}
|
||||
|
||||
fn main() {
|
||||
println!("{:?}", read_ttime_csv_file("/home/trygve/Prosjekter/otime_rs/k2ds/db.csv"));
|
||||
println!("{:?}", read_mtr_file("/home/trygve/Prosjekter/otime_rs/k2ds/mtr.txt"));
|
||||
//println!("{:?}", read_ttime_csv_file("/home/trygve/Prosjekter/otime_rs/k2ds/db.csv"));
|
||||
//println!("{:?}", read_mtr_file("/home/trygve/Prosjekter/otime_rs/k2ds/mtr.txt"));
|
||||
|
||||
let app = gtk::Application::new(
|
||||
Some("me.trygve.otimetest"),
|
||||
Default::default(),
|
||||
);
|
||||
app.connect_activate(build_ui);
|
||||
app.run();
|
||||
}
|
||||
|
||||
fn build_ui(application: >k::Application) {
|
||||
let window = gtk::ApplicationWindow::builder()
|
||||
.default_width(600)
|
||||
.default_height(480)
|
||||
.application(application)
|
||||
.title("Otime 😎️")
|
||||
.build();
|
||||
|
||||
let store = gio::ListStore::new(BoxedAnyObject::static_type());
|
||||
|
||||
let runners = read_ttime_csv_file("/home/trygve/Prosjekter/otime_rs/k2ds/db.csv");
|
||||
let cards = read_mtr_file("/home/trygve/Prosjekter/otime_rs/k2ds/mtr.txt");
|
||||
for runner in runners {
|
||||
store.append(&BoxedAnyObject::new(Row {
|
||||
col1: format!("{}", runner.fname),
|
||||
col2: format!("{}", runner.lname),
|
||||
}));
|
||||
}
|
||||
|
||||
let sel = gtk::SingleSelection::new(Some(store));
|
||||
let columnview = gtk::ColumnView::new(Some(sel));
|
||||
|
||||
let col1factory = gtk::SignalListItemFactory::new();
|
||||
let col2factory = gtk::SignalListItemFactory::new();
|
||||
col1factory.connect_setup(move |_factory, item| {
|
||||
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
|
||||
let row = gtk::EditableLabel::new("aaa");
|
||||
item.set_child(Some(&row));
|
||||
});
|
||||
|
||||
col1factory.connect_bind(move |_factory, item| {
|
||||
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
|
||||
let child = item.child().and_downcast::<gtk::EditableLabel>().unwrap();
|
||||
let entry = item.item().and_downcast::<BoxedAnyObject>().unwrap();
|
||||
let r: Ref<Row> = entry.borrow();
|
||||
|
||||
child.set_text(&r.col1.to_string());
|
||||
});
|
||||
col2factory.connect_setup(move |_factory, item| {
|
||||
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
|
||||
let row = gtk::EditableLabel::new("bbbb");
|
||||
item.set_child(Some(&row));
|
||||
});
|
||||
|
||||
col2factory.connect_bind(move |_factory, item| {
|
||||
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
|
||||
let child = item.child().and_downcast::<gtk::EditableLabel>().unwrap();
|
||||
let entry = item.item().and_downcast::<BoxedAnyObject>().unwrap();
|
||||
let r: Ref<Row> = entry.borrow();
|
||||
child.set_text(&r.col2.to_string());
|
||||
});
|
||||
let col1 = gtk::ColumnViewColumn::new(Some("Fornavn"), Some(col1factory));
|
||||
let col2 = gtk::ColumnViewColumn::new(Some("Etternavn"), Some(col2factory));
|
||||
col1.set_resizable(true);
|
||||
col2.set_resizable(true);
|
||||
columnview.append_column(&col1);
|
||||
columnview.append_column(&col2);
|
||||
|
||||
let scrolled_window = gtk::ScrolledWindow::builder()
|
||||
.hscrollbar_policy(gtk::PolicyType::Never) // Disable horizontal scrolling
|
||||
.build();
|
||||
|
||||
scrolled_window.set_child(Some(&columnview));
|
||||
|
||||
window.set_child(Some(&scrolled_window));
|
||||
window.show();
|
||||
}
|
||||
|
||||
fn read_ttime_csv_file(path: &str) -> Vec<Runner> {
|
||||
|
|
Loading…
Reference in New Issue