fix switch and some changes
This commit is contained in:
parent
3d0543931d
commit
f30bc31d46
|
@ -3,7 +3,7 @@
|
|||
<template class="MemoryCardsEditScene" parent="GtkApplicationWindow">
|
||||
<property name="title">Memory cards edit</property>
|
||||
<property name="height-request">1000</property>
|
||||
<!-- <property name="width-request">500</property> -->
|
||||
<property name="width-request">1000</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="content">
|
||||
<property name="orientation">vertical</property>
|
||||
|
|
|
@ -14,6 +14,7 @@ mod card;
|
|||
use crate::ui::menu::MenuScene;
|
||||
|
||||
use gtk::glib::closure_local;
|
||||
use gtk::glib::subclass::types::ObjectSubclassIsExt;
|
||||
use gtk::{gio, glib, Application, Button};
|
||||
use gtk::{prelude::*, Window};
|
||||
use ui::cards::edit::MemoryCardsEditScene;
|
||||
|
@ -124,8 +125,10 @@ fn build_ui(app: &Application) {
|
|||
"clicked",
|
||||
false,
|
||||
closure_local!(
|
||||
@strong app => move |_b: &Button| {
|
||||
@strong app, @strong memory_cards_edit => move |_b: &Button| {
|
||||
switch_to(&app, AppWindow::MemoryCardsEditScene);
|
||||
memory_cards_edit.imp().query_cards(None);
|
||||
memory_cards_edit.imp().update_state();
|
||||
}
|
||||
),
|
||||
);
|
||||
|
|
|
@ -10,9 +10,7 @@ use crate::ui::cards::new::*;
|
|||
use crate::widgets::card_entry::CardEntry;
|
||||
use glib::subclass::InitializingObject;
|
||||
use gtk::gio::ListStore;
|
||||
// use gtk::glib::ffi::GString;
|
||||
use gtk::glib::object::ObjectExt;
|
||||
use gtk::glib::GString;
|
||||
use gtk::glib::{clone, closure_local};
|
||||
use gtk::prelude::WidgetExt;
|
||||
use gtk::subclass::prelude::*;
|
||||
|
@ -21,7 +19,7 @@ use gtk::{
|
|||
Window,
|
||||
};
|
||||
use gtk::{prelude::*, FileDialog};
|
||||
use gtk::{ListBox, ListItem, SignalListItemFactory};
|
||||
use gtk::{ListItem, SignalListItemFactory};
|
||||
use rusqlite::Connection;
|
||||
use sha256::try_digest;
|
||||
|
||||
|
@ -73,6 +71,7 @@ impl ObjectImpl for MemoryCardsEditScene {
|
|||
}));
|
||||
new_win.get_done_button().connect_closure("clicked", true, closure_local!(@strong binding => move |_w: &Button| {
|
||||
binding.imp().query_cards(None);
|
||||
binding.imp().update_state();
|
||||
}));
|
||||
new_win.present();
|
||||
}));
|
||||
|
@ -88,51 +87,18 @@ impl ObjectImpl for MemoryCardsEditScene {
|
|||
}
|
||||
}
|
||||
);
|
||||
binding.imp().update_state();
|
||||
}));
|
||||
self.query_cards(None);
|
||||
// self.query_cards(None);
|
||||
self.update_state();
|
||||
println!("Constructed");
|
||||
}
|
||||
}
|
||||
|
||||
impl MemoryCardsEditScene {
|
||||
pub fn query_cards(&self, options: Option<String>) {
|
||||
let conn = Connection::open(get_db_path()).unwrap();
|
||||
|
||||
let selector = match options {
|
||||
Some(s) => "WHERE ".to_owned() + &s,
|
||||
None => "".to_owned(),
|
||||
};
|
||||
|
||||
let sql = format!(
|
||||
"SELECT imagename, hieroglyph, reading, translation, is_learning FROM cards {selector}"
|
||||
);
|
||||
let mut stmt = conn.prepare(sql.as_str()).unwrap();
|
||||
let cards_iter = stmt
|
||||
.query_map([], |row| {
|
||||
let image_path: String = match row.get(0) {
|
||||
Ok(path) => path,
|
||||
Err(_) => String::from(""),
|
||||
};
|
||||
let c = Card::new(
|
||||
Some(get_images_store_path() + &image_path),
|
||||
Some(row.get(1).unwrap()),
|
||||
Some(row.get(2).unwrap()),
|
||||
Some(row.get(3).unwrap()),
|
||||
Some(row.get(4).unwrap()),
|
||||
);
|
||||
// println!("{c:?} ");
|
||||
|
||||
let entry = CardEntry::new(Some(&c));
|
||||
entry.update_state();
|
||||
Ok(entry)
|
||||
})
|
||||
.unwrap();
|
||||
self.displaying_cards.borrow_mut().clear();
|
||||
println!("pos1");
|
||||
for c in cards_iter {
|
||||
self.displaying_cards.borrow_mut().push(c.unwrap());
|
||||
}
|
||||
println!("pos2");
|
||||
|
||||
pub fn update_state(&self) {
|
||||
println!("Updating state");
|
||||
let model = ListStore::new::<CardEntry>();
|
||||
model.extend_from_slice(&*self.displaying_cards.borrow());
|
||||
|
||||
|
@ -160,16 +126,6 @@ impl MemoryCardsEditScene {
|
|||
.and_downcast::<CardEntry>()
|
||||
.unwrap();
|
||||
|
||||
// let path =
|
||||
// // card_object_to_display.get_image_widget().set_file(Some(
|
||||
// // // &card_object.get_image_widget().file().unwrap()
|
||||
// // match card_object.get_image_widget().file() {
|
||||
// // None => "",
|
||||
// // Some(t) => {
|
||||
// // t.to_string().to_owned().as_str()
|
||||
// // }
|
||||
// // }
|
||||
// // ));
|
||||
card_object_to_display.get_image_widget().set_file(Some(card_object.get_image_file_path().as_str()));
|
||||
card_object_to_display.set_hieroglyph(card_object.hieroglyph());
|
||||
card_object_to_display.set_reading(card_object.reading());
|
||||
|
@ -177,12 +133,48 @@ impl MemoryCardsEditScene {
|
|||
card_object_to_display.set_islearning(card_object.islearning());
|
||||
});
|
||||
|
||||
println!("pos3");
|
||||
|
||||
let no_selection_model = NoSelection::new(Some(model));
|
||||
let list_view = ListView::new(Some(no_selection_model), Some(factory));
|
||||
self.cards_scrolled_window.set_child(Some(&list_view));
|
||||
println!("pos4");
|
||||
}
|
||||
|
||||
pub fn query_cards(&self, options: Option<String>) {
|
||||
let conn = Connection::open(get_db_path()).unwrap();
|
||||
|
||||
let selector = match options {
|
||||
Some(s) => "WHERE ".to_owned() + &s,
|
||||
None => "".to_owned(),
|
||||
};
|
||||
|
||||
let sql = format!(
|
||||
"SELECT imagename, hieroglyph, reading, translation, is_learning FROM cards {selector}"
|
||||
);
|
||||
let mut stmt = conn.prepare(sql.as_str()).unwrap();
|
||||
let cards_iter = stmt
|
||||
.query_map([], |row| {
|
||||
let image_path: String = match row.get(0) {
|
||||
Ok(path) => path,
|
||||
Err(_) => String::from(""),
|
||||
};
|
||||
let c = Card::new(
|
||||
Some(get_images_store_path() + &image_path),
|
||||
Some(row.get(1).unwrap()),
|
||||
Some(row.get(2).unwrap()),
|
||||
Some(row.get(3).unwrap()),
|
||||
Some(row.get(4).unwrap()),
|
||||
);
|
||||
if c.is_learning().unwrap() {
|
||||
println!("{c:?}");
|
||||
}
|
||||
let entry = CardEntry::new(Some(&c));
|
||||
entry.update_state();
|
||||
Ok(entry)
|
||||
})
|
||||
.unwrap();
|
||||
self.displaying_cards.borrow_mut().clear();
|
||||
for c in cards_iter {
|
||||
self.displaying_cards.borrow_mut().push(c.unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,7 +196,6 @@ async fn new_card_setup<W: IsA<gtk::Window>>(window: Rc<W>) {
|
|||
let path: String = path.as_path().to_str().unwrap().to_owned();
|
||||
|
||||
picture_widget.set_file(Some(&gio::File::for_path(&path)));
|
||||
println!("Image path has changed");
|
||||
|
||||
let images_store_path = get_program_home_path() + "/images";
|
||||
|
||||
|
@ -215,6 +206,7 @@ async fn new_card_setup<W: IsA<gtk::Window>>(window: Rc<W>) {
|
|||
_ => panic!("Could not create directory for storing images!"),
|
||||
},
|
||||
};
|
||||
|
||||
w.get_done_button().connect_closure(
|
||||
"clicked",
|
||||
false,
|
||||
|
@ -246,8 +238,10 @@ async fn new_card_setup<W: IsA<gtk::Window>>(window: Rc<W>) {
|
|||
)
|
||||
)", (&new_filename, &hieroglyph, &reading, &translation)).unwrap();
|
||||
conn.execute("UPDATE cards SET is_learning = TRUE WHERE hieroglyph = ?1", [&hieroglyph]).unwrap();
|
||||
w.close();
|
||||
|
||||
|
||||
|
||||
w.close();
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
use crate::ui::cards::{edit::MemoryCardsEditScene, game::MemoryCardsGameScene};
|
||||
|
||||
use glib::subclass::InitializingObject;
|
||||
use gtk::glib::closure_local;
|
||||
use gtk::subclass::prelude::*;
|
||||
use gtk::{glib, prelude::*, Button, CompositeTemplate};
|
||||
use gtk::{glib, Button, CompositeTemplate};
|
||||
|
||||
#[derive(CompositeTemplate, Default)]
|
||||
#[template(resource = "/org/foxarmy/learn-hieroglyph/cards/setup/ui.xml")]
|
||||
|
@ -33,21 +30,7 @@ impl ObjectSubclass for MemoryCardsSetupScene {
|
|||
|
||||
impl ObjectImpl for MemoryCardsSetupScene {
|
||||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
|
||||
let binding = self.obj();
|
||||
|
||||
self.edit_button.connect_closure("clicked",false, closure_local!(@strong binding => move |_b: &Button| {
|
||||
let new_win: MemoryCardsEditScene = MemoryCardsEditScene::new(&binding.application().unwrap());
|
||||
new_win.present();
|
||||
})
|
||||
);
|
||||
|
||||
self.start_button.connect_closure("clicked", false, closure_local!(@strong binding => move |_b: &Button| {
|
||||
let new_win: MemoryCardsGameScene = MemoryCardsGameScene::new(&binding.application().unwrap());
|
||||
new_win.present();
|
||||
}),
|
||||
);
|
||||
self.parent_constructed();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -73,6 +73,12 @@ impl ObjectImpl for CardEntry {
|
|||
.bind_property("translation", translation_label_binding, "label")
|
||||
.sync_create()
|
||||
.build();
|
||||
|
||||
let is_learning_switch_binding: &Switch = self.is_learning_switch.as_ref();
|
||||
self.obj()
|
||||
.bind_property("islearning", is_learning_switch_binding, "active")
|
||||
.sync_create()
|
||||
.build();
|
||||
}
|
||||
|
||||
fn dispose(&self) {
|
||||
|
|
|
@ -20,13 +20,14 @@ glib::wrapper! {
|
|||
impl CardEntry {
|
||||
pub fn new(card: Option<&Card>) -> Self {
|
||||
match card {
|
||||
Some(card) => Object::builder()
|
||||
.property("imagepath", card.image_path().unwrap())
|
||||
.property("hieroglyph", card.hieroglyph().unwrap())
|
||||
.property("reading", card.reading().unwrap())
|
||||
.property("translation", card.translation().unwrap())
|
||||
.property("islearning", card.is_learning().unwrap())
|
||||
.build(),
|
||||
Some(card) =>
|
||||
Object::builder()
|
||||
.property("imagepath", card.image_path().unwrap())
|
||||
.property("hieroglyph", card.hieroglyph().unwrap())
|
||||
.property("reading", card.reading().unwrap())
|
||||
.property("translation", card.translation().unwrap())
|
||||
.property("islearning", card.is_learning().unwrap())
|
||||
.build(),
|
||||
None => Object::builder()
|
||||
.property("imagepath", "")
|
||||
.property("hieroglyph", "")
|
||||
|
|
Loading…
Reference in New Issue