search now works
This commit is contained in:
parent
857613a01d
commit
5f768be350
|
@ -37,7 +37,7 @@
|
||||||
<property name="valign">GTK_ALIGN_FILL</property>
|
<property name="valign">GTK_ALIGN_FILL</property>
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="cards">
|
<object class="GtkBox" id="cards_container">
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="halign">GTK_ALIGN_FILL</property>
|
<property name="halign">GTK_ALIGN_FILL</property>
|
||||||
<property name="valign">GTK_ALIGN_FILL</property>
|
<property name="valign">GTK_ALIGN_FILL</property>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::cell::RefCell;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::ErrorKind;
|
use std::io::ErrorKind;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -24,9 +25,11 @@ pub struct MemoryCardsEditScene {
|
||||||
#[template_child]
|
#[template_child]
|
||||||
pub add_button: TemplateChild<Button>,
|
pub add_button: TemplateChild<Button>,
|
||||||
#[template_child]
|
#[template_child]
|
||||||
pub cards: TemplateChild<Box>,
|
pub cards_container: TemplateChild<Box>,
|
||||||
#[template_child]
|
#[template_child]
|
||||||
pub cards_scrolled_window: TemplateChild<ScrolledWindow>,
|
pub cards_scrolled_window: TemplateChild<ScrolledWindow>,
|
||||||
|
|
||||||
|
displaying_cards: RefCell<Vec<CardEntry>>
|
||||||
}
|
}
|
||||||
|
|
||||||
#[glib::object_subclass]
|
#[glib::object_subclass]
|
||||||
|
@ -48,6 +51,9 @@ impl ObjectImpl for MemoryCardsEditScene {
|
||||||
fn constructed(&self) {
|
fn constructed(&self) {
|
||||||
self.parent_constructed();
|
self.parent_constructed();
|
||||||
|
|
||||||
|
self.query_cards(None);
|
||||||
|
self.update_card_list();
|
||||||
|
|
||||||
let binding = self.obj();
|
let binding = self.obj();
|
||||||
|
|
||||||
self.add_button.connect_closure("clicked",
|
self.add_button.connect_closure("clicked",
|
||||||
|
@ -58,26 +64,50 @@ impl ObjectImpl for MemoryCardsEditScene {
|
||||||
gtk::glib::MainContext::default().spawn_local(file_choose_dialog(Rc::clone(&new_win)));
|
gtk::glib::MainContext::default().spawn_local(file_choose_dialog(Rc::clone(&new_win)));
|
||||||
}));
|
}));
|
||||||
new_win.get_done_button().connect_closure("clicked", true, closure_local!(@strong binding => move |_w: &Button| {
|
new_win.get_done_button().connect_closure("clicked", true, closure_local!(@strong binding => move |_w: &Button| {
|
||||||
|
binding.imp().query_cards(None);
|
||||||
binding.imp().update_card_list();
|
binding.imp().update_card_list();
|
||||||
}));
|
}));
|
||||||
new_win.present();
|
new_win.present();
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
self.search_entry.connect_closure("changed", false, closure_local!(@strong binding => move |e: &SearchEntry| {
|
||||||
|
binding.imp().query_cards(
|
||||||
|
match e.text().as_str() {
|
||||||
|
"" => None,
|
||||||
|
_ => {
|
||||||
|
let search_option = e.text().to_string();
|
||||||
|
let conditions = format!("hieroglyph LIKE '%{}%' OR reading LIKE '%{}%'", search_option, search_option);
|
||||||
|
Some(conditions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
binding.imp().update_card_list();
|
||||||
|
}));
|
||||||
self.update_card_list();
|
self.update_card_list();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MemoryCardsEditScene {
|
impl MemoryCardsEditScene {
|
||||||
pub fn update_card_list(&self) {
|
pub fn clear_displaying_card(&self) {
|
||||||
let c: &Box = self.cards.as_ref();
|
let c: &Box = self.cards_container.as_ref();
|
||||||
|
|
||||||
while c.first_child() != None {
|
while c.first_child() != None {
|
||||||
c.remove(&c.first_child().unwrap());
|
c.remove(&c.first_child().unwrap());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn query_cards(&self, options: Option<String>) {
|
||||||
let conn = Connection::open(get_db_path()).unwrap();
|
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 FROM cards {selector}");
|
||||||
let mut stmt = conn
|
let mut stmt = conn
|
||||||
.prepare("SELECT imagename, hieroglyph, reading FROM cards")
|
.prepare(sql.as_str())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let cards_iter = stmt
|
let cards_iter = stmt
|
||||||
.query_map([], |row| {
|
.query_map([], |row| {
|
||||||
|
@ -89,21 +119,31 @@ impl MemoryCardsEditScene {
|
||||||
Ok(entry)
|
Ok(entry)
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
self.displaying_cards.borrow_mut().clear();
|
||||||
for card in cards_iter {
|
for card in cards_iter {
|
||||||
let card_binding = card.unwrap();
|
let card_binding = card.unwrap();
|
||||||
let self_binding = self.obj();
|
self.displaying_cards.borrow_mut().push(card_binding);
|
||||||
c.append(&card_binding);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
card_binding.get_delete_button_widget().connect_closure("clicked", false, closure_local!(@strong card_binding, @strong self_binding => move |_b: &Button| {
|
pub fn update_card_list(&self) {
|
||||||
|
let c: &Box = self.cards_container.as_ref();
|
||||||
|
|
||||||
|
self.clear_displaying_card();
|
||||||
|
|
||||||
|
for card in self.displaying_cards.borrow().iter() {
|
||||||
|
let self_binding = self.obj();
|
||||||
|
c.append(card);
|
||||||
|
|
||||||
|
card.get_delete_button_widget().connect_closure("clicked", false, closure_local!(@strong card, @strong self_binding => move |_b: &Button| {
|
||||||
let connection = Connection::open(get_db_path()).unwrap();
|
let connection = Connection::open(get_db_path()).unwrap();
|
||||||
let imagepath = card_binding.imagepath();
|
let imagepath = card.imagepath();
|
||||||
let imagename = &Path::new(&imagepath).file_name().unwrap().to_str().unwrap();
|
let imagename = &Path::new(&imagepath).file_name().unwrap().to_str().unwrap();
|
||||||
fs::remove_file(get_images_store_path() + "/" + &imagename).expect("Could not remove file!");
|
fs::remove_file(get_images_store_path() + "/" + &imagename).expect("Could not remove file!");
|
||||||
connection.execute("DELETE FROM cards WHERE imagename = ?1", [&imagename]).unwrap();
|
connection.execute("DELETE FROM cards WHERE imagename = ?1", [&imagename]).unwrap();
|
||||||
self_binding.imp().update_card_list();
|
self_binding.imp().update_card_list();
|
||||||
}));
|
}));
|
||||||
card_binding.update_file_for_picture();
|
card.update_file_for_picture();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue