Navigated back handing ready
This commit is contained in:
+68
-24
@@ -1,3 +1,4 @@
|
||||
use crate::state_navigate_handle;
|
||||
use crate::data_provider::history::{get_history_of_set, history_dir};
|
||||
use crate::data_provider::sqlite::create_db;
|
||||
use crate::dictionary::{DictionaryMessage, DictionaryState};
|
||||
@@ -5,19 +6,19 @@ use crate::dictionary_test::{DictionaryQuizMessage, DictionaryQuizState};
|
||||
use crate::history::{HistoryMessage, HistoryState};
|
||||
use crate::message_navigation;
|
||||
use crate::navigation::Page::*;
|
||||
use crate::navigation::RootMessage::{DataLoaded, Keyboard };
|
||||
use crate::navigation::RootMessage::{DataLoaded, Keyboard};
|
||||
use crate::quiz::{QuizMessage, QuizState};
|
||||
use crate::randomizer::{RandomizerMessage, RandomizerState};
|
||||
use crate::repetition::{RepetitionMessage, RepetitionState};
|
||||
use crate::repetition_settings::{RepetitionSettingsMessage, RepetitionSettingsState};
|
||||
use crate::repetitions::{RepetitionsMessage, RepetitionsState};
|
||||
use crate::selector::{SelectorMessage, SelectorState};
|
||||
use crate::repetition_settings::{RepetitionSettingsMessage, RepetitionSettingsState};
|
||||
use crate::state_update;
|
||||
use crate::sync::{SyncMessage, SyncState};
|
||||
use crate::view_navigation;
|
||||
use crate::word::{WordMessage, WordState};
|
||||
use crate::writing::{WritingMessage, WritingState};
|
||||
use crate::{AppState, fill_state};
|
||||
use crate::{fill_state, AppState};
|
||||
use chrono::NaiveDate;
|
||||
use iced::keyboard::Event;
|
||||
use iced::{Element, Task};
|
||||
@@ -119,25 +120,48 @@ impl ScreenState {
|
||||
return Task::none();
|
||||
}
|
||||
|
||||
state_update!(
|
||||
message,
|
||||
self.stack,
|
||||
Selector,
|
||||
Quiz,
|
||||
Writing,
|
||||
Dictionary,
|
||||
DictionaryQuiz,
|
||||
Randomizer,
|
||||
Repetitions,
|
||||
Repetition,
|
||||
Word,
|
||||
Sync,
|
||||
History,
|
||||
RepetitionSettings
|
||||
);
|
||||
let task: (Task<RootMessage>, bool) = self.navigate_or_update(message);
|
||||
|
||||
Task::none()
|
||||
if task.1 {
|
||||
state_navigate_handle!(
|
||||
self.stack,
|
||||
Selector,
|
||||
Quiz,
|
||||
Writing,
|
||||
Dictionary,
|
||||
DictionaryQuiz,
|
||||
Randomizer,
|
||||
Repetitions,
|
||||
Repetition,
|
||||
Word,
|
||||
Sync,
|
||||
History,
|
||||
RepetitionSettings
|
||||
);
|
||||
}
|
||||
|
||||
task.0
|
||||
}
|
||||
|
||||
fn navigate_or_update(&mut self, message: RootMessage) -> (Task<RootMessage>, bool) {
|
||||
state_update!(
|
||||
message,
|
||||
self.stack,
|
||||
Selector,
|
||||
Quiz,
|
||||
Writing,
|
||||
Dictionary,
|
||||
DictionaryQuiz,
|
||||
Randomizer,
|
||||
Repetitions,
|
||||
Repetition,
|
||||
Word,
|
||||
Sync,
|
||||
History,
|
||||
RepetitionSettings
|
||||
)
|
||||
}
|
||||
|
||||
pub fn view(&self) -> Element<'_, RootMessage> {
|
||||
view_navigation!(
|
||||
self.stack,
|
||||
@@ -190,9 +214,12 @@ macro_rules! state_update {
|
||||
if let $e(s) = $stack.last_mut().unwrap() {
|
||||
message_navigation!(msg, $stack, s)
|
||||
}
|
||||
else {
|
||||
return (Task::<RootMessage>::none(), false);
|
||||
}
|
||||
}
|
||||
)*
|
||||
_ => {}
|
||||
_ => return (Task::<RootMessage>::none(), false),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -203,15 +230,32 @@ macro_rules! message_navigation {
|
||||
if let Some(new_page) = $state.navigate(&$msg) {
|
||||
if let Page::PreviousPage = new_page {
|
||||
$stack.pop();
|
||||
return Task::none();
|
||||
return (Task::<RootMessage>::none(), true);
|
||||
} else {
|
||||
$stack.push(new_page);
|
||||
}
|
||||
$stack.push(new_page);
|
||||
|
||||
return (Task::<RootMessage>::none(), false);
|
||||
} else {
|
||||
return $state.update($msg);
|
||||
return ($state.update($msg), false);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! state_navigate_handle {
|
||||
($stack:expr, $($e:ident), *) => {
|
||||
match $stack.last_mut().unwrap() {
|
||||
$(
|
||||
Page::$e(page) => {
|
||||
page.navigated();
|
||||
}
|
||||
)*
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait NavigatedPage<T> {
|
||||
fn navigate(&self, message: &T) -> Option<Page>;
|
||||
fn navigated(&mut self);
|
||||
|
||||
Reference in New Issue
Block a user