Skip to content

Commit 1d157d8

Browse files
authored
Merge pull request #67 from devmobasa/pr/configurator-tabs
Configurator: split UI settings into sub-tabs
2 parents bf741e0 + 45a7c69 commit 1d157d8

File tree

4 files changed

+106
-20
lines changed

4 files changed

+106
-20
lines changed

configurator/src/app.rs

Lines changed: 77 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::models::{
1717
BoardModeOption, ColorMode, ColorQuadInput, ColorTripletInput, ConfigDraft, FontStyleOption,
1818
FontWeightOption, NamedColorOption, OverrideOption, QuadField, SessionCompressionOption,
1919
SessionStorageModeOption, StatusPositionOption, TabId, TextField, ToggleField,
20-
ToolbarLayoutModeOption, ToolbarOverrideField, TripletField,
20+
ToolbarLayoutModeOption, ToolbarOverrideField, TripletField, UiTabId,
2121
};
2222

2323
pub fn run() -> iced::Result {
@@ -35,6 +35,7 @@ pub struct ConfiguratorApp {
3535
defaults: ConfigDraft,
3636
status: StatusMessage,
3737
active_tab: TabId,
38+
active_ui_tab: UiTabId,
3839
override_mode: ToolbarLayoutModeOption,
3940
is_loading: bool,
4041
is_saving: bool,
@@ -88,6 +89,7 @@ impl Application for ConfiguratorApp {
8889
defaults,
8990
status: StatusMessage::info("Loading configuration..."),
9091
active_tab: TabId::Drawing,
92+
active_ui_tab: UiTabId::Toolbar,
9193
override_mode,
9294
is_loading: true,
9395
is_saving: false,
@@ -194,6 +196,9 @@ impl Application for ConfiguratorApp {
194196
Message::TabSelected(tab) => {
195197
self.active_tab = tab;
196198
}
199+
Message::UiTabSelected(tab) => {
200+
self.active_ui_tab = tab;
201+
}
197202
Message::ToggleChanged(field, value) => {
198203
self.status = StatusMessage::idle();
199204
self.draft.set_toggle(field, value);
@@ -716,11 +721,35 @@ impl ConfiguratorApp {
716721
}
717722

718723
fn ui_tab(&self) -> Element<'_, Message> {
719-
let status_position = pick_list(
720-
StatusPositionOption::list(),
721-
Some(self.draft.ui_status_position),
722-
Message::StatusPositionChanged,
724+
let tab_bar = UiTabId::ALL.iter().fold(
725+
Row::new().spacing(8).align_items(iced::Alignment::Center),
726+
|row, tab| {
727+
let label = tab.title();
728+
let button = button(label)
729+
.padding([4, 10])
730+
.style(if *tab == self.active_ui_tab {
731+
theme::Button::Primary
732+
} else {
733+
theme::Button::Secondary
734+
})
735+
.on_press(Message::UiTabSelected(*tab));
736+
row.push(button)
737+
},
723738
);
739+
740+
let content = match self.active_ui_tab {
741+
UiTabId::Toolbar => self.ui_toolbar_tab(),
742+
UiTabId::StatusBar => self.ui_status_bar_tab(),
743+
UiTabId::HelpOverlay => self.ui_help_overlay_tab(),
744+
UiTabId::ClickHighlight => self.ui_click_highlight_tab(),
745+
};
746+
747+
column![text("UI Settings").size(20), tab_bar, content]
748+
.spacing(12)
749+
.into()
750+
}
751+
752+
fn ui_toolbar_tab(&self) -> Element<'_, Message> {
724753
let toolbar_layout = pick_list(
725754
ToolbarLayoutModeOption::list(),
726755
Some(self.draft.ui_toolbar_layout_mode),
@@ -737,19 +766,6 @@ impl ConfiguratorApp {
737766
.for_mode(self.override_mode);
738767

739768
let column = column![
740-
text("UI Settings").size(20),
741-
toggle_row(
742-
"Show status bar",
743-
self.draft.ui_show_status_bar,
744-
self.defaults.ui_show_status_bar,
745-
ToggleField::UiShowStatusBar,
746-
),
747-
toggle_row(
748-
"Show frozen badge",
749-
self.draft.ui_show_frozen_badge,
750-
self.defaults.ui_show_frozen_badge,
751-
ToggleField::UiShowFrozenBadge,
752-
),
753769
text("Toolbar").size(18),
754770
labeled_control(
755771
"Layout mode",
@@ -825,6 +841,33 @@ impl ConfiguratorApp {
825841
ToolbarOverrideField::ShowSettingsSection,
826842
overrides.show_settings_section,
827843
),
844+
]
845+
.spacing(12);
846+
847+
scrollable(column).into()
848+
}
849+
850+
fn ui_status_bar_tab(&self) -> Element<'_, Message> {
851+
let status_position = pick_list(
852+
StatusPositionOption::list(),
853+
Some(self.draft.ui_status_position),
854+
Message::StatusPositionChanged,
855+
);
856+
857+
let column = column![
858+
text("Status Bar").size(18),
859+
toggle_row(
860+
"Show status bar",
861+
self.draft.ui_show_status_bar,
862+
self.defaults.ui_show_status_bar,
863+
ToggleField::UiShowStatusBar,
864+
),
865+
toggle_row(
866+
"Show frozen badge",
867+
self.draft.ui_show_frozen_badge,
868+
self.defaults.ui_show_frozen_badge,
869+
ToggleField::UiShowFrozenBadge,
870+
),
828871
labeled_control(
829872
"Status bar position",
830873
status_position.width(Length::Fill).into(),
@@ -865,6 +908,14 @@ impl ConfiguratorApp {
865908
)
866909
]
867910
.spacing(12),
911+
]
912+
.spacing(12);
913+
914+
scrollable(column).into()
915+
}
916+
917+
fn ui_help_overlay_tab(&self) -> Element<'_, Message> {
918+
let column = column![
868919
text("Help Overlay Style").size(18),
869920
color_quad_editor(
870921
"Background RGBA (0-1)",
@@ -911,6 +962,14 @@ impl ConfiguratorApp {
911962
)
912963
]
913964
.spacing(12),
965+
]
966+
.spacing(12);
967+
968+
scrollable(column).into()
969+
}
970+
971+
fn ui_click_highlight_tab(&self) -> Element<'_, Message> {
972+
let column = column![
914973
text("Click Highlight").size(18),
915974
toggle_row(
916975
"Enable click highlight",

configurator/src/messages.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::models::{
77
BoardModeOption, ColorMode, FontStyleOption, FontWeightOption, KeybindingField,
88
NamedColorOption, OverrideOption, QuadField, SessionCompressionOption,
99
SessionStorageModeOption, StatusPositionOption, TabId, TextField, ToggleField,
10-
ToolbarLayoutModeOption, ToolbarOverrideField, TripletField,
10+
ToolbarLayoutModeOption, ToolbarOverrideField, TripletField, UiTabId,
1111
};
1212

1313
#[derive(Debug, Clone)]
@@ -18,6 +18,7 @@ pub enum Message {
1818
SaveRequested,
1919
ConfigSaved(Result<(Option<PathBuf>, Arc<Config>), String>),
2020
TabSelected(TabId),
21+
UiTabSelected(UiTabId),
2122
ToggleChanged(ToggleField, bool),
2223
TextChanged(TextField, String),
2324
TripletChanged(TripletField, usize, String),

configurator/src/models/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ pub use fields::{
1414
ToggleField, ToolbarLayoutModeOption, ToolbarOverrideField, TripletField,
1515
};
1616
pub use keybindings::KeybindingField;
17-
pub use tab::TabId;
17+
pub use tab::{TabId, UiTabId};

configurator/src/models/tab.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,29 @@ impl TabId {
3535
}
3636
}
3737
}
38+
39+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40+
pub enum UiTabId {
41+
Toolbar,
42+
StatusBar,
43+
HelpOverlay,
44+
ClickHighlight,
45+
}
46+
47+
impl UiTabId {
48+
pub const ALL: [UiTabId; 4] = [
49+
UiTabId::Toolbar,
50+
UiTabId::StatusBar,
51+
UiTabId::HelpOverlay,
52+
UiTabId::ClickHighlight,
53+
];
54+
55+
pub fn title(&self) -> &'static str {
56+
match self {
57+
UiTabId::Toolbar => "Toolbar",
58+
UiTabId::StatusBar => "Status Bar",
59+
UiTabId::HelpOverlay => "Help Overlay",
60+
UiTabId::ClickHighlight => "Click Highlight",
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)