Settings on new page
This commit is contained in:
+75
-63
@@ -5,27 +5,24 @@ use crate::lang::{SetOrderMode, WordData};
|
||||
use crate::navigation::Page::{History, PreviousPage, Repetition, RepetitionSettings};
|
||||
use crate::navigation::{NavigatedPage, Page};
|
||||
use crate::repetition::RepetitionState;
|
||||
use crate::styling::*;
|
||||
use crate::{AppState, RootMessage};
|
||||
pub use iced::widget::button::{Catalog, Style};
|
||||
use iced::widget::button::{Status, danger};
|
||||
use iced::widget::container::bordered_box;
|
||||
use iced::widget::{
|
||||
Column, button, column, container, radio, row, scrollable, space, svg, text, text_input,
|
||||
};
|
||||
use iced::{Background, Border, Center, Color, Element, Fill, Length, Shadow, Task, Theme};
|
||||
use iced_core::Padding;
|
||||
use iced_core::svg::Handle;
|
||||
use rhai::{Engine, Scope};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use crate::repetition_settings::RepetitionSettingsState;
|
||||
use crate::repetitions::RepetitionsMessage::*;
|
||||
use crate::styling::*;
|
||||
use crate::{AppState, RootMessage};
|
||||
use iced::widget::button::{danger, Status};
|
||||
pub use iced::widget::button::{Catalog, Style};
|
||||
use iced::widget::container::bordered_box;
|
||||
use iced::widget::{button, column, container, radio, row, scrollable, space, svg, text, text_input, Column};
|
||||
use iced::{Background, Border, Center, Color, Element, Fill, Length, Shadow, Task, Theme};
|
||||
use iced_core::svg::Handle;
|
||||
use iced_core::Padding;
|
||||
use rhai::{Engine, Scope};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct RepetitionsState {
|
||||
selected_set: Option<usize>,
|
||||
correct_filters: Vec<bool>,
|
||||
|
||||
pub state: Arc<Mutex<AppState>>,
|
||||
}
|
||||
|
||||
@@ -46,11 +43,12 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
card_set = self.state.lock().unwrap().card_sets[self.selected_set.unwrap()].clone();
|
||||
}
|
||||
Some(Repetition(RepetitionState::new(card_set, clone)))
|
||||
}
|
||||
else if let GoToSettings = message {
|
||||
Some(RepetitionSettings(RepetitionSettingsState {}))
|
||||
}
|
||||
else {
|
||||
} else if let GoToSettings = message {
|
||||
Some(RepetitionSettings(RepetitionSettingsState::new(
|
||||
self.selected_set.unwrap(),
|
||||
self.state.clone(),
|
||||
)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
@@ -103,11 +101,11 @@ impl RepetitionsState {
|
||||
self.correct_filters[i] = state.card_sets[i].check_filter();
|
||||
}
|
||||
|
||||
let word = &mut state.card_sets[self.selected_set.unwrap()].clone();
|
||||
let set = &mut state.card_sets[self.selected_set.unwrap()].clone();
|
||||
|
||||
update_card_set(word, &state.connection);
|
||||
update_card_set(set, &state.connection);
|
||||
|
||||
state.card_sets[self.selected_set.unwrap()] = word.clone();
|
||||
state.card_sets[self.selected_set.unwrap()] = set.clone();
|
||||
}
|
||||
SetForward(new) => {
|
||||
state.card_sets[self.selected_set.unwrap()].forward = new;
|
||||
@@ -129,7 +127,7 @@ impl RepetitionsState {
|
||||
.get_mut(self.selected_set.unwrap())
|
||||
.unwrap()
|
||||
.open_mode = mode;
|
||||
},
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
@@ -157,23 +155,30 @@ impl RepetitionsState {
|
||||
)
|
||||
}
|
||||
|
||||
fn launch_button(&self) -> Element<'_, RepetitionsMessage> {
|
||||
if let Some(set) = self.selected_set
|
||||
&& self.state.lock().unwrap().card_sets[set].id != 0
|
||||
fn launch_delete_button(&self, set: &CardSetSettings) -> Element<'_, RepetitionsMessage> {
|
||||
if set.id != 0
|
||||
{
|
||||
return button(text!("Начать повторение").width(200).center())
|
||||
.style(cta_button)
|
||||
.on_press(GoToRepetition)
|
||||
.into();
|
||||
return row![
|
||||
space().width(Fill),
|
||||
button(text!("Начать повторение").width(200).center())
|
||||
.style(cta_button)
|
||||
.on_press(GoToRepetition)
|
||||
]
|
||||
.into();
|
||||
}
|
||||
space().into()
|
||||
button("Удалить").style(danger).on_press(DeleteSet).into()
|
||||
}
|
||||
|
||||
fn selected_set_view(&self) -> Element<'_, RepetitionsMessage> {
|
||||
if let Some(index) = self.selected_set {
|
||||
let set;
|
||||
{
|
||||
set = self.state.lock().unwrap().card_sets[index].clone();
|
||||
|
||||
let state = self.state.lock().unwrap();
|
||||
if state.card_sets.len() <= index {
|
||||
return space().width(Length::FillPortion(3)).into()
|
||||
}
|
||||
set = state.card_sets[index].clone();
|
||||
}
|
||||
return column![
|
||||
scrollable(
|
||||
@@ -182,30 +187,41 @@ impl RepetitionsState {
|
||||
text!("Название набора"),
|
||||
row![
|
||||
text_input("", &set.name).on_input(SetName),
|
||||
button(svg(Handle::from_memory(SETTINGS_ICON))).width(43).on_press(GoToSettings),
|
||||
button(svg(Handle::from_memory(SETTINGS_ICON)))
|
||||
.width(43)
|
||||
.on_press(GoToSettings),
|
||||
]
|
||||
.spacing(HALF_SPACING)
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
column![
|
||||
text!("Передняя сторона"),
|
||||
text_input("", &set.forward).on_input(SetForward),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
column![
|
||||
text!("Задняя сторона"),
|
||||
text_input("", &set.backward).on_input(SetBackward),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
column![
|
||||
text!("Фильтр"),
|
||||
text_input("", &set.filter).on_input(SetFilter),
|
||||
button("Проверить фильтр")
|
||||
.style(jl_button)
|
||||
.on_press(TryFilter),
|
||||
self.count_view(&set),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
{
|
||||
if set.id == 0 {
|
||||
column![
|
||||
column![
|
||||
text!("Передняя сторона"),
|
||||
text_input("", &set.forward).on_input(SetForward),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
column![
|
||||
text!("Задняя сторона"),
|
||||
text_input("", &set.backward).on_input(SetBackward),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
column![
|
||||
text!("Фильтр"),
|
||||
text_input("", &set.filter).on_input(SetFilter),
|
||||
button("Проверить фильтр")
|
||||
.style(jl_button)
|
||||
.on_press(TryFilter),
|
||||
self.count_view(&set),
|
||||
]
|
||||
.spacing(QUARTER_SPACING),
|
||||
]
|
||||
.spacing(DEFAULT_SPACING)
|
||||
} else {
|
||||
self.filled_set_data_view(&set)
|
||||
}
|
||||
},
|
||||
radio(
|
||||
"Обычный режим",
|
||||
SetOrderMode::Default,
|
||||
@@ -213,9 +229,7 @@ impl RepetitionsState {
|
||||
SetOpenMode
|
||||
),
|
||||
self.words_words_view(&set),
|
||||
button("История")
|
||||
.style(jl_button)
|
||||
.on_press(GoToHistory),
|
||||
button("История").style(jl_button).on_press(GoToHistory),
|
||||
]
|
||||
.spacing(DEFAULT_SPACING)
|
||||
.padding(Padding {
|
||||
@@ -227,14 +241,8 @@ impl RepetitionsState {
|
||||
)
|
||||
.height(Fill),
|
||||
row![
|
||||
button("Сохранить")
|
||||
.style(jl_button)
|
||||
.on_press(Save),
|
||||
button("Удалить")
|
||||
.style(danger)
|
||||
.on_press(DeleteSet),
|
||||
space().width(Fill),
|
||||
self.launch_button()
|
||||
button("Сохранить").style(jl_button).on_press(Save),
|
||||
self.launch_delete_button(&set)
|
||||
]
|
||||
.spacing(DEFAULT_SPACING),
|
||||
]
|
||||
@@ -245,6 +253,10 @@ impl RepetitionsState {
|
||||
space().width(Length::FillPortion(3)).into()
|
||||
}
|
||||
|
||||
fn filled_set_data_view(&self, set: &CardSetSettings) -> Column<'_, RepetitionsMessage> {
|
||||
column![].spacing(DEFAULT_SPACING).into()
|
||||
}
|
||||
|
||||
fn words_words_view(&self, set: &CardSetSettings) -> Element<'_, RepetitionsMessage> {
|
||||
column![
|
||||
text!("Худшие слова"),
|
||||
|
||||
Reference in New Issue
Block a user