// 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 . use gtk::prelude::*; use relm4::prelude::*; use crate::tr; use crate::actions::PreferencesAction; pub struct General; #[relm4::component(pub)] impl SimpleComponent for General { type Init = (); type Input = (); type Output = PreferencesAction; view! { gtk::Box { set_orientation: gtk::Orientation::Vertical, set_margin_all: 20, set_spacing: 20, set_valign: gtk::Align::Start, gtk::Label { set_label: &tr!("preferences.general.preferences.title"), add_css_class: "heading", set_halign: gtk::Align::Start, }, gtk::Box { set_orientation: gtk::Orientation::Horizontal, set_spacing: 10, gtk::Button::with_label(&tr!("preferences.general.preferences.export")) { connect_clicked => { sender.output(PreferencesAction::Export).ok(); } }, gtk::Button::with_label(&tr!("preferences.general.preferences.import")) { connect_clicked => { sender.output(PreferencesAction::Import).ok(); } }, gtk::Button::with_label(&tr!("preferences.general.preferences.reset")) { add_css_class: "destructive-action", connect_clicked => { sender.output(PreferencesAction::ResetToDefaults).ok(); } }, }, gtk::Label { set_label: &tr!("preferences.general.explanation"), add_css_class: "dim-label", set_halign: gtk::Align::Start, set_wrap: true }, } } fn init( _init: Self::Init, root: Self::Root, sender: ComponentSender, ) -> ComponentParts { let model = Self {}; let widgets = view_output!(); ComponentParts { model, widgets } } }