From 4d2427a0583c82fdec56b252a83bffb1d4d3dd0f Mon Sep 17 00:00:00 2001 From: Ralf Zerres Date: Mon, 13 Jul 2020 00:50:51 +0200 Subject: [PATCH] callbacks: policycheck_state update Signed-off-by: Ralf Zerres --- .../src/callbacks/policycheck_state.rs | 121 ++++++++++-------- 1 file changed, 71 insertions(+), 50 deletions(-) diff --git a/advotracker/src/callbacks/policycheck_state.rs b/advotracker/src/callbacks/policycheck_state.rs index f0c424d..b8836ea 100644 --- a/advotracker/src/callbacks/policycheck_state.rs +++ b/advotracker/src/callbacks/policycheck_state.rs @@ -2,9 +2,10 @@ use chrono::{Local, DateTime}; use dotenv::dotenv; use locales::t; use orbtk::prelude::*; -use orbtk::shell::WindowRequest; +//use orbtk::shell::WindowRequest; use serde::Deserialize; -use std::{env, process, thread, time}; +//use std::{env, process, thread, time}; +use std::{env, process}; use std::collections::HashMap; use tracing::{debug, error, info, trace}; @@ -27,9 +28,9 @@ pub enum Action { AddProgress(f64), ResetProgress, SetProgress(f64), - SetPopupBox(Entity), + SetProgressBox(Entity), RemoveFocus(Entity), - RemovePopupBox(Entity), + RemoveProgressBox(Entity), SetEntry(Entity), SetVisibility(Entity), TextChanged(Entity, usize), @@ -45,7 +46,7 @@ struct Environment { #[derive(Default, AsAny)] pub struct PolicyCheckState { action: Option, - label_result_text_block: Entity, + label_result: Entity, last_focused: Option, menu_button: Entity, //policy_check_clean_button: Entity, @@ -118,15 +119,15 @@ impl PolicyCheckState { fn import_data(&mut self, ctx: &mut Context<'_>) -> Result<(), Box> { // WIP: for now, only import once per session - let two_seconds = time::Duration::from_secs(2); - let sender = ctx.window_sender(); + //let two_seconds = time::Duration::from_secs(2); + //let sender = ctx.window_sender(); if self.policy_data_count == 0 { - //let mut text_block_wrapper: TextBlockCtx<'_> = text_block(ctx.child("policy_check_result")); - //text_block_wrapper.set_enabled(true); - //text_block_wrapper.set_text("Importieren der Prüflisten-Elemnte ..."); + let mut text_block_wrapper: TextBlockCtx<'_> = text_block(ctx.child("policy_check_result")); + text_block_wrapper.set_enabled(true); + text_block_wrapper.set_text("Importieren der Prüflisten-Elemente ..."); - // self.set_progress_box(ctx); + // self.set_popup_box(ctx); // progress_bar(ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)).set_val(0.25); // for _ in 1..4 { // let old_width = *progress_bar(ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)).val(); @@ -135,7 +136,7 @@ impl PolicyCheckState { // thread::sleep(two_seconds); // } - sender.send(WindowRequest::Redraw).unwrap(); + //sender.send(WindowRequest::Redraw).unwrap(); match self.create_hashmap() { Ok(()) => { @@ -169,7 +170,7 @@ impl PolicyCheckState { /// Open menu. pub fn open_menu(&mut self, text_block: Entity, ctx: &mut Context<'_>) { - let menu_string = ctx.get_widget(text_block).get::("text"); + let _menu_string = ctx.get_widget(text_block).get::("text"); } /// Parse validity of the given policy number. @@ -221,6 +222,8 @@ impl PolicyCheckState { // Parse policy code: "AS-123456789" // DION VERS POLLFNR // 1 AS 1515735810 + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Collapsed); + text_block(ctx.child("policy_check_label_result")).set_text("Prüfungsergebnis:"); button(ctx.child("policy_check_button_result")).set_visibility(Visibility::Collapsed); button(ctx.child("policy_check_button_result")).set_background("transparent"); @@ -246,6 +249,7 @@ impl PolicyCheckState { button(ctx.child("policy_check_button_result")).set_visibility(Visibility::Visible); button(ctx.child("policy_check_button_result")).set_foreground("#008000"); button(ctx.child("policy_check_button_result")).set_background("transparent"); + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Visible); } _ => { // no matching key @@ -256,6 +260,10 @@ impl PolicyCheckState { button(ctx.child("policy_check_button_result")).set_text("ungültig!"); button(ctx.child("policy_check_button_result")).set_visibility(Visibility::Visible); button(ctx.child("policy_check_button_result")).set_foreground("#FF0000"); + let mut text_block_wrapper: TextBlockCtx<'_> = text_block(ctx.child("policy_check_result")); + let res = t!("policy.validation.not_found", lang); + text_block_wrapper.set_text(res); + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Visible); } } }, @@ -266,7 +274,10 @@ impl PolicyCheckState { button(ctx.child("policy_check_button_result")).set_text("ungültig!"); button(ctx.child("policy_check_button_result")).set_visibility(Visibility::Visible); button(ctx.child("policy_check_button_result")).set_foreground("#FF0000"); + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Visible); let mut text_block_wrapper: TextBlockCtx<'_> = text_block(ctx.child("policy_check_result")); + let res = t!("policy.validation.invalid_input", lang); + text_block_wrapper.set_text(res); text_block_wrapper.set_enabled(true); text_block_wrapper.set_text("Nur Nummern sind zulässig!"); } @@ -278,6 +289,8 @@ impl PolicyCheckState { text_block_wrapper.set_enabled(true); let res = t!("policy.validation.to_short", lang); text_block_wrapper.set_text(res); + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Visible); + //self.set_visibility(policy_check_policy_number, ctx); } if policy_number_length > 10 { //println!("Policy number is to big!"); @@ -285,6 +298,8 @@ impl PolicyCheckState { text_block_wrapper.set_enabled(true); let res = t!("policy.validation.to_long", lang); text_block_wrapper.set_text(res); + text_block(ctx.child("policy_check_label_result")).set_visibility(Visibility::Visible); + //self.set_visibility(policy_check_policy_number, ctx); } } @@ -292,7 +307,7 @@ impl PolicyCheckState { fn remove_progress_box(&mut self, ctx: &mut Context<'_>) { if let Some(progress_box) = self.progress_box { ctx.remove_child(progress_box); - println!("PopupBox removed !"); + println!("ProgressBox removed !"); } } @@ -328,23 +343,9 @@ impl PolicyCheckState { } - /// Change visibility of the result label. - fn set_visibility(&self, entity: Entity, ctx: &mut Context<'_>) { - if ctx.get_widget(entity).get::("text").is_empty() { - text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Visible); - text_block(ctx.child(ID_POLICY_CHECK_BUTTON_RESULT)).set_visibility(Visibility::Visible); - } else { - text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Collapsed); - text_block(ctx.child(ID_POLICY_CHECK_BUTTON_RESULT)).set_visibility(Visibility::Collapsed); - //ctx.get_widget(self.policy_check_label_policy_number).set("enabled", false); - } - - ctx.get_widget(self.label_result_text_block).update_theme_by_state(true); - } - /// Set a popup box that updates the import status in a progress bar fn set_progress_box(&mut self, ctx: &mut Context<'_>) { - //println!("Set up Popup box: {:?}", text_box); + //println!("Set up Progress box: {:?}", text_box); let stack = ctx .entity_of_child(ID_POLICY_CHECK_RESULT) .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_CHECK_RESULT'."); @@ -355,14 +356,29 @@ impl PolicyCheckState { // create a progress_box widget as a child of entity "ID_POLICY_CHECK_POLICY_NUMBER" build_context.append_child(stack, progress_box); self.progress_box = Some(progress_box); - println!("PopupBox created: {:?}", Some(progress_box)); + println!("ProgressBox created: {:?}", Some(progress_box)); } /// Update count of elements in the policy data list. - fn update_data_count(&self, ctx: &mut Context<'_>) { + fn _update_data_count(&self, ctx: &mut Context<'_>) { let data_list_count = ctx.widget().get::(PROP_POLICY_DATA_LIST).len(); ctx.widget().set(PROP_POLICY_DATA_COUNT, data_list_count); } + + /// Change visibility of the result label. + fn _set_visibility(&self, entity: Entity, ctx: &mut Context<'_>) { + if ctx.get_widget(entity).get::("text").is_empty() { + text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Collapsed); + text_block(ctx.child(ID_POLICY_CHECK_BUTTON_RESULT)).set_visibility(Visibility::Collapsed); + //ctx.get_widget(self.policy_check_label_policy_number).set("enabled", false); + } else { + text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_text("Prüfungsergebnis:"); + text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Visible); + text_block(ctx.child(ID_POLICY_CHECK_BUTTON_RESULT)).set_visibility(Visibility::Visible); + } + + ctx.get_widget(self.label_result).update_theme_by_state(true); + } } /// upported states for our view @@ -371,15 +387,23 @@ impl State for PolicyCheckState { fn init(&mut self, _: &mut Registry, ctx: &mut Context<'_>) { let dt_start: DateTime = Local::now(); - trace!(target: "advotracker", init = "started"); + trace!(target: "advotracker", policycheck_state = "init", status = "started"); self.menu_button = ctx .entity_of_child(ID_POLICY_CHECK_BUTTON_MENU) - .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_CHECK_POLICY_MENU_BUTTON'."); + .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_CHECK_BUTTON_MENU'."); - self.progress_box = ctx - .entity_of_child(ID_POLICY_CHECK_PROGRESS_BOX) - .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_PROGRESS_BOX'."); + self.label_result = ctx + .entity_of_child(ID_POLICY_CHECK_LABEL_RESULT) + .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_CHECK_LABEL_RESULT'."); + + let string_result = "Prüfungsergebnis:".to_string(); + text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_text(string_result); + text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Collapsed); + + // self.progress_box = ctx + // .entity_of_child(ID_POLICY_CHECK_PROGRESS_BOX) + // .expect("PolicyCheckState.init: Can't find entity of resource 'ID_POLICY_CHECK_PROGRESS_BOX'."); // // Load the saved data from a file in 'ron' format into our data structure. // // The cargo package identifier (default: 'nwx.advotracker') is used as the @@ -398,13 +422,15 @@ impl State for PolicyCheckState { //self.update_data_count(ctx); // Load data into hashmap - //self.import_data(ctx); + // match self.import_data(ctx) { + // Ok(()) => trace!(target: "advotracker", policycheck_state = "init", import_data = "success"), + // Err(e) => trace!(target: "advotracker", policycheck_state = "init", import_data = ?e), + //} let dt_end: DateTime = Local::now(); let duration = dt_end.signed_duration_since(dt_start); - trace!(target: "advotracker", init = ?duration); - + trace!(target: "advotracker", policycheck_state = "init", status = "finished", duration = ?duration); } /// Update the widget state. @@ -456,8 +482,8 @@ impl State for PolicyCheckState { ctx.get_widget(policy_check_policy_number).set("enabled", false); ctx.push_event_by_window(FocusEvent::RemoveFocus(policy_check_policy_number)); } - Action::RemovePopupBox(_entity) => { - self.remove_popup_box(ctx); + Action::RemoveProgressBox(_entity) => { + self.remove_progress_box(ctx); } Action::ResetProgress => { progress_bar(ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)).set_val(0.); @@ -469,10 +495,10 @@ impl State for PolicyCheckState { progress_bar(ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)).set_val(0.); } } - Action::SetPopupBox(_entity) => { - //println!("set_popup_box: {:#?}", ctx.widget().get::("water_mark")); - //println!("set_popup_box: {:#?}", entity); - self.set_popup_box(ctx); + Action::SetProgressBox(_entity) => { + //println!("set_progress_box: {:#?}", ctx.widget().get::("water_mark")); + //println!("set_progress_box: {:#?}", entity); + self.set_progress_box(ctx); //let text = text_box(ctx.child(ID_POLICY_CHECK_POLICY_NUMBER)); } Action::SetEntry(policy_check_policy_number) => { @@ -495,11 +521,6 @@ impl State for PolicyCheckState { /// Update the view after the layout is rendered. fn update_post_layout(&mut self, _: &mut Registry, ctx: &mut Context<'_>) { - let string_result = "Prüfungsergebnis:".to_string(); - //string_result = format!("{} {:?}", string_result, self.??; - text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_text(string_result); - text_block(ctx.child(ID_POLICY_CHECK_LABEL_RESULT)).set_visibility(Visibility::Collapsed); - let mut string_data_count = "Prüflisten-Elemente:".to_string(); string_data_count = format!("{} {:?}", string_data_count, self.policy_numbers.len());