Button restyle

This commit is contained in:
2026-08-01 17:16:58 +03:00
parent d9bd1b1b86
commit 4d6de8a02c
12 changed files with 82 additions and 63 deletions
+3 -3
View File
@@ -295,10 +295,10 @@ impl DictionaryState {
container( container(
row![ row![
iced::widget::column![ iced::widget::column![
button("Назад").on_press(Back), button("Назад").style(jl_button).on_press(Back),
self.groups_panel(), self.groups_panel(),
self.words_list(), self.words_list(),
button("Добавить слово").on_press(DictionaryMessage::NewWord), button("Добавить слово").style(jl_button).on_press(DictionaryMessage::NewWord),
] ]
.spacing(5), .spacing(5),
self.filters() self.filters()
@@ -415,7 +415,7 @@ impl DictionaryState {
toggler(self.reverse) toggler(self.reverse)
.label("Обратный тест") .label("Обратный тест")
.on_toggle(DictionaryMessage::SetReverse), .on_toggle(DictionaryMessage::SetReverse),
button(text!("Тест").center().width(Length::Fill)) button(text!("Тест").center().width(Length::Fill)).style(jl_button)
.on_press(Test) .on_press(Test)
.width(Length::Fill), .width(Length::Fill),
] ]
+2 -2
View File
@@ -105,7 +105,7 @@ impl DictionaryQuizState {
] ]
.spacing(DEFAULT_SPACING), .spacing(DEFAULT_SPACING),
row![ row![
button("Закончить").on_press(DictionaryQuizMessage::Back), button("Закончить").style(jl_button).on_press(DictionaryQuizMessage::Back),
self.appeal_button() self.appeal_button()
] ]
.spacing(DEFAULT_SPACING), .spacing(DEFAULT_SPACING),
@@ -205,7 +205,7 @@ impl DictionaryQuizState {
fn appeal_button(&self) -> Element<'_, DictionaryQuizMessage> { fn appeal_button(&self) -> Element<'_, DictionaryQuizMessage> {
if self.is_help && self.no_typing == false { if self.is_help && self.no_typing == false {
return button("Апелляция") return button("Апелляция").style(jl_button)
.on_press(DictionaryQuizMessage::Appeal) .on_press(DictionaryQuizMessage::Appeal)
.into(); .into();
} }
+1 -1
View File
@@ -56,7 +56,7 @@ impl HistoryState {
pub fn view(&self) -> Element<'_, HistoryMessage> { pub fn view(&self) -> Element<'_, HistoryMessage> {
container( container(
iced::widget::column![ iced::widget::column![
button("Назад").on_press(Back), button("Назад").style(jl_button).on_press(Back),
iced::widget::row![ iced::widget::row![
horizontal().width(FillPortion(1)), horizontal().width(FillPortion(1)),
scrollable(self.history_lines().padding(DEFAULT_SPACING)) scrollable(self.history_lines().padding(DEFAULT_SPACING))
+1 -1
View File
@@ -129,7 +129,7 @@ impl QuizState {
.size(25), .size(25),
] ]
.spacing(DEFAULT_SPACING), .spacing(DEFAULT_SPACING),
button("Закончить").on_press(QuizMessage::Back), button("Закончить").style(jl_button).on_press(QuizMessage::Back),
] ]
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING)
.align_x(alignment::Horizontal::Center), .align_x(alignment::Horizontal::Center),
+3 -2
View File
@@ -6,6 +6,7 @@ pub mod randomizer {
use iced::Task; use iced::Task;
use rand::prelude::SliceRandom; use rand::prelude::SliceRandom;
use crate::navigation::{NavigatedPage, Page}; use crate::navigation::{NavigatedPage, Page};
use crate::styling::jl_button;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct RandomizerState { pub struct RandomizerState {
@@ -58,10 +59,10 @@ pub mod randomizer {
pub fn view(&self) -> iced::Element<'_, RandomizerMessage> { pub fn view(&self) -> iced::Element<'_, RandomizerMessage> {
container( container(
iced::widget::column![ iced::widget::column![
button("Назад").on_press(Back), button("Назад").style(jl_button).on_press(Back),
text_editor(&self.text).on_action(Edit text_editor(&self.text).on_action(Edit
).width(400).height(400).placeholder("Каждый элемент с новой строки"), ).width(400).height(400).placeholder("Каждый элемент с новой строки"),
button("Перемешать").on_press(Start), button("Перемешать").style(jl_button).on_press(Start),
] ]
.spacing(5), .spacing(5),
) )
+42 -19
View File
@@ -1,19 +1,19 @@
use crate::data_provider::voice::get_voice; use crate::data_provider::voice::get_voice;
use crate::lang::{CardSet, CardStatistics, WordData, WordOpenMode}; use crate::lang::{CardSet, CardStatistics, WordData, WordOpenMode};
use crate::navigation::Page::PreviousPage;
use crate::navigation::{KeyPressedPage, NavigatedPage, Page};
use crate::repetitions::CardSetSettings; use crate::repetitions::CardSetSettings;
use crate::styling::*;
use crate::{AppState, RootMessage}; use crate::{AppState, RootMessage};
use iced::alignment::Horizontal::Center; use iced::alignment::Horizontal::Center;
use iced::keyboard::key::Physical::Code; use iced::keyboard::key::Physical::Code;
use iced::widget::{button, column, container, row, rule, space, text, Column}; use iced::widget::text::Style;
use iced::{alignment, keyboard, Element, Fill, Left, Task, Theme}; use iced::widget::{Column, button, column, container, row, rule, space, text, tooltip};
use iced::{Element, Fill, Left, Task, Theme, alignment, keyboard};
use rodio::MixerDeviceSink; use rodio::MixerDeviceSink;
use std::collections::HashSet; use std::collections::HashSet;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use iced::widget::text::Style;
use tokio::task::spawn_blocking; use tokio::task::spawn_blocking;
use crate::navigation::{KeyPressedPage, NavigatedPage, Page};
use crate::navigation::Page::PreviousPage;
use crate::styling::*;
pub struct RepetitionState { pub struct RepetitionState {
pub settings: CardSetSettings, pub settings: CardSetSettings,
@@ -39,7 +39,7 @@ impl NavigatedPage<RepetitionMessage> for RepetitionState {
impl RepetitionState { impl RepetitionState {
pub(crate) fn new(set: CardSetSettings, state: Arc<Mutex<AppState>>) -> RepetitionState { pub(crate) fn new(set: CardSetSettings, state: Arc<Mutex<AppState>>) -> RepetitionState {
let mut card_set = CardSet::new(&set, state.clone()); let mut card_set = CardSet::new(&set, state.clone());
let (word, stat) = card_set.next(); let (word, stat) = card_set.next();
let sink_handle = rodio::DeviceSinkBuilder::open_default_sink().unwrap(); let sink_handle = rodio::DeviceSinkBuilder::open_default_sink().unwrap();
RepetitionState { RepetitionState {
@@ -115,7 +115,9 @@ impl RepetitionState {
pub fn view(&self) -> Element<'_, RepetitionMessage> { pub fn view(&self) -> Element<'_, RepetitionMessage> {
container( container(
iced::widget::column![ iced::widget::column![
button("Назад").on_press(RepetitionMessage::Back), button("Назад")
.style(jl_button)
.on_press(RepetitionMessage::Back),
column![ column![
container(self.draw_forward()) container(self.draw_forward())
.width(Fill) .width(Fill)
@@ -152,7 +154,6 @@ impl RepetitionState {
fn draw_forward(&self) -> Element<'_, RepetitionMessage> { fn draw_forward(&self) -> Element<'_, RepetitionMessage> {
self.draw_card_view(self.settings.forward.as_str()) self.draw_card_view(self.settings.forward.as_str())
} }
fn draw_backward(&self) -> Element<'_, RepetitionMessage> { fn draw_backward(&self) -> Element<'_, RepetitionMessage> {
@@ -160,7 +161,6 @@ impl RepetitionState {
return space().into(); return space().into();
} }
self.draw_card_view(self.settings.backward.as_str()) self.draw_card_view(self.settings.backward.as_str())
} }
@@ -170,7 +170,7 @@ impl RepetitionState {
let mut col = Column::new(); let mut col = Column::new();
for view_type in properties.split(" ") { for view_type in properties.split(" ") {
col = col.push( match view_type { col = col.push(match view_type {
"key" => self.draw_key(word), "key" => self.draw_key(word),
"value" => self.draw_value(word), "value" => self.draw_value(word),
"speech" => self.draw_voice(), "speech" => self.draw_voice(),
@@ -185,18 +185,40 @@ impl RepetitionState {
fn answer_bar(&self) -> Element<'_, RepetitionMessage> { fn answer_bar(&self) -> Element<'_, RepetitionMessage> {
if !self.open { if !self.open {
return text!("Нажмите Пробел для открытия карточки").style(|theme: &Theme| {Style{ color: Some(theme.palette().text.scale_alpha(0.3)) }}).into(); return text!("Нажмите Пробел для открытия карточки")
.style(|theme: &Theme| Style {
color: Some(theme.palette().text.scale_alpha(0.3)),
})
.into();
} }
column![ column![
text!("{} очков", self.current_statistic.calculated_score().round() as i32), text!(
"{} очков",
self.current_statistic.calculated_score().round() as i32
),
row![ row![
tooltip(
button("Не получилось").on_press(RepetitionMessage::Answer(WordOpenMode::None)), button("Не получилось").on_press(RepetitionMessage::Answer(WordOpenMode::None)),
button("Трудно").on_press(RepetitionMessage::Answer(WordOpenMode::Hard)), "Клавиша 1",
button("Нормально").on_press(RepetitionMessage::Answer(WordOpenMode::Ok)), tooltip::Position::Top
button("Легко").on_press(RepetitionMessage::Answer(WordOpenMode::Easy)), ),
tooltip(
button("Трудно").on_press(RepetitionMessage::Answer(WordOpenMode::Hard)),
"Клавиша 2",
tooltip::Position::Top
),
tooltip(
button("Нормально").on_press(RepetitionMessage::Answer(WordOpenMode::Ok)),
"Клавиша 3",
tooltip::Position::Top
),
tooltip(
button("Легко").on_press(RepetitionMessage::Answer(WordOpenMode::Easy)),
"Клавиша 4",
tooltip::Position::Top
),
] ]
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING / 4.0)
] ]
.align_x(Center) .align_x(Center)
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING)
@@ -212,6 +234,7 @@ impl RepetitionState {
fn draw_voice(&self) -> Element<'_, RepetitionMessage> { fn draw_voice(&self) -> Element<'_, RepetitionMessage> {
button("Воспроизвести") button("Воспроизвести")
.style(jl_button)
.on_press(RepetitionMessage::Play) .on_press(RepetitionMessage::Play)
.into() .into()
} }
+11 -11
View File
@@ -1,19 +1,19 @@
use crate::data_provider::card_sets::{delete_set, update_card_set}; use crate::data_provider::card_sets::{delete_set, update_card_set};
use crate::data_provider::card_stats::load_stats_of_set; use crate::data_provider::card_stats::load_stats_of_set;
use crate::history::HistoryState;
use crate::lang::{SetOrderMode, WordData}; use crate::lang::{SetOrderMode, WordData};
use crate::navigation::Page::{History, PreviousPage, Repetition};
use crate::navigation::{NavigatedPage, Page};
use crate::repetition::RepetitionState; use crate::repetition::RepetitionState;
use crate::styling::*;
use crate::{AppState, RootMessage}; use crate::{AppState, RootMessage};
use iced::widget::button::{danger, Status}; use iced::widget::button::{danger, Status};
pub use iced::widget::button::{Catalog, Style}; pub use iced::widget::button::{Catalog, Style};
use iced::widget::container::bordered_box; use iced::widget::container::bordered_box;
use iced::widget::{button, column, container, radio, row, scrollable, space, text, text_input, Column}; use iced::widget::{button, column, container, radio, row, scrollable, space, text, text_input, Column};
use iced::{color, Background, Border, Center, Color, Element, Fill, Left, Length, Shadow, Task, Theme}; use iced::{Background, Border, Center, Color, Element, Fill, Left, Length, Shadow, Task, Theme};
use rhai::{Engine, Scope}; use rhai::{Engine, Scope};
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use crate::history::HistoryState;
use crate::navigation::{NavigatedPage, Page};
use crate::navigation::Page::{History, PreviousPage, Repetition};
use crate::styling::*;
#[derive(Clone)] #[derive(Clone)]
pub struct RepetitionsState { pub struct RepetitionsState {
@@ -122,11 +122,11 @@ impl RepetitionsState {
pub fn view(&self) -> Element<'_, RepetitionsMessage> { pub fn view(&self) -> Element<'_, RepetitionsMessage> {
container( container(
iced::widget::column![ iced::widget::column![
button("Назад").on_press(RepetitionsMessage::Back), button("Назад").style(jl_button).on_press(RepetitionsMessage::Back),
row![ row![
column![ column![
scrollable(self.sets_list()).height(Fill), scrollable(self.sets_list()).height(Fill),
button("Добавить") button("Добавить").style(jl_button)
.width(Fill) .width(Fill)
.on_press(RepetitionsMessage::CreateSet), .on_press(RepetitionsMessage::CreateSet),
] ]
@@ -150,7 +150,7 @@ impl RepetitionsState {
fn launch_button(&self) -> Element<'_, RepetitionsMessage> { fn launch_button(&self) -> Element<'_, RepetitionsMessage> {
if let Some(set) = self.selected_set && self.state.lock().unwrap().card_sets[set].id != 0 { if let Some(set) = self.selected_set && self.state.lock().unwrap().card_sets[set].id != 0 {
return button(text!("").height(Fill).center()) return button(text!("").height(Fill).center()).style(jl_button)
.height(200) .height(200)
.on_press(RepetitionsMessage::GoToRepetition) .on_press(RepetitionsMessage::GoToRepetition)
.into(); .into();
@@ -175,17 +175,17 @@ impl RepetitionsState {
.on_input(RepetitionsMessage::SetBackward), .on_input(RepetitionsMessage::SetBackward),
text!("Фильтр"), text!("Фильтр"),
text_input("", &set.filter).on_input(RepetitionsMessage::SetFilter), text_input("", &set.filter).on_input(RepetitionsMessage::SetFilter),
button("Проверить фильтр").on_press(RepetitionsMessage::TryFilter), button("Проверить фильтр").style(jl_button).on_press(RepetitionsMessage::TryFilter),
self.count_view(&set), self.count_view(&set),
radio("Обычный режим", SetOrderMode::Default, Some(set.open_mode), RepetitionsMessage::SetOpenMode), radio("Обычный режим", SetOrderMode::Default, Some(set.open_mode), RepetitionsMessage::SetOpenMode),
self.words_words_view(&set), self.words_words_view(&set),
button("История").on_press(RepetitionsMessage::GoToHistory), button("История").style(jl_button).on_press(RepetitionsMessage::GoToHistory),
] ]
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING)
) )
.height(Fill), .height(Fill),
row![ row![
button("Сохранить").on_press(RepetitionsMessage::Save), button("Сохранить").style(jl_button).on_press(RepetitionsMessage::Save),
button("Удалить") button("Удалить")
.style(danger) .style(danger)
.on_press(RepetitionsMessage::DeleteSet) .on_press(RepetitionsMessage::DeleteSet)
+2 -2
View File
@@ -84,7 +84,7 @@ impl SelectorState {
container( container(
iced::widget::column![ iced::widget::column![
row![ row![
button("あ ↔ ア").on_press(SelectorMessage::Change), button("あ ↔ ア").on_press(SelectorMessage::Change).style(jl_button),
button("Словарь").on_press(SelectorMessage::ToDictionary).style(button::text), button("Словарь").on_press(SelectorMessage::ToDictionary).style(button::text),
button("Рандомайзер").on_press(SelectorMessage::ToRandomize).style(button::text), button("Рандомайзер").on_press(SelectorMessage::ToRandomize).style(button::text),
button("Повторение").on_press(SelectorMessage::ToRepetitions).style(button::text), button("Повторение").on_press(SelectorMessage::ToRepetitions).style(button::text),
@@ -95,7 +95,7 @@ impl SelectorState {
toggler(self.is_writing) toggler(self.is_writing)
.label("Режим письма") .label("Режим письма")
.on_toggle(ChangeMode), .on_toggle(ChangeMode),
button("К тесту").on_press(SelectorMessage::Goto), button("К тесту").on_press(SelectorMessage::Goto).style(jl_button),
] ]
.spacing(DEFAULT_SPACING), .spacing(DEFAULT_SPACING),
) )
+3 -6
View File
@@ -1,17 +1,13 @@
use iced::border::Radius; use iced::border::Radius;
use iced::widget::button::{primary, Status}; use iced::widget::button::{primary, Status};
use iced::widget::button::danger;
use iced::widget::{button, Button};
use iced::Element;
use iced_core::{Background, Border, Theme};
use crate::repetitions::Style; use crate::repetitions::Style;
use iced_core::{Border, Theme};
pub const DEFAULT_SPACING: f32 = 16.0; pub const DEFAULT_SPACING: f32 = 16.0;
pub const ACCENT_FONT_SIZE: f32 = 22.0; pub const ACCENT_FONT_SIZE: f32 = 22.0;
const BUTTON_RADIUS: f32 = 8.0; const BUTTON_RADIUS: f32 = 8.0;
pub fn jl_button(theme: &Theme, status: Status) -> Style { pub fn jl_button(theme: &Theme, status: Status) -> Style {
let mut style = primary(theme, status); let mut style = primary(theme, status);
style.border = Border style.border = Border
@@ -21,4 +17,5 @@ pub fn jl_button(theme: &Theme, status: Status) -> Style {
radius: Radius::new(BUTTON_RADIUS), radius: Radius::new(BUTTON_RADIUS),
}; };
style style
} }
+10 -12
View File
@@ -1,20 +1,18 @@
use crate::data_provider::settings::{delete_settings, set_setting}; use crate::data_provider::settings::{delete_settings, set_setting};
use crate::dictionary::app_data_dir; use crate::dictionary::app_data_dir;
use crate::navigation::Page::PreviousPage;
use crate::navigation::{NavigatedPage, Page};
use crate::styling::*;
use crate::sync::SyncMessage::NextAnimation; use crate::sync::SyncMessage::NextAnimation;
use crate::{fill_state, AppState, RootMessage}; use crate::{fill_state, AppState, RootMessage};
use iced::widget::button::danger; use iced::widget::button::danger;
use iced::widget::container::rounded_box; use iced::widget::container::rounded_box;
use iced::widget::{button, column, container, progress_bar, row, scrollable, space, text}; use iced::widget::{button, column, container, progress_bar, row, space, text};
use iced::{Center, Element, Fill, Font, Left, Length, Task}; use iced::{Center, Element, Fill, Font, Left, Length, Task};
use std::io; use std::io;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::time::Duration; use std::time::Duration;
use iced::border::width;
use iced::widget::operation::scroll_to;
use zstd::{Decoder, Encoder, DEFAULT_COMPRESSION_LEVEL}; use zstd::{Decoder, Encoder, DEFAULT_COMPRESSION_LEVEL};
use crate::navigation::{NavigatedPage, Page};
use crate::navigation::Page::PreviousPage;
use crate::styling::*;
const API_URL: &str = "https://learning.micialware.ru/"; const API_URL: &str = "https://learning.micialware.ru/";
/*const API_URL: &str = "http://localhost:8089/";*/ /*const API_URL: &str = "http://localhost:8089/";*/
@@ -159,7 +157,7 @@ impl SyncState {
pub fn view(&self) -> Element<'_, SyncMessage> { pub fn view(&self) -> Element<'_, SyncMessage> {
container( container(
column![ column![
button("Назад").on_press(SyncMessage::Back), button("Назад").style(jl_button).on_press(SyncMessage::Back),
row![space().width(Fill), self.sync_column(), space().width(Fill)] row![space().width(Fill), self.sync_column(), space().width(Fill)]
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING)
.width(Fill) .width(Fill)
@@ -189,13 +187,13 @@ impl SyncState {
) )
.style(rounded_box), .style(rounded_box),
button("Скопировать в буфер обмена") button("Скопировать в буфер обмена").style(jl_button)
.on_press(SyncMessage::CopyKey) .on_press(SyncMessage::CopyKey)
.width(Fill), .width(Fill),
row![ row![
button("↑ Отправить").on_press(SyncMessage::Send), button("↑ Отправить").style(jl_button).on_press(SyncMessage::Send),
space().width(Fill), space().width(Fill),
button("↓ Скачать").on_press(SyncMessage::GetLast) button("↓ Скачать").style(jl_button).on_press(SyncMessage::GetLast)
] ]
.spacing(DEFAULT_SPACING), .spacing(DEFAULT_SPACING),
container(network_view).width(Fill), container(network_view).width(Fill),
@@ -205,8 +203,8 @@ impl SyncState {
] ]
} else { } else {
column![ column![
button("Создать сохранение").on_press(SyncMessage::InitSync), button("Создать сохранение").style(jl_button).on_press(SyncMessage::InitSync),
button("Вставить ключ из буфера").on_press(SyncMessage::GetKey), button("Вставить ключ из буфера").style(jl_button).on_press(SyncMessage::GetKey),
] ]
} }
} }
+2 -2
View File
@@ -93,7 +93,7 @@ impl WordState {
} }
let mut col = iced::widget::column![ let mut col = iced::widget::column![
button("Назад").on_press(WordMessage::Back), button("Назад").style(jl_button).on_press(WordMessage::Back),
text!("Ключ"), text!("Ключ"),
text_input("key", &self.word.key).on_input(WordMessage::SetKey), text_input("key", &self.word.key).on_input(WordMessage::SetKey),
text!("Значение"), text!("Значение"),
@@ -111,7 +111,7 @@ impl WordState {
column![ column![
col.spacing(DEFAULT_SPACING).width(Fill).height(Fill), col.spacing(DEFAULT_SPACING).width(Fill).height(Fill),
row![ row![
button("Сохранить").on_press(WordMessage::Save), button("Сохранить").style(jl_button).on_press(WordMessage::Save),
button("Удалить") button("Удалить")
.style(danger) .style(danger)
.on_press(WordMessage::Delete), .on_press(WordMessage::Delete),
+2 -2
View File
@@ -95,8 +95,8 @@ impl WritingState {
text!("{}", self.kana).size(48), text!("{}", self.kana).size(48),
self.answers(), self.answers(),
row![ row![
button(text!("{}", self.next_text)).on_press(WritingMessage::Next), button(text!("{}", self.next_text)).style(jl_button).on_press(WritingMessage::Next),
button("Закончить").on_press(WritingMessage::Back), button("Закончить").style(jl_button).on_press(WritingMessage::Back),
] ]
.spacing(DEFAULT_SPACING) .spacing(DEFAULT_SPACING)
] ]