frontend: base_state: global methods implemented as a trait
Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
43
frontend/src/base_state.rs
Normal file
43
frontend/src/base_state.rs
Normal file
@@ -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>("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>("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<String> {
|
||||
let mut widget = ctx.get_widget(entity);
|
||||
|
||||
let entry = widget.get_mut::<String>("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>("settings")
|
||||
.save(
|
||||
PROP_POLICY_LIST,
|
||||
ctx.widget().get::<PolicyList>(PROP_POLICY_LIST),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user