// 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::*; pub struct Switch { state: bool, label: String, } pub struct SwitchInit { pub state: bool, pub label: String, } #[derive(Debug, Clone)] pub enum SwitchOutput { SetState(bool), } #[relm4::component(pub)] impl SimpleComponent for Switch { type Init = SwitchInit; type Input = (); type Output = SwitchOutput; view! { gtk::Box { set_orientation: gtk::Orientation::Horizontal, set_spacing: 10, gtk::Label { #[watch] set_label: &model.label }, gtk::Box { set_orientation: gtk::Orientation::Horizontal, set_hexpand: true, }, gtk::Switch { set_active: model.state, connect_state_set => move |_, state| { sender.output(SwitchOutput::SetState(state)).ok(); gtk::glib::Propagation::Proceed } } } } fn init( init: Self::Init, root: Self::Root, sender: ComponentSender, ) -> ComponentParts { let model = Self { label: init.label, state: init.state, }; let widgets = view_output!(); ComponentParts { model, widgets } } }