From 04c225357cfdc7639aef5b6f5c12d8a962fa3f3c Mon Sep 17 00:00:00 2001 From: leca Date: Mon, 13 May 2024 20:15:23 +0300 Subject: [PATCH] I don't have brains --- src/card_gobject/imp.rs | 30 ++++++++++++++ src/card_gobject/mod.rs | 26 +++++++++++++ src/main.rs | 2 +- src/ui/cards/edit/imp.rs | 84 ++++++++++++++-------------------------- src/ui/cards/edit/mod.rs | 6 ++- 5 files changed, 92 insertions(+), 56 deletions(-) create mode 100644 src/card_gobject/imp.rs create mode 100644 src/card_gobject/mod.rs diff --git a/src/card_gobject/imp.rs b/src/card_gobject/imp.rs new file mode 100644 index 0000000..1d7e597 --- /dev/null +++ b/src/card_gobject/imp.rs @@ -0,0 +1,30 @@ +use std::cell::RefCell; + +use glib::Properties; +use gtk::glib; +use gtk::prelude::*; +use gtk::subclass::prelude::*; + +#[derive(Properties, Default)] +#[properties(wrapper_type = super::CardGObject)] +pub struct CardGObject { + #[property(get, set)] + imagepath: RefCell, + #[property(get, set)] + hieroglyph: RefCell, + #[property(get, set)] + reading: RefCell, + #[property(get, set)] + translation: RefCell, + #[property(get, set)] + islearning: RefCell, +} + +#[glib::object_subclass] +impl ObjectSubclass for CardGObject { + const NAME: &'static str = "CardGObject"; + type Type = super::CardGObject; +} + +#[glib::derived_properties] +impl ObjectImpl for CardGObject {} \ No newline at end of file diff --git a/src/card_gobject/mod.rs b/src/card_gobject/mod.rs new file mode 100644 index 0000000..bfac588 --- /dev/null +++ b/src/card_gobject/mod.rs @@ -0,0 +1,26 @@ +mod imp; +use glib::Object; +use gtk::glib; +use crate::card::Card; + +glib::wrapper! { + pub struct CardGObject(ObjectSubclass); +} + +impl CardGObject { + pub fn new(c: Option) -> Self { + match c { + Some(c) => { + Object::builder() + .property("imagepath", c.image_path().unwrap()) + .property("hieroglyph", c.hieroglyph().unwrap()) + .property("reading", c.reading().unwrap()) + .property("translation", c.translation().unwrap()) + .property("islearning", c.is_learning().unwrap()) + .build() + }, + None => Object::builder().build() + } + + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 66a9c35..67c890b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,7 @@ mod ui; mod widgets; mod dictionary; mod card; -// mod card_object; +mod card_gobject; use crate::ui::menu::MenuScene; diff --git a/src/ui/cards/edit/imp.rs b/src/ui/cards/edit/imp.rs index 15a5b34..5a95199 100644 --- a/src/ui/cards/edit/imp.rs +++ b/src/ui/cards/edit/imp.rs @@ -1,13 +1,12 @@ -use std::borrow::Borrow; use std::cell::RefCell; use std::fs; -use std::sync::{Arc, Mutex}; use std::io::ErrorKind; use std::path::Path; use std::rc::Rc; use crate::card::Card; +use crate::card_gobject::CardGObject; use crate::db::*; use crate::ui::cards::new::*; use crate::widgets::card_entry::CardEntry; @@ -19,8 +18,8 @@ use gtk::prelude::WidgetExt; use gtk::prelude::*; use gtk::subclass::prelude::*; use gtk::{ - gio, glib, Button, CompositeTemplate, FileChooserAction, ListView, - NoSelection, ResponseType, ScrolledWindow, SearchEntry, Switch, Window, + gio, glib, Button, CompositeTemplate, FileChooserAction, ListView, NoSelection, ResponseType, + ScrolledWindow, SearchEntry, Switch, Window, }; use gtk::{ListItem, SignalListItemFactory}; use rusqlite::Connection; @@ -40,7 +39,7 @@ pub struct MemoryCardsEditScene { #[template_child] pub back_button: TemplateChild