cargo fmt
This commit is contained in:
parent
8086928d43
commit
c334c587b5
|
@ -4,13 +4,23 @@ pub struct Card {
|
|||
hieroglyph: Option<String>,
|
||||
reading: Option<String>,
|
||||
translation: Option<String>,
|
||||
is_learning: Option<bool>
|
||||
is_learning: Option<bool>,
|
||||
}
|
||||
|
||||
impl Card {
|
||||
pub fn new(image_path: Option<String>, hieroglyph: Option<String>, reading: Option<String>, translation: Option<String>, is_learning: Option<bool>) -> Card {
|
||||
pub fn new(
|
||||
image_path: Option<String>,
|
||||
hieroglyph: Option<String>,
|
||||
reading: Option<String>,
|
||||
translation: Option<String>,
|
||||
is_learning: Option<bool>,
|
||||
) -> Card {
|
||||
Card {
|
||||
image_path, hieroglyph, reading, translation, is_learning
|
||||
image_path,
|
||||
hieroglyph,
|
||||
reading,
|
||||
translation,
|
||||
is_learning,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,5 +43,4 @@ impl Card {
|
|||
pub fn is_learning(&self) -> Option<bool> {
|
||||
self.is_learning.clone()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,4 +27,4 @@ impl ObjectSubclass for CardGObject {
|
|||
}
|
||||
|
||||
#[glib::derived_properties]
|
||||
impl ObjectImpl for CardGObject {}
|
||||
impl ObjectImpl for CardGObject {}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
mod imp;
|
||||
use crate::card::Card;
|
||||
use glib::Object;
|
||||
use gtk::glib;
|
||||
use crate::card::Card;
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct CardGObject(ObjectSubclass<imp::CardGObject>);
|
||||
|
@ -10,17 +10,14 @@ glib::wrapper! {
|
|||
impl CardGObject {
|
||||
pub fn new(c: Option<Card>) -> Self {
|
||||
match c {
|
||||
Some(c) => {
|
||||
Object::builder()
|
||||
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()
|
||||
.build(),
|
||||
None => Object::builder().build(),
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
21
src/db.rs
21
src/db.rs
|
@ -20,11 +20,14 @@ pub fn init() {
|
|||
};
|
||||
|
||||
match fs::create_dir_all(&program_home_path) {
|
||||
Ok(_) => {},
|
||||
Ok(_) => {}
|
||||
Err(error) => match error.kind() {
|
||||
ErrorKind::AlreadyExists => {},
|
||||
_ => panic!("Could not create app home folder: {}", &program_home_path.to_str().unwrap())
|
||||
}
|
||||
ErrorKind::AlreadyExists => {}
|
||||
_ => panic!(
|
||||
"Could not create app home folder: {}",
|
||||
&program_home_path.to_str().unwrap()
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
let mut binding = PROGRAM_HOME_PATH.write().unwrap();
|
||||
|
@ -40,17 +43,21 @@ pub fn init() {
|
|||
|
||||
let connection = Connection::open(db_path).unwrap();
|
||||
|
||||
connection.execute("CREATE TABLE IF NOT EXISTS cards (
|
||||
connection
|
||||
.execute(
|
||||
"CREATE TABLE IF NOT EXISTS cards (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
imagename CHAR(64),
|
||||
hieroglyph VARCHAR(64),
|
||||
reading VARCHAR(64),
|
||||
translation VARCHAR(128),
|
||||
is_learning BOOLEAN DEFAULT FALSE
|
||||
)",()).unwrap();
|
||||
)",
|
||||
(),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
|
||||
pub fn get_program_home_path() -> String {
|
||||
(*PROGRAM_HOME_PATH.read().unwrap()).clone()
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use rusqlite::Connection;
|
||||
use core::panic;
|
||||
use rusqlite::Connection;
|
||||
use std::fs::{self, File};
|
||||
use std::io::{ErrorKind, Write};
|
||||
|
||||
|
@ -48,7 +48,7 @@ async fn download_dictionary(path: String) {
|
|||
|
||||
let mut file = match File::create(&path) {
|
||||
Err(e) => panic!("Could not create dictionary file. {}", e),
|
||||
Ok(file) => file
|
||||
Ok(file) => file,
|
||||
};
|
||||
let content = response.unwrap().bytes().await.unwrap();
|
||||
file.write_all(&content).unwrap();
|
||||
|
@ -72,7 +72,7 @@ fn read_and_parse(path: &String) -> Vec<DictionaryEntry> {
|
|||
_ => {
|
||||
println!("Unexpected error. Can't load dictionary. Assuming it's empty");
|
||||
return Vec::new();
|
||||
},
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
|
10
src/main.rs
10
src/main.rs
|
@ -1,12 +1,12 @@
|
|||
#![windows_subsystem = "windows"]
|
||||
|
||||
mod card;
|
||||
mod card_gobject;
|
||||
mod db;
|
||||
mod dictionary;
|
||||
mod game;
|
||||
mod ui;
|
||||
mod widgets;
|
||||
mod dictionary;
|
||||
mod card;
|
||||
mod card_gobject;
|
||||
|
||||
use crate::ui::menu::MenuScene;
|
||||
|
||||
|
@ -41,8 +41,6 @@ fn main() -> glib::ExitCode {
|
|||
|
||||
dictionary::import(&(get_program_home_path() + "/dictionary.txt")); // Read file, parse it, deduplicate and append to the database.
|
||||
|
||||
|
||||
|
||||
let app: Application = Application::builder().application_id(APP_ID).build();
|
||||
|
||||
app.connect_activate(build_ui);
|
||||
|
@ -194,4 +192,4 @@ fn connect_close_requrest<W: IsA<Window>>(app: &Application, w: &W) {
|
|||
true
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,8 @@ impl MemoryCardsGameScene {
|
|||
"Correct|Incorrect: {}|{} ({:.2}%)",
|
||||
self.imp().correct.borrow(),
|
||||
self.imp().incorrect.borrow(),
|
||||
100.0 * f64::from(*self.imp().correct.borrow() as i32) / f64::from((*self.imp().incorrect.borrow() + *self.imp().correct.borrow()) as i32)
|
||||
100.0 * f64::from(*self.imp().correct.borrow() as i32)
|
||||
/ f64::from((*self.imp().incorrect.borrow() + *self.imp().correct.borrow()) as i32)
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pub mod edit;
|
||||
pub mod game;
|
||||
pub mod new;
|
||||
pub mod setup;
|
||||
pub mod new;
|
|
@ -40,7 +40,6 @@ impl ObjectImpl for MemoryCardsNewScene {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
impl WidgetImpl for MemoryCardsNewScene {}
|
||||
|
||||
impl WindowImpl for MemoryCardsNewScene {}
|
||||
|
|
|
@ -2,7 +2,10 @@ mod imp;
|
|||
|
||||
use glib::Object;
|
||||
use gtk::{
|
||||
gio, glib::{self, subclass::types::ObjectSubclassIsExt}, prelude::*, Application, Button, Entry, Picture
|
||||
gio,
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
prelude::*,
|
||||
Application, Button, Entry, Picture,
|
||||
};
|
||||
|
||||
glib::wrapper! {
|
||||
|
|
|
@ -30,7 +30,7 @@ impl ObjectSubclass for MemoryCardsSetupScene {
|
|||
|
||||
impl ObjectImpl for MemoryCardsSetupScene {
|
||||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
self.parent_constructed();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
mod imp;
|
||||
|
||||
use glib::Object;
|
||||
use gtk::{gio, glib::{self, subclass::types::ObjectSubclassIsExt}, Application, Button};
|
||||
use gtk::{
|
||||
gio,
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
Application, Button,
|
||||
};
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct MemoryCardsSetupScene(ObjectSubclass<imp::MemoryCardsSetupScene>)
|
||||
|
@ -14,7 +18,7 @@ impl MemoryCardsSetupScene {
|
|||
pub fn new(app: &Application) -> Self {
|
||||
Object::builder().property("application", app).build()
|
||||
}
|
||||
|
||||
|
||||
pub fn get_edit_button(&self) -> &Button {
|
||||
self.imp().edit_button.as_ref()
|
||||
}
|
||||
|
|
|
@ -60,12 +60,11 @@ impl ObjectImpl for GuessingScene {
|
|||
let answer_entry_binding = &self.answer_entry.get();
|
||||
let stats_label_binding = &self.stats_label.get();
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
"Memory management when writing a gtk-rs app can be a bit tricky."
|
||||
(c) https://gtk-rs.org/gtk4-rs/stable/latest/book/g_object_memory_management.html
|
||||
|
||||
|
||||
*/
|
||||
|
||||
let iteration = closure_local!(@strong self_binding,
|
||||
|
|
|
@ -2,11 +2,15 @@ mod imp;
|
|||
|
||||
use std::ops::Deref;
|
||||
|
||||
use glib::Object;
|
||||
use gtk::{gio::{self, prelude::*}, glib::{self, subclass::types::ObjectSubclassIsExt}, Application, Button};
|
||||
use gtk::gio::Settings;
|
||||
use rand::Rng;
|
||||
use crate::{game::*, APP_ID};
|
||||
use glib::Object;
|
||||
use gtk::gio::Settings;
|
||||
use gtk::{
|
||||
gio::{self, prelude::*},
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
Application, Button,
|
||||
};
|
||||
use rand::Rng;
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct GuessingScene(ObjectSubclass<imp::GuessingScene>)
|
||||
|
@ -66,9 +70,11 @@ impl GuessingScene {
|
|||
&self.imp().question.borrow(),
|
||||
);
|
||||
|
||||
let binding = generate_question_text(&self.imp().question.borrow(), self.imp().exact_kana.borrow().deref());
|
||||
let binding = generate_question_text(
|
||||
&self.imp().question.borrow(),
|
||||
self.imp().exact_kana.borrow().deref(),
|
||||
);
|
||||
let text: &str = &(binding.as_str());
|
||||
self.imp().question_label.set_label(text);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
mod imp;
|
||||
|
||||
use glib::Object;
|
||||
use gtk::{gio, glib::{self, subclass::types::ObjectSubclassIsExt}, Application, Button};
|
||||
use gtk::{
|
||||
gio,
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
Application, Button,
|
||||
};
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct GuessingSetupScene(ObjectSubclass<imp::GuessingSetupScene>)
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
mod imp;
|
||||
|
||||
use glib::Object;
|
||||
use gtk::{gio, glib::{self, subclass::types::ObjectSubclassIsExt}, Application, Button};
|
||||
use gtk::{
|
||||
gio,
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
Application, Button,
|
||||
};
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct MenuScene(ObjectSubclass<imp::MenuScene>)
|
||||
|
@ -22,5 +26,4 @@ impl MenuScene {
|
|||
pub fn get_memory_cards_button(&self) -> &Button {
|
||||
self.imp().memory_cards.as_ref()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ use std::cell::RefCell;
|
|||
use glib::subclass::InitializingObject;
|
||||
use glib::Properties;
|
||||
use gtk::subclass::prelude::*;
|
||||
use gtk::{glib, prelude::*, BoxLayout, CompositeTemplate, Entry, Label, Image};
|
||||
use gtk::{glib, prelude::*, BoxLayout, CompositeTemplate, Entry, Image, Label};
|
||||
|
||||
#[derive(CompositeTemplate, Properties, Default)]
|
||||
#[properties(wrapper_type = super::CardDisplay)]
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
mod imp;
|
||||
|
||||
|
||||
use glib::Object;
|
||||
use gtk::{gio, glib::{self, subclass::types::ObjectSubclassIsExt}, prelude::*, Entry, Image};
|
||||
|
||||
use gtk::{
|
||||
gio,
|
||||
glib::{self, subclass::types::ObjectSubclassIsExt},
|
||||
prelude::*,
|
||||
Entry, Image,
|
||||
};
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct CardDisplay(ObjectSubclass<imp::CardDisplay>)
|
||||
|
@ -13,7 +16,12 @@ glib::wrapper! {
|
|||
}
|
||||
|
||||
impl CardDisplay {
|
||||
pub fn new(image_path: &String, hieroglyph: &String, reading: Option<&String>, translation: &String) -> Self {
|
||||
pub fn new(
|
||||
image_path: &String,
|
||||
hieroglyph: &String,
|
||||
reading: Option<&String>,
|
||||
translation: &String,
|
||||
) -> Self {
|
||||
Object::builder()
|
||||
.property("imagepath", image_path)
|
||||
.property("translation", translation)
|
||||
|
|
|
@ -5,7 +5,6 @@ use glib::Properties;
|
|||
use gtk::subclass::prelude::*;
|
||||
use gtk::{glib, prelude::*, Button, CompositeTemplate, Image, Label, Switch};
|
||||
|
||||
|
||||
#[derive(CompositeTemplate, Properties, Default)]
|
||||
#[properties(wrapper_type = super::CardEntry)]
|
||||
#[template(resource = "/org/foxarmy/learn-hieroglyph/widgets/card_entry/template.ui.xml")]
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
pub mod labled_switch;
|
||||
pub mod card_display;
|
||||
pub mod card_entry;
|
||||
pub mod card_display;
|
||||
pub mod labled_switch;
|
||||
|
|
Loading…
Reference in New Issue