From c529578069318170c7c1c6df9a04bab1eeb4db31 Mon Sep 17 00:00:00 2001 From: leca Date: Wed, 27 Mar 2024 11:27:15 +0300 Subject: [PATCH] structure --- Cargo.toml | 1 + src/game.rs | 4 - src/main.rs | 243 +---------------------------------------- src/ui/guessing/mod.rs | 154 ++++++++++++++++++++++++++ src/ui/menu/mod.rs | 80 ++++++++++++++ src/ui/mod.rs | 23 ++++ 6 files changed, 263 insertions(+), 242 deletions(-) create mode 100644 src/ui/guessing/mod.rs create mode 100644 src/ui/menu/mod.rs create mode 100644 src/ui/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 420e204..3d726e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,5 @@ edition = "2021" [dependencies] gtk = { version = "0.8.1", package = "gtk4", features = ["v4_12"] } + rand = "0.8.5" diff --git a/src/game.rs b/src/game.rs index 26da014..3110460 100644 --- a/src/game.rs +++ b/src/game.rs @@ -33,14 +33,10 @@ pub struct Hieroglyph { } pub trait Useful { - // fn get_syllable (&self) -> String; fn get_kana(&self) -> Kanas; } impl Useful for Hieroglyph { - // fn get_syllable (&self) -> String { - // self.syllable.to_string() - // } fn get_kana(&self) -> Kanas { for row in ROMAJI { if row.contains(&(self.syllable).as_str()) { diff --git a/src/main.rs b/src/main.rs index 309f006..c1ba412 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,11 @@ mod game; mod labled_switch; +mod ui; -use crate::game::*; -use gio::Settings; -use gtk::{gio, prelude::*, Button, Entry, Label}; -use gtk::{glib, glib::clone, Application, ApplicationWindow, Box}; -use rand::prelude::*; -use std::cell::{Cell, RefCell}; -use std::ops::Deref; +use crate::ui::build_ui; + +use gtk::prelude::*; +use gtk::{glib, Application}; const APP_ID: &str = "org.foxarmy.learn-hieroglyph"; @@ -18,234 +16,3 @@ fn main() -> glib::ExitCode { app.run() } - -fn build_menu(w: &RefCell) -> Box { - let menu: Box = Box::builder() - .orientation(gtk::Orientation::Vertical) - .halign(gtk::Align::Center) - .build(); - - let settings_container: Box = Box::builder() - .orientation(gtk::Orientation::Vertical) - .valign(gtk::Align::Start) - .halign(gtk::Align::Start) - .build(); - - let gamemode_settings_container: Box = Box::builder() - .orientation(gtk::Orientation::Vertical) - .valign(gtk::Align::Start) - .halign(gtk::Align::Start) - .build(); - - let hiragana_setting_container: Box = Box::builder() - .orientation(gtk::Orientation::Horizontal) - .valign(gtk::Align::Center) - .halign(gtk::Align::Center) - .build(); - - let katakana_setting_container: Box = Box::builder() - .orientation(gtk::Orientation::Horizontal) - .valign(gtk::Align::Center) - .halign(gtk::Align::Center) - .build(); - - let start_button: Button = Button::builder().label("Start!").build(); - - let mut settings = Cell::new(Settings::new(APP_ID)); - - start_button.connect_clicked(clone!( @strong w => move |_| { - w.borrow_mut().set_child(Some(&build_game(&w))) - })); - //////////////////kana to romaji setting//////////////////////////// - let ktr_switch = labled_switch::build("enable あ->a"); - gamemode_settings_container.append(&ktr_switch.0); - - ////////////////romaji to kana setting/////////////////////////////// - let rtk_switch = labled_switch::build("enable a->あ"); - gamemode_settings_container.append(&rtk_switch.0); - ////////////////hiragana enable setting///////////////////////////// - let hiragana_switch = labled_switch::build("enable hiragana"); - hiragana_setting_container.append(&hiragana_switch.0); - ////////////////katakana enable setting///////////////////////////// - let katakana_switch = labled_switch::build("enable katakana"); - katakana_setting_container.append(&katakana_switch.0); - - let s = settings.get_mut(); - s.bind("is-ktr-enabled", &ktr_switch.1, "active").build(); - s.bind("is-rtk-enabled", &rtk_switch.1, "active").build(); - s.bind("is-hiragana-enabled", &hiragana_switch.1, "active") - .build(); - s.bind("is-katakana-enabled", &katakana_switch.1, "active") - .build(); - - settings_container.append(&gamemode_settings_container); - settings_container.append(&hiragana_setting_container); - settings_container.append(&katakana_setting_container); - - menu.append(&settings_container); - - menu.append(&start_button); - - menu -} - -fn random_kana(hiragana: bool, katakana: bool) -> Hieroglyph { - if hiragana && katakana { - generate_random_hieroglyph(if rand::thread_rng().gen_bool(0.5) { - Kanas::Katakana - } else { - Kanas::Hiragana - }) - } else { - generate_random_hieroglyph(if hiragana { - Kanas::Hiragana - } else { - Kanas::Katakana - }) - } -} - -fn ask(ktr: bool, rtk: bool, hiragana: bool, katakana: bool) -> Hieroglyph { - if ktr && rtk { - return if rand::thread_rng().gen_bool(0.5) { - random_kana(hiragana, katakana) - } else { - generate_random_hieroglyph(Kanas::Romaji) - }; - } else if ktr { - return random_kana(hiragana, katakana); - } else { - return generate_random_hieroglyph(Kanas::Romaji); - } -} - -fn generate_question_text(question: &Hieroglyph, exact_kana: &Kanas) -> String { - return String::from(match question.get_kana() { - Kanas::Romaji => match exact_kana { - Kanas::Hiragana => { - format!("Name corresponding hiragana for {}", question.to_string()) - } - Kanas::Katakana => { - format!("Name corresponding katakana for {}", question.to_string()) - } - _ => { - panic!("HOW DID YOU GET HERE!?"); - } - }, - Kanas::Hiragana => { - format!( - "Name corresponding romaji for hiragana {}", - question.to_string() - ) - } - Kanas::Katakana => { - format!( - "Name corresponding romaji for katakana {}", - question.to_string() - ) - } - }); -} - -fn build_game(_w: &RefCell) -> Box { - let game: Box = Box::builder() - .orientation(gtk::Orientation::Vertical) - .build(); - let mut question_label: RefCell