diff options
| author | Rubén Beltrán del Río <jj@r.bdr.sh> | 2026-03-27 16:10:46 +0100 |
|---|---|---|
| committer | Rubén Beltrán del Río <jj@r.bdr.sh> | 2026-03-30 13:39:14 +0200 |
| commit | d01a4df546b553128400f6c68eefa8368b4113a8 (patch) | |
| tree | d290ca78b1215fb450ec7850a74b79fd0ae9707c /src/preferences/pages/map.rs | |
| parent | 4dec344a7bcbf1d7d0bbbf985109df816470ecc6 (diff) | |
Use actual components for preference pages
Diffstat (limited to 'src/preferences/pages/map.rs')
| -rw-r--r-- | src/preferences/pages/map.rs | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/src/preferences/pages/map.rs b/src/preferences/pages/map.rs deleted file mode 100644 index 5645a59..0000000 --- a/src/preferences/pages/map.rs +++ /dev/null @@ -1,212 +0,0 @@ -// Map, wardley map editor for linux -// Copyright (C) 2026 Rubén Beltrán del Río - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -use relm4::Sender; -use relm4::gtk; -use sourceview5::prelude::*; - -use crate::tr; -use crate::ui_helpers::create_switch_row; - -use super::super::models::UserPreferences; -use super::super::window::PreferencesInput; - -pub struct MapPage { - container: gtk::Box, - show_background_switch: gtk::Switch, - smart_positioning_switch: gtk::Switch, - custom_font_switch: gtk::Switch, - font_button: gtk::FontDialogButton, - export_format_dropdown: gtk::DropDown, -} - -impl MapPage { - pub fn new(preferences: &UserPreferences, sender: &Sender<PreferencesInput>) -> Self { - let container = gtk::Box::new(gtk::Orientation::Vertical, 20); - container.set_margin_top(20); - container.set_margin_bottom(20); - container.set_margin_start(20); - container.set_margin_end(20); - container.set_valign(gtk::Align::Start); - - let (show_background_switch, smart_positioning_switch, custom_font_switch, font_button) = - Self::init_style_section(&container, preferences, sender); - - let export_format_dropdown = Self::init_export_section(&container, preferences, sender); - - Self { - container, - show_background_switch, - smart_positioning_switch, - custom_font_switch, - font_button, - export_format_dropdown, - } - } - - fn init_style_section( - container: >k::Box, - preferences: &UserPreferences, - sender: &Sender<PreferencesInput>, - ) -> (gtk::Switch, gtk::Switch, gtk::Switch, gtk::FontDialogButton) { - let style_label = gtk::Label::new(Some(&tr!("preferences.map.map_style.title"))); - style_label.add_css_class("heading"); - style_label.set_halign(gtk::Align::Start); - container.append(&style_label); - - // Show Background - let background_row = create_switch_row( - &tr!("preferences.map.map_style.show_background"), - preferences.show_map_background, - ); - let show_background_switch = background_row.1.clone(); - { - let sender = sender.clone(); - show_background_switch.connect_state_set(move |_, state| { - sender.emit(PreferencesInput::SetShowMapBackground(state)); - gtk::glib::Propagation::Proceed - }); - } - container.append(&background_row.0); - - // Smart Label Positioning - let smart_row = create_switch_row( - &tr!("preferences.map.map_style.use_smart_label_positioning"), - preferences.use_smart_label_positioning, - ); - let smart_positioning_switch = smart_row.1.clone(); - { - let sender = sender.clone(); - smart_positioning_switch.connect_state_set(move |_, state| { - sender.emit(PreferencesInput::SetUseSmartLabelPositioning(state)); - gtk::glib::Propagation::Proceed - }); - } - container.append(&smart_row.0); - - // Use Custom Font - let custom_font_row = create_switch_row( - &tr!("preferences.map.map_style.use_custom_font"), - preferences.use_custom_font, - ); - let custom_font_switch = custom_font_row.1.clone(); - container.append(&custom_font_row.0); - - // Font selection - let font_row = gtk::Box::new(gtk::Orientation::Horizontal, 10); - font_row.append(>k::Label::new(Some(&tr!("preferences.map.font")))); - - let font_dialog = gtk::FontDialog::new(); - let font_button = gtk::FontDialogButton::new(Some(font_dialog)); - let font_desc = gtk::pango::FontDescription::from_string(&preferences.custom_font_name); - font_button.set_font_desc(&font_desc); - font_button.set_sensitive(preferences.use_custom_font); - font_button.set_hexpand(true); - font_button.set_use_font(true); - { - let sender = sender.clone(); - font_button.connect_font_desc_notify(move |button| { - if let Some(font) = button.font_desc() - && let Some(family) = font.family() - { - sender.emit(PreferencesInput::SetCustomFontName(family.to_string())); - } - }); - } - font_row.append(&font_button); - container.append(&font_row); - - // Connect custom font switch to font button sensitivity - { - let font_button_clone = font_button.clone(); - let sender = sender.clone(); - custom_font_switch.connect_state_set(move |_, state| { - font_button_clone.set_sensitive(state); - sender.emit(PreferencesInput::SetUseCustomFont(state)); - gtk::glib::Propagation::Proceed - }); - } - - ( - show_background_switch, - smart_positioning_switch, - custom_font_switch, - font_button, - ) - } - - fn init_export_section( - container: >k::Box, - preferences: &UserPreferences, - sender: &Sender<PreferencesInput>, - ) -> gtk::DropDown { - let export_label = gtk::Label::new(Some(&tr!("preferences.map.export.title"))); - export_label.add_css_class("heading"); - export_label.set_halign(gtk::Align::Start); - export_label.set_margin_top(10); - container.append(&export_label); - - let export_row = gtk::Box::new(gtk::Orientation::Horizontal, 10); - export_row.append(>k::Label::new(Some(&tr!( - "preferences.map.export.default_format" - )))); - - let formats = - gtk::StringList::new(&[&tr!("export_formats.png"), &tr!("export_formats.svg")]); - let export_format_dropdown = gtk::DropDown::new(Some(formats), None::<gtk::Expression>); - let selected = match preferences.default_export_format.as_str() { - "svg" => 1, - _ => 0, - }; - export_format_dropdown.set_selected(selected); - { - let sender = sender.clone(); - export_format_dropdown.connect_selected_notify(move |dropdown| { - let format = match dropdown.selected() { - 1 => "svg", - _ => "png", - }; - sender.emit(PreferencesInput::SetDefaultExportFormat(format.to_string())); - }); - } - export_row.append(&export_format_dropdown); - container.append(&export_row); - - export_format_dropdown - } - - pub fn widget(&self) -> gtk::Box { - self.container.clone() - } - - pub fn sync_from(&self, preferences: &UserPreferences) { - self.show_background_switch - .set_active(preferences.show_map_background); - self.smart_positioning_switch - .set_active(preferences.use_smart_label_positioning); - self.custom_font_switch - .set_active(preferences.use_custom_font); - self.font_button.set_sensitive(preferences.use_custom_font); - let font_desc = gtk::pango::FontDescription::from_string(&preferences.custom_font_name); - self.font_button.set_font_desc(&font_desc); - - let selected = match preferences.default_export_format.as_str() { - "svg" => 1, - _ => 0, - }; - self.export_format_dropdown.set_selected(selected); - } -} |