aboutsummaryrefslogtreecommitdiff
path: root/src/preferences/pages/map.rs
diff options
context:
space:
mode:
authorRubén Beltrán del Río <jj@r.bdr.sh>2026-03-27 16:10:46 +0100
committerRubén Beltrán del Río <jj@r.bdr.sh>2026-03-30 13:39:14 +0200
commitd01a4df546b553128400f6c68eefa8368b4113a8 (patch)
treed290ca78b1215fb450ec7850a74b79fd0ae9707c /src/preferences/pages/map.rs
parent4dec344a7bcbf1d7d0bbbf985109df816470ecc6 (diff)
Use actual components for preference pages
Diffstat (limited to 'src/preferences/pages/map.rs')
-rw-r--r--src/preferences/pages/map.rs212
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: &gtk::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(&gtk::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: &gtk::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(&gtk::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);
- }
-}