From 86059ccebda2923b995b6e857604d3defb85e2d1 Mon Sep 17 00:00:00 2001 From: Ralf Zerres Date: Fri, 19 Jun 2020 17:51:21 +0200 Subject: [PATCH] frontend: base_state: global methods implemented as a trait Signed-off-by: Ralf Zerres --- frontend/src/base_state.rs | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 frontend/src/base_state.rs diff --git a/frontend/src/base_state.rs b/frontend/src/base_state.rs new file mode 100644 index 0000000..c5d2cee --- /dev/null +++ b/frontend/src/base_state.rs @@ -0,0 +1,43 @@ +use orbtk::prelude::*; + +use crate::{data::PolicyList, keys::*}; + +/// Provides generic methods to handle states of datatypes (e.g. used in `PolicyList`). +pub trait BaseState { + /// Navigates to the given entity. + fn navigate(&self, to: Entity, ctx: &mut Context) { + if let Some(old_focused_element) = ctx.window().get::("global").focused_widget { + let mut old_focused_element = ctx.get_widget(old_focused_element); + old_focused_element.set("focused", false); + old_focused_element.update_theme_by_state(false); + } + ctx.window().get_mut::("global").focused_widget = None; + ctx.widget().set("visibility", Visibility::Collapsed); + ctx.get_widget(to).set("visibility", Visibility::Visible); + } + + /// Fetches the text of a widget. + fn fetch_text(&self, ctx: &mut Context, entity: Entity) -> Option { + let mut widget = ctx.get_widget(entity); + + let entry = widget.get_mut::("text"); + if entry.is_empty() { + return None; + } + + let copy = entry.to_string(); + entry.clear(); + Some(copy) + } + + // Save the data. + fn save(&self, registry: &mut Registry, ctx: &mut Context) { + registry + .get::("settings") + .save( + PROP_POLICY_LIST, + ctx.widget().get::(PROP_POLICY_LIST), + ) + .unwrap(); + } +}