diff --git a/advotracker/src/data/constants.rs b/advotracker/src/data/constants.rs index f1c9b46..a3b88e2 100644 --- a/advotracker/src/data/constants.rs +++ b/advotracker/src/data/constants.rs @@ -6,67 +6,73 @@ */ // Styles (RON based theme system) -pub static STYLE_BOTTOM_BAR: &'static str = "bottom_bar"; -pub static STYLE_HEADER_BAR: &'static str = "header_bar"; -pub static STYLE_SEPERATOR: &'static str = "seperator"; -//pub static STYLE_ITEM_BUTTON: &'static str = "item_button"; -pub static STYLE_MENU: &'static str = "menu"; -pub static STYLE_BUTTON_MENU: &'static str = "button_menu"; -pub static STYLE_STACK_MENU: &'static str = "stack_menu"; +pub static STYLE_BOTTOM_BAR: &str = "bottom_bar"; +pub static STYLE_HEADER_BAR: &str = "header_bar"; +pub static STYLE_SEPERATOR: &str = "seperator"; +//pub static STYLE_ITEM_BUTTON: &str = "item_button"; +pub static STYLE_MENU: &str = "menu"; +pub static STYLE_BUTTON_MENU: &str = "button_menu"; +pub static STYLE_STACK_MENU: &str = "stack_menu"; // Widget IDs (DCES: Entity[id] => [Component1, .. , Component] -> 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_POLICY_DATA_COUNT: &'static str = "policy_data_count"; -pub static ID_POLICY_DATA_LABEL: &'static str = "policy_data_label"; -pub static ID_POLICY_DATA_ITEMS_WIDGET: &'static str = "policy_data_items_widget"; -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_LOCALIZATION_FORM: &str = "localization_form"; +pub static ID_LOCALIZATION_HEADER: &str = "localization_header"; +pub static ID_LOCALIZATION_LANGUAGES: &str = "localization_languages"; +pub static ID_LOCALIZATION_LANGUAGE_NAME: &str = "localization_language_name"; -pub static ID_POLICY_LIST_ADD_BUTTON: &'static str = "policy_list_add_button"; -pub static ID_POLICY_LIST_ITEMS_WIDGET: &'static str = "policy_list_items_widget"; -pub static ID_POLICY_LIST_TEXT_BOX: &'static str = "policy_list_text_box"; +pub static ID_POLICY_CHECK_FORM: &str = "policy_check_form"; +pub static ID_POLICY_CHECK_FORM_ROW_0: &str = "policy_check_form_row_0"; +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) -pub static PROP_ADVOTRACKER: &'static str = "advotracker"; -pub static PROP_POLICY_CHECK: &'static str = "policy_check"; -pub static PROP_POLICY_PROGRESS_COUNT: &'static str = "policy_progress_count"; +pub static PROP_ADVOTRACKER: &str = "advotracker"; +pub static PROP_POLICY_CHECK: &str = "policy_check"; +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_COUNT: &'static str = "policy_data_count"; +pub static PROP_POLICY_DATA_LIST: &str = "policy_data_list"; +pub static PROP_POLICY_DATA_COUNT: &str = "policy_data_count"; -pub static PROP_POLICY_LIST: &'static str = "policy_list"; -pub static PROP_POLICY_LIST_COUNT: &'static str = "policy_list_count"; +pub static PROP_POLICY_LIST: &str = "policy_list"; +pub static PROP_POLICY_LIST_COUNT: &str = "policy_list_count"; diff --git a/advotracker/src/widgets/localization/localization_state.rs b/advotracker/src/widgets/localization/localization_state.rs new file mode 100644 index 0000000..9080199 --- /dev/null +++ b/advotracker/src/widgets/localization/localization_state.rs @@ -0,0 +1,40 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2020 Ralf Zerres + * 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; + } +} diff --git a/advotracker/src/widgets/localization/localization_view.rs b/advotracker/src/widgets/localization/localization_view.rs new file mode 100644 index 0000000..2f19e09 --- /dev/null +++ b/advotracker/src/widgets/localization/localization_view.rs @@ -0,0 +1,85 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2020 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +use orbtk::prelude::*; + +use crate::{ + data::constants::*, + widgets::localization::localization_state::LocalizationState, +}; + +type List = Vec; + +// Macro that initializes the widget structures/variables for our view +widget!(LocalizationView { + 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::>("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::(id).change_language(); + }) + .selected_index(id) + .build(ctx), + ) + .build(ctx), + ) + } +} diff --git a/advotracker/src/widgets/localization/mod.rs b/advotracker/src/widgets/localization/mod.rs new file mode 100644 index 0000000..48225bc --- /dev/null +++ b/advotracker/src/widgets/localization/mod.rs @@ -0,0 +1,12 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2020 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + +/// The localization state +pub mod localization_state; + +/// The localizatin view +pub mod localization_view; diff --git a/advotracker/src/widgets/main_view.rs b/advotracker/src/widgets/main_view.rs index 9553c77..6af097d 100644 --- a/advotracker/src/widgets/main_view.rs +++ b/advotracker/src/widgets/main_view.rs @@ -10,10 +10,9 @@ use orbtk::prelude::*; use crate::{ data::structures::PolicyCheck, widgets::policycheck::policycheck_view::PolicycheckView, + widgets::localization::localization_view::LocalizationView, }; -type List = Vec; - // [START] views widget!(MainView { @@ -63,44 +62,6 @@ impl Template for MainView { } } -widget!(LocalizationView { - 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::>("languages")[index] - .clone(); - TextBlock::new().v_align("center").text(text).build(bc) - }) - .on_changed("selected_index", move |states, _| { - states.get_mut::(id).change_language(); - }) - .selected_index(id) - .build(ctx), - ) - .build(ctx), - ) - } -} - widget!( ConfigurationView { configuration_file: String, @@ -222,35 +183,6 @@ impl Template for ConfigurationView { // [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)] struct ConfigurationState {} diff --git a/advotracker/src/widgets/mod.rs b/advotracker/src/widgets/mod.rs index d8b2fb7..ce0ac33 100644 --- a/advotracker/src/widgets/mod.rs +++ b/advotracker/src/widgets/mod.rs @@ -8,14 +8,17 @@ /// global helper functions pub mod global_state; -/// The starting point (Main View) +/// The localization widget. +pub mod localization; + +/// The starting point (Main View). pub mod main_view; -/// The policy check wigdet +/// The policycheck wigdet. pub mod policycheck; -// /// The policy data widget +// /// The policydata widget. // pub mod policydata; -// /// The policy lists widget +// /// The policylists widget. // pub mod policylist;