widgets/localization: break out as localization functionality

* handle widget `localization` in dedicated subdir
* adopt constants to handle widget id's

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2020-11-05 17:38:11 +01:00
parent b352f2a581
commit 48545d2879
6 changed files with 207 additions and 129 deletions

View File

@@ -6,67 +6,73 @@
*/ */
// Styles (RON based theme system) // Styles (RON based theme system)
pub static STYLE_BOTTOM_BAR: &'static str = "bottom_bar"; pub static STYLE_BOTTOM_BAR: &str = "bottom_bar";
pub static STYLE_HEADER_BAR: &'static str = "header_bar"; pub static STYLE_HEADER_BAR: &str = "header_bar";
pub static STYLE_SEPERATOR: &'static str = "seperator"; pub static STYLE_SEPERATOR: &str = "seperator";
//pub static STYLE_ITEM_BUTTON: &'static str = "item_button"; //pub static STYLE_ITEM_BUTTON: &str = "item_button";
pub static STYLE_MENU: &'static str = "menu"; pub static STYLE_MENU: &str = "menu";
pub static STYLE_BUTTON_MENU: &'static str = "button_menu"; pub static STYLE_BUTTON_MENU: &str = "button_menu";
pub static STYLE_STACK_MENU: &'static str = "stack_menu"; pub static STYLE_STACK_MENU: &str = "stack_menu";
// Widget IDs (DCES: Entity[id] => [Component1, .. , Component<n>] -> data or state) // Widget IDs (DCES: Entity[id] => [Component1, .. , Component<n>] -> data or state)
pub static ID_POLICY_CHECK_FORM: &'static str = "policy_check_form";
pub static ID_POLICY_CHECK_FORM_ROW_0: &'static str = "policy_check_form_row_0";
pub static ID_POLICY_CHECK_FORM_ROW_1: &'static str = "policy_check_form_row_1";
pub static ID_POLICY_CHECK_FORM_ROW_2: &'static str = "policy_check_form_row_2";
pub static ID_POLICY_CHECK_HEADER: &'static str = "policy_check_header";
pub static ID_POLICY_CHECK_ITEMS_WIDGET: &'static str = "policy_check_items_widget";
pub static ID_POLICY_CHECK_BUTTON_RESULT: &'static str = "policy_check_button_result";
pub static ID_POLICY_CHECK_BUTTON_MENU: &'static str = "policy_check_button_menu";
pub static ID_POLICY_CHECK_DATA_COUNT_BLOCK: &'static str = "policy_check_data_count_block";
pub static ID_POLICY_CHECK_HINT: &'static str = "policy_check_hint";
pub static ID_POLICY_CHECK_LABEL_HINT: &'static str = "policy_check_label_hint";
pub static ID_POLICY_CHECK_LABEL_MENU: &'static str = "policy_check_label_menu";
pub static ID_POLICY_CHECK_LABEL_POLICY_NUMBER: &'static str = "policy_check_label_policy_number";
pub static ID_POLICY_CHECK_LABEL_RESULT: &'static str = "policy_check_label_result";
pub static ID_POLICY_CHECK_MENU: &'static str = "policy_check_menu";
pub static ID_POLICY_CHECK_MENU_LABEL_ACCOUNT: &'static str = "policy_check_menu_label_account";
pub static ID_POLICY_CHECK_MENU_LABEL_QUIT: &'static str = "policy_check_menu_label_quit";
pub static ID_POLICY_CHECK_MENU_SHORTCUT_QUIT: &'static str = "policy_check_menu_shortcut_quit";
pub static ID_POLICY_CHECK_MENU_LABEL_TOGGLE_THEME: &'static str = "policy_check_menu_label_toggle_theme";
pub static ID_POLICY_CHECK_POLICY_NUMBER: &'static str = "policy_check_policy_number";
pub static ID_POLICY_CHECK_POPUP_MENU: &'static str = "policy_check_popup_menu";
pub static ID_POLICY_CHECK_POPUP_MENU_TOGGLE_THEME: &'static str = "policy_check_popup_menu_toggle_theme";
pub static ID_POLICY_CHECK_POPUP_PROGRESS: &'static str = "policy_check_popup_progress";
pub static ID_POLICY_CHECK_PROGRESS_BAR: &'static str = "policy_check_progress_bar";
pub static ID_POLICY_CHECK_PROGRESS_TIME: &'static str = "policy_check_progress_time";
pub static ID_POLICY_CHECK_PROGRESS_TEXT: &'static str = "policy_check_progress_text";
pub static ID_POLICY_CHECK_RESULT: &'static str = "policy_check_result";
pub static ID_POLICY_CHECK_WIDGET: &'static str = "policy_check_widget";
pub static ID_POLICY_DATA_ADD_BUTTON: &'static str = "policy_data_add_button"; pub static ID_LOCALIZATION_FORM: &str = "localization_form";
pub static ID_POLICY_DATA_COUNT: &'static str = "policy_data_count"; pub static ID_LOCALIZATION_HEADER: &str = "localization_header";
pub static ID_POLICY_DATA_LABEL: &'static str = "policy_data_label"; pub static ID_LOCALIZATION_LANGUAGES: &str = "localization_languages";
pub static ID_POLICY_DATA_ITEMS_WIDGET: &'static str = "policy_data_items_widget"; pub static ID_LOCALIZATION_LANGUAGE_NAME: &str = "localization_language_name";
pub static ID_POLICY_DATA_DATE_INSERTED: &'static str = "policy_data_date_inserted";
pub static ID_POLICY_DATA_DION: &'static str = "policy_data_dion";
pub static ID_POLICY_DATA_POLICY_CODE: &'static str = "policy_data_policy_code";
pub static ID_POLICY_DATA_POLICY_NUMBER: &'static str = "policy_data_policy_number";
pub static ID_POLICY_DATA_STACK: &'static str = "policy_data_stack";
pub static ID_POLICY_DATA_STATUS: &'static str = "policy_data_status";
pub static ID_POLICY_DATA_LIST_NAME: &'static str = "policy_data_list_name";
pub static ID_POLICY_LIST_ADD_BUTTON: &'static str = "policy_list_add_button"; pub static ID_POLICY_CHECK_FORM: &str = "policy_check_form";
pub static ID_POLICY_LIST_ITEMS_WIDGET: &'static str = "policy_list_items_widget"; pub static ID_POLICY_CHECK_FORM_ROW_0: &str = "policy_check_form_row_0";
pub static ID_POLICY_LIST_TEXT_BOX: &'static str = "policy_list_text_box"; pub static ID_POLICY_CHECK_FORM_ROW_1: &str = "policy_check_form_row_1";
pub static ID_POLICY_CHECK_FORM_ROW_2: &str = "policy_check_form_row_2";
pub static ID_POLICY_CHECK_HEADER: &str = "policy_check_header";
pub static ID_POLICY_CHECK_ITEMS_WIDGET: &str = "policy_check_items_widget";
pub static ID_POLICY_CHECK_BUTTON_RESULT: &str = "policy_check_button_result";
pub static ID_POLICY_CHECK_BUTTON_MENU: &str = "policy_check_button_menu";
pub static ID_POLICY_CHECK_DATA_COUNT_BLOCK: &str = "policy_check_data_count_block";
pub static ID_POLICY_CHECK_HINT: &str = "policy_check_hint";
pub static ID_POLICY_CHECK_LABEL_HINT: &str = "policy_check_label_hint";
pub static ID_POLICY_CHECK_LABEL_MENU: &str = "policy_check_label_menu";
pub static ID_POLICY_CHECK_LABEL_POLICY_NUMBER: &str = "policy_check_label_policy_number";
pub static ID_POLICY_CHECK_LABEL_RESULT: &str = "policy_check_label_result";
pub static ID_POLICY_CHECK_MENU: &str = "policy_check_menu";
pub static ID_POLICY_CHECK_MENU_LABEL_ACCOUNT: &str = "policy_check_menu_label_account";
pub static ID_POLICY_CHECK_MENU_LABEL_QUIT: &str = "policy_check_menu_label_quit";
pub static ID_POLICY_CHECK_MENU_SHORTCUT_QUIT: &str = "policy_check_menu_shortcut_quit";
pub static ID_POLICY_CHECK_MENU_LABEL_TOGGLE_THEME: &str = "policy_check_menu_label_toggle_theme";
pub static ID_POLICY_CHECK_POLICY_NUMBER: &str = "policy_check_policy_number";
pub static ID_POLICY_CHECK_POPUP_MENU: &str = "policy_check_popup_menu";
pub static ID_POLICY_CHECK_POPUP_MENU_TOGGLE_THEME: &str = "policy_check_popup_menu_toggle_theme";
pub static ID_POLICY_CHECK_POPUP_PROGRESS: &str = "policy_check_popup_progress";
pub static ID_POLICY_CHECK_PROGRESS_BAR: &str = "policy_check_progress_bar";
pub static ID_POLICY_CHECK_PROGRESS_TIME: &str = "policy_check_progress_time";
pub static ID_POLICY_CHECK_PROGRESS_TEXT: &str = "policy_check_progress_text";
pub static ID_POLICY_CHECK_RESULT: &str = "policy_check_result";
pub static ID_POLICY_CHECK_WIDGET: &str = "policy_check_widget";
pub static ID_POLICY_DATA_ADD_BUTTON: &str = "policy_data_add_button";
pub static ID_POLICY_DATA_COUNT: &str = "policy_data_count";
pub static ID_POLICY_DATA_LABEL: &str = "policy_data_label";
pub static ID_POLICY_DATA_ITEMS_WIDGET: &str = "policy_data_items_widget";
pub static ID_POLICY_DATA_DATE_INSERTED: &str = "policy_data_date_inserted";
pub static ID_POLICY_DATA_DION: &str = "policy_data_dion";
pub static ID_POLICY_DATA_POLICY_CODE: &str = "policy_data_policy_code";
pub static ID_POLICY_DATA_POLICY_NUMBER: &str = "policy_data_policy_number";
pub static ID_POLICY_DATA_STACK: &str = "policy_data_stack";
pub static ID_POLICY_DATA_STATUS: &str = "policy_data_status";
pub static ID_POLICY_DATA_LIST_NAME: &str = "policy_data_list_name";
pub static ID_POLICY_LIST_ADD_BUTTON: &str = "policy_list_add_button";
pub static ID_POLICY_LIST_ITEMS_WIDGET: &str = "policy_list_items_widget";
pub static ID_POLICY_LIST_TEXT_BOX: &str = "policy_list_text_box";
// Component Values (Properties) // Component Values (Properties)
pub static PROP_ADVOTRACKER: &'static str = "advotracker"; pub static PROP_ADVOTRACKER: &str = "advotracker";
pub static PROP_POLICY_CHECK: &'static str = "policy_check"; pub static PROP_POLICY_CHECK: &str = "policy_check";
pub static PROP_POLICY_PROGRESS_COUNT: &'static str = "policy_progress_count"; pub static PROP_POLICY_PROGRESS_COUNT: &str = "policy_progress_count";
pub static PROP_POLICY_DATA_LIST: &'static str = "policy_data_list"; pub static PROP_POLICY_DATA_LIST: &str = "policy_data_list";
pub static PROP_POLICY_DATA_COUNT: &'static str = "policy_data_count"; pub static PROP_POLICY_DATA_COUNT: &str = "policy_data_count";
pub static PROP_POLICY_LIST: &'static str = "policy_list"; pub static PROP_POLICY_LIST: &str = "policy_list";
pub static PROP_POLICY_LIST_COUNT: &'static str = "policy_list_count"; pub static PROP_POLICY_LIST_COUNT: &str = "policy_list_count";

View File

@@ -0,0 +1,40 @@
/*
* advotracker - Hotline tackingtool for Advocats
*
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
* SPDX-License-Identifier: (0BSD or MIT)
*/
use orbtk::prelude::*;
use crate::widgets::localization::localization_view::LocalizationView;
#[derive(AsAny, Debug, Default)]
pub struct LocalizationState {
change_language: bool,
}
impl LocalizationState {
pub fn change_language(&mut self) {
self.change_language = true;
}
}
impl State for LocalizationState {
fn update(&mut self, _registry: &mut Registry, ctx: &mut Context<'_>) {
if !self.change_language {
return;
}
let index = *LocalizationView::selected_index_ref(&ctx.widget()) as usize;
let selected_language = LocalizationView::languages_ref(&ctx.widget())[index].clone();
match selected_language.as_str() {
"English" => ctx.set_language("en_US"),
"German" => ctx.set_language("de_DE"),
_ => {}
}
self.change_language = false;
}
}

View File

@@ -0,0 +1,85 @@
/*
* advotracker - Hotline tackingtool for Advocats
*
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
* SPDX-License-Identifier: (0BSD or MIT)
*/
use orbtk::prelude::*;
use crate::{
data::constants::*,
widgets::localization::localization_state::LocalizationState,
};
type List = Vec<String>;
// Macro that initializes the widget structures/variables for our view
widget!(LocalizationView<LocalizationState> {
languages: List,
selected_index: i32 }
);
/// The template implementation of the localization view
/// All GUI elements are styled using the "style" attribute referencing to a ron based css
impl Template for LocalizationView {
fn template(self, id: Entity, ctx: &mut BuildContext<'_>) -> Self {
let languages = vec!["English".to_string(), "German".to_string()];
let count = languages.len();
self.languages(languages)
.selected_index(1)
.child(
Grid::new()
.id(ID_LOCALIZATION_FORM)
.margin(4)
.columns(
Columns::create()
.push(120)
.push(12)
.push("auto")
)
.rows(Rows::create()
.push("auto")
.push(4)
.push("auto")
.push(4)
.push("auto")
.push(12)
.push("auto"),
)
.child(
TextBlock::new()
.id(ID_LOCALIZATION_HEADER)
.h_align("start")
.attach(Grid::column(0))
.attach(Grid::row(0))
.attach(Grid::column_span(3))
.text("Localization dialog")
.style("header")
.build(ctx),
)
.child(
ComboBox::new()
.id(ID_LOCALIZATION_LANGUAGES)
.count(count)
.items_builder(move |bc, index| {
let text = bc.get_widget(id)
.get::<Vec<String>>("languages")[index]
.clone();
TextBlock::new()
.id(ID_LOCALIZATION_LANGUAGE_NAME)
.v_align("center")
.text(text)
.build(bc)
})
.on_changed("selected_index", move |states, _| {
states.get_mut::<LocalizationState>(id).change_language();
})
.selected_index(id)
.build(ctx),
)
.build(ctx),
)
}
}

View File

@@ -0,0 +1,12 @@
/*
* advotracker - Hotline tackingtool for Advocats
*
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
* SPDX-License-Identifier: (0BSD or MIT)
*/
/// The localization state
pub mod localization_state;
/// The localizatin view
pub mod localization_view;

View File

@@ -10,10 +10,9 @@ use orbtk::prelude::*;
use crate::{ use crate::{
data::structures::PolicyCheck, data::structures::PolicyCheck,
widgets::policycheck::policycheck_view::PolicycheckView, widgets::policycheck::policycheck_view::PolicycheckView,
widgets::localization::localization_view::LocalizationView,
}; };
type List = Vec<String>;
// [START] views // [START] views
widget!(MainView { widget!(MainView {
@@ -63,44 +62,6 @@ impl Template for MainView {
} }
} }
widget!(LocalizationView<LocalizationState> {
languages: List,
selected_index: i32 }
);
impl Template for LocalizationView {
fn template(self, id: Entity, ctx: &mut BuildContext<'_>) -> Self {
let languages = vec!["English".to_string(), "German".to_string()];
let count = languages.len();
self.languages(languages).selected_index(1).child(
Stack::new()
.width(120)
.margin(16)
.spacing(8)
.child(TextBlock::new().text("Hello").build(ctx))
.child(TextBlock::new().text("User").build(ctx))
.child(TextBlock::new().text("Localization dialog").build(ctx))
.child(
ComboBox::new()
.count(count)
.items_builder(move |bc, index| {
let text = bc.get_widget(id)
.get::<Vec<String>>("languages")[index]
.clone();
TextBlock::new().v_align("center").text(text).build(bc)
})
.on_changed("selected_index", move |states, _| {
states.get_mut::<LocalizationState>(id).change_language();
})
.selected_index(id)
.build(ctx),
)
.build(ctx),
)
}
}
widget!( widget!(
ConfigurationView<ConfigurationState> { ConfigurationView<ConfigurationState> {
configuration_file: String, configuration_file: String,
@@ -222,35 +183,6 @@ impl Template for ConfigurationView {
// [START] states // [START] states
#[derive(AsAny, Debug, Default)]
struct LocalizationState {
change_language: bool,
}
impl LocalizationState {
fn change_language(&mut self) {
self.change_language = true;
}
}
impl State for LocalizationState {
fn update(&mut self, _registry: &mut Registry, ctx: &mut Context<'_>) {
if !self.change_language {
return;
}
let index = *LocalizationView::selected_index_ref(&ctx.widget()) as usize;
let selected_language = LocalizationView::languages_ref(&ctx.widget())[index].clone();
match selected_language.as_str() {
"English" => ctx.set_language("en_US"),
"German" => ctx.set_language("de_DE"),
_ => {}
}
self.change_language = false;
}
}
#[derive(Debug, Default, AsAny)] #[derive(Debug, Default, AsAny)]
struct ConfigurationState {} struct ConfigurationState {}

View File

@@ -8,14 +8,17 @@
/// global helper functions /// global helper functions
pub mod global_state; pub mod global_state;
/// The starting point (Main View) /// The localization widget.
pub mod localization;
/// The starting point (Main View).
pub mod main_view; pub mod main_view;
/// The policy check wigdet /// The policycheck wigdet.
pub mod policycheck; pub mod policycheck;
// /// The policy data widget // /// The policydata widget.
// pub mod policydata; // pub mod policydata;
// /// The policy lists widget // /// The policylists widget.
// pub mod policylist; // pub mod policylist;