implemented delete card entry
This commit is contained in:
parent
fa260bb8f5
commit
193db81657
|
@ -1,9 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<template class="CardEntry" parent="GtkWidget">
|
<template class="CardEntry" parent="GtkWidget">
|
||||||
<property name="imagepath"></property>
|
|
||||||
<property name="hieroglyph"></property>
|
|
||||||
<property name="reading"></property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkPicture" id="picture">
|
<object class="GtkPicture" id="picture">
|
||||||
<property name="halign">GTK_ALIGN_CENTER</property>
|
<property name="halign">GTK_ALIGN_CENTER</property>
|
||||||
|
@ -23,9 +20,10 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="edit_button">
|
<object class="GtkButton" id="delete_button">
|
||||||
<property name="halign">GTK_ALIGN_END</property>
|
<property name="halign">GTK_ALIGN_END</property>
|
||||||
<property name="valign">GTK_ALIGN_END</property>
|
<property name="valign">GTK_ALIGN_END</property>
|
||||||
|
<property name="label">delete</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -60,7 +60,6 @@ impl ObjectImpl for MemoryCardsEditScene {
|
||||||
}));
|
}));
|
||||||
self.update_card_list();
|
self.update_card_list();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MemoryCardsEditScene {
|
impl MemoryCardsEditScene {
|
||||||
|
@ -77,26 +76,37 @@ impl MemoryCardsEditScene {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let cards_iter = stmt
|
let cards_iter = stmt
|
||||||
.query_map([], |row| {
|
.query_map([], |row| {
|
||||||
let a: String = row.get(0).unwrap();
|
let image_path: String = row.get(0).unwrap();
|
||||||
let b: String = row.get(1).unwrap();
|
let image_path = get_images_store_path() + &image_path;
|
||||||
let c: String = row.get(2).unwrap();
|
let hieroglyph: String = row.get(1).unwrap();
|
||||||
let entry = CardEntry::new(&a, &b, &c);
|
let reading: String = row.get(2).unwrap();
|
||||||
|
let entry = CardEntry::new(&image_path, &hieroglyph, &reading);
|
||||||
Ok(entry)
|
Ok(entry)
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
for card in cards_iter {
|
for card in cards_iter {
|
||||||
|
// let card_binding = card.unwrap();
|
||||||
|
// let path = &card_binding.imagepath();
|
||||||
|
// println!("path: {}", path);
|
||||||
|
// card_binding.set_imagepath(&*path);
|
||||||
|
// card_binding.get_picture_widget().set_file(Some(&gio::File::for_path(&path)));
|
||||||
let card_binding = card.unwrap();
|
let card_binding = card.unwrap();
|
||||||
let path = get_images_store_path() + &card_binding.imagepath();
|
let self_binding = self.obj();
|
||||||
card_binding.set_imagepath(&*path);
|
|
||||||
card_binding.get_picture_widget().set_file(Some(&gio::File::for_path(&path)));
|
|
||||||
c.append(&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| {
|
||||||
|
let connection = Connection::open(get_db_path()).unwrap();
|
||||||
|
let imagepath = card_binding.imagepath();
|
||||||
|
let imagename = &Path::new(&imagepath).file_name().unwrap().to_str().unwrap();
|
||||||
|
fs::remove_file(get_images_store_path() + "/" + &imagename).expect("Could not remove file!");
|
||||||
|
connection.execute("DELETE FROM cards WHERE imagename = ?1", [&imagename]).unwrap();
|
||||||
|
self_binding.imp().update_card_list();
|
||||||
|
}));
|
||||||
|
card_binding.update_file_for_picture();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async fn file_choose_dialog<W: IsA<gtk::Window>>(window: Rc<W>) {
|
async fn file_choose_dialog<W: IsA<gtk::Window>>(window: Rc<W>) {
|
||||||
let dialog: FileDialog = gtk::FileDialog::builder().build();
|
let dialog: FileDialog = gtk::FileDialog::builder().build();
|
||||||
let answer = dialog.open_future(Some(&*window)).await;
|
let answer = dialog.open_future(Some(&*window)).await;
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
use glib::subclass::InitializingObject;
|
use glib::subclass::InitializingObject;
|
||||||
use glib::Properties;
|
use glib::Properties;
|
||||||
use gtk::gio::File;
|
|
||||||
use gtk::subclass::prelude::*;
|
use gtk::subclass::prelude::*;
|
||||||
use gtk::{glib, prelude::*, Button, CompositeTemplate, Label, Picture};
|
use gtk::{glib, prelude::*, Button, CompositeTemplate, Label, Picture};
|
||||||
|
|
||||||
|
@ -18,9 +16,9 @@ pub struct CardEntry {
|
||||||
#[template_child]
|
#[template_child]
|
||||||
pub reading_label: TemplateChild<Label>,
|
pub reading_label: TemplateChild<Label>,
|
||||||
#[template_child]
|
#[template_child]
|
||||||
pub edit_button: TemplateChild<Button>,
|
pub delete_button: TemplateChild<Button>,
|
||||||
#[property(get, set)]
|
#[property(get, set)]
|
||||||
imagepath: RefCell<String>,
|
pub imagepath: RefCell<String>,
|
||||||
#[property(get, set)]
|
#[property(get, set)]
|
||||||
hieroglyph: RefCell<String>,
|
hieroglyph: RefCell<String>,
|
||||||
#[property(get, set)]
|
#[property(get, set)]
|
||||||
|
@ -47,12 +45,6 @@ impl ObjectImpl for CardEntry {
|
||||||
fn constructed(&self) {
|
fn constructed(&self) {
|
||||||
self.parent_constructed();
|
self.parent_constructed();
|
||||||
|
|
||||||
let picture_binding: &Picture = self.picture.as_ref();
|
|
||||||
let picture_file: File =
|
|
||||||
File::for_path(Path::new(&String::from(&*self.imagepath.borrow())));
|
|
||||||
picture_binding.set_file(glib::bitflags::__private::core::option::Option::Some(
|
|
||||||
&picture_file,
|
|
||||||
));
|
|
||||||
|
|
||||||
let hieroglyph_label_binding: &Label = self.hieroglyph_label.as_ref();
|
let hieroglyph_label_binding: &Label = self.hieroglyph_label.as_ref();
|
||||||
self.obj()
|
self.obj()
|
||||||
|
@ -65,6 +57,7 @@ impl ObjectImpl for CardEntry {
|
||||||
.bind_property("reading", reading_label_binding, "label")
|
.bind_property("reading", reading_label_binding, "label")
|
||||||
.sync_create()
|
.sync_create()
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dispose(&self) {
|
fn dispose(&self) {
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
mod imp;
|
mod imp;
|
||||||
|
|
||||||
use glib::Object;
|
use glib::Object;
|
||||||
use gtk::{gio, glib::{self, subclass::types::ObjectSubclassIsExt}, Picture};
|
use gtk::{
|
||||||
|
gio,
|
||||||
|
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||||
|
Button, Picture,
|
||||||
|
};
|
||||||
|
|
||||||
glib::wrapper! {
|
glib::wrapper! {
|
||||||
pub struct CardEntry(ObjectSubclass<imp::CardEntry>)
|
pub struct CardEntry(ObjectSubclass<imp::CardEntry>)
|
||||||
|
@ -22,4 +26,14 @@ impl CardEntry {
|
||||||
pub fn get_picture_widget(&self) -> &Picture {
|
pub fn get_picture_widget(&self) -> &Picture {
|
||||||
self.imp().picture.as_ref()
|
self.imp().picture.as_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_delete_button_widget(&self) -> &Button {
|
||||||
|
self.imp().delete_button.as_ref()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update_file_for_picture(&self) {
|
||||||
|
let picture_binding: &Picture = self.imp().picture.as_ref();
|
||||||
|
let path: &str = &*self.imp().imagepath.borrow().clone().to_string();
|
||||||
|
picture_binding.set_file(Some(&gio::File::for_path(path)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue