Writing test page

This commit is contained in:
2026-02-10 17:04:48 +03:00
parent fe75d7de23
commit 87a9fae91a
4 changed files with 143 additions and 12 deletions
+19 -5
View File
@@ -1,17 +1,21 @@
use crate::lang::{KanaSet, KanaType};
use crate::Page::Quiz;
use crate::selector::SelectorMessage::ChangeMode;
use crate::writing::WritingState;
use crate::Page::{Quiz, Writing};
use crate::{NavigatedPage, Page, QuizState};
use iced::widget::{button, checkbox, container, text, Column, Row};
use iced::widget::*;
use iced::{alignment, Element, Font};
pub struct SelectorState {
pub set: KanaSet,
is_writing: bool,
}
impl Default for SelectorState {
fn default() -> Self {
Self {
set: KanaSet::hiragana(),
is_writing: false,
}
}
}
@@ -21,14 +25,20 @@ pub enum SelectorMessage {
Change,
Goto,
Check(usize, bool),
ChangeMode(bool),
}
impl NavigatedPage<SelectorMessage> for SelectorState {
fn navigate(&self, message: &SelectorMessage) -> Option<Page> {
if let SelectorMessage::Goto = message {
let mut quiz = QuizState::new();
quiz.set = self.set.clone();
return Some(Quiz(quiz));
return if self.is_writing {
let writing = WritingState::new(&self.set);
Some(Writing(writing))
} else {
let mut quiz = QuizState::new();
quiz.set = self.set.clone();
Some(Quiz(quiz))
};
}
None
}
@@ -43,6 +53,7 @@ impl SelectorState {
},
SelectorMessage::Goto => {}
SelectorMessage::Check(i, b) => self.set.include_map[i] = b,
ChangeMode(b) => self.is_writing = b,
}
}
@@ -51,6 +62,9 @@ impl SelectorState {
iced::widget::column![
button("Переключить").on_press(SelectorMessage::Change),
self.rows_selector(),
toggler(self.is_writing)
.label("Режим письма")
.on_toggle(ChangeMode),
button("К тесту").on_press(SelectorMessage::Goto),
]
.spacing(10),