From e8a86e8afd58752951b7e2978160346c87b05211 Mon Sep 17 00:00:00 2001 From: Ralf Zerres Date: Thu, 5 Nov 2020 17:46:18 +0100 Subject: [PATCH] policycheck: * insert copyright hint * more descriptive import of allianzdirectcall function * documentation update * introduce KeyHandler in menu popup * rename action function to `set_action` Signed-off-by: Ralf Zerres --- .../widgets/policycheck/policycheck_state.rs | 87 ++++++++++--------- .../widgets/policycheck/policycheck_view.rs | 43 +++++---- 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/advotracker/src/widgets/policycheck/policycheck_state.rs b/advotracker/src/widgets/policycheck/policycheck_state.rs index d9d4946..d6b2210 100644 --- a/advotracker/src/widgets/policycheck/policycheck_state.rs +++ b/advotracker/src/widgets/policycheck/policycheck_state.rs @@ -1,3 +1,10 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2020 Ralf Zerres + * SPDX-License-Identifier: (0BSD or MIT) + */ + use locales::t; use orbtk::prelude::*; use orbtk::shell::event::Key; @@ -15,10 +22,11 @@ use crate::{ structures::{PolicyCode, PolicyDataList, PolicyList}, constants::*, }, - services::imports::allianzdirectcall::import, + //services::imports::allianzdirectcall::import, + services::imports::allianzdirectcall, }; -/// Actions that can execute on the task view. +/// Valid `actions` that are handled as state changes in the `Policycheck` widget. #[derive(Debug, Clone, Copy)] pub enum PolicycheckAction { AddProgress(f64), @@ -41,16 +49,16 @@ pub enum PolicycheckAction { TextChanged(Entity, usize) } -/// define valid environment variables provided via .env files -/// located in the current call directory -/// this is primarily used in testing scenarios (eg. debugging) +/// Define valid environment variables provided via .env files +/// located in the current call directory. +/// This is primarily used in testing scenarios (eg. debugging). #[derive(Debug, Deserialize)] struct Environment { test_lang: String, rust_log: String, } -/// Handles the requests from `PolicycheckView`. +/// Valid `structures` that are handled inside the state of the `Policycheck` widget. #[derive(AsAny, Default)] pub struct PolicycheckState { action: Option, @@ -70,13 +78,8 @@ pub struct PolicycheckState { impl GlobalState for PolicycheckState {} -/// method definitions, that react on any given state change inside the view +/// method definitions, that react on any given state change inside the `Policycheck` widget. impl PolicycheckState { - /// Sets a new action. - pub fn action(&mut self, action: PolicycheckAction) { - self.action = action.into(); - } - /// Create a hashmap (key: policy number, value: policy type). pub fn create_hashmap(&mut self, _ctx: &mut Context<'_>) -> Result<(), Box> { trace!(target: "advotracker", create_hashmap = "started"); @@ -94,7 +97,7 @@ impl PolicycheckState { // Wip: use cli parameter stored in viperus ... //let mut csv_import_path = v.get::("import_file").unwrap(); let mut csv_import_path = String::from("POLLFNR_WOECHENTLICH.txt"); - match import(&mut csv_import_path, &mut policy_data, + match allianzdirectcall::import(&mut csv_import_path, &mut policy_data, &mut policy_numbers, &mut self.policy_data_count, &self.lang) { Ok((count, duration)) => { @@ -131,7 +134,6 @@ impl PolicycheckState { if self.policy_numbers.len() == 0 { // initialize popup widget - //let sender = ctx.send_window_request(); self.set_popup_progress(ctx); self.progress_count += 0.33; self.update_progress_bar(ctx); @@ -344,6 +346,11 @@ impl PolicycheckState { // ctx.get_widget(self.policy_check_policy_number).update_theme_by_state(true); // } + /// Sets a new action. + pub fn set_action(&mut self, action: PolicycheckAction) { + self.action = action.into(); + } + /// Change status of given text box to edit mode. fn set_entry(&mut self, text_box: Entity, ctx: &mut Context<'_>) { if ctx.get_widget(text_box).get::("text").is_empty() { @@ -444,7 +451,7 @@ impl PolicycheckState { /// upported states for our view impl State for PolicycheckState { - /// Initialize the widget state + /// Initialize the state of widget PolicyState fn init(&mut self, _: &mut Registry, ctx: &mut Context<'_>) { let time_start= SystemTime::now(); @@ -487,7 +494,7 @@ impl State for PolicycheckState { trace!(target: "advotracker", policycheck_state = "init", status = "finished", duration = ?duration); } - /// Handle messages inside the widget state. + /// Handle messages inside the state of widget Policycheck. fn messages( &mut self, mut messages: MessageReader, @@ -508,12 +515,24 @@ impl State for PolicycheckState { _ => {} } }, - _ => (), + PolicycheckAction::AddProgress(increment) => { + let old_width = ProgressBar::val_clone(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)); + + let new_width = old_width + increment; + // Set the ProgressBar's val property to the calculated percentage + // (whereas 0.0 means 0%, and 1.0 means 100%) + if new_width <= 1. { + ProgressBar::val_set(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR), new_width); + } else { + ProgressBar::val_set(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR), 1.); + } + } + _ => (), } } } - /// Update the widget state. + /// Update the state of widget Policycheck. fn update(&mut self, _registry: &mut Registry, ctx: &mut Context<'_>) { // // clear focus on focus moved // if self.last_focused != ctx.window().get::("global").focused_widget { @@ -527,18 +546,6 @@ impl State for PolicycheckState { if let Some(action) = self.action { match action { - PolicycheckAction::AddProgress(increment) => { - let old_width = ProgressBar::val_clone(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR)); - - let new_width = old_width + increment; - // Set the ProgressBar's val property to the calculated percentage - // (whereas 0.0 means 0 %, and 1.0 means 100 %) to increment the progress - if new_width <= 1. { - ProgressBar::val_set(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR), new_width); - } else { - ProgressBar::val_set(&mut ctx.child(ID_POLICY_CHECK_PROGRESS_BAR), 1.); - } - } PolicycheckAction::ClearEntry(policy_check_policy_number) => { ctx.get_widget(policy_check_policy_number).set("enabled", false); } @@ -622,7 +629,7 @@ fn create_menu(menu: Entity, ctx: &mut BuildContext<'_>) -> Entity { .open(true) .width(280) .height(140) - .on_key_down(move | ctx, key_event | { + .on_key_down(move | _ctx, key_event | { match key_event.key { Key::Q(..) => { //if is_ctrl_home_down(ctx) { @@ -631,8 +638,9 @@ fn create_menu(menu: Entity, ctx: &mut BuildContext<'_>) -> Entity { //} }, Key::Escape => { - ctx.get_mut::(menu) - .action(PolicycheckAction::RemoveMenu(menu)); + println!("got: Escape"); + //ctx.get::(menu) + // .set_action(PolicycheckAction::RemoveMenu(menu)); }, _ => (), }; @@ -643,12 +651,9 @@ fn create_menu(menu: Entity, ctx: &mut BuildContext<'_>) -> Entity { .id(ID_POLICY_CHECK_MENU) .columns( Columns::create() - // Menu Button - .push("80") - // Seperator - .push("1") - // Keyboard Shortcut - .push("*") + .push("80") // Menu Button + .push("1") // Seperator + .push("*") // Keyboard Shortcut .build(), ) .rows( @@ -680,7 +685,7 @@ fn create_menu(menu: Entity, ctx: &mut BuildContext<'_>) -> Entity { .text("Toggle theme") .on_click(move |states, _| { states.get_mut::(menu) - .action(PolicycheckAction::SetToggleTheme(menu)); + .set_action(PolicycheckAction::SetToggleTheme(menu)); true }) .build(ctx), @@ -767,7 +772,7 @@ fn create_popup_progress(popup_progress: Entity, ctx: &mut BuildContext<'_>) -> .on_mouse_down(move |ctx, _| { println!("create_popup_progress: on_click -> remove_popup(popup_progress)"); ctx.get_mut::(popup_progress) - .action(PolicycheckAction::RemovePopup(popup_progress)); + .set_action(PolicycheckAction::RemovePopup(popup_progress)); true }) .child( diff --git a/advotracker/src/widgets/policycheck/policycheck_view.rs b/advotracker/src/widgets/policycheck/policycheck_view.rs index 4d4ec38..fceb64b 100644 --- a/advotracker/src/widgets/policycheck/policycheck_view.rs +++ b/advotracker/src/widgets/policycheck/policycheck_view.rs @@ -6,13 +6,14 @@ */ use orbtk::prelude::*; +use orbtk::shell::event::Key; use crate::{ data::{ constants::*, structures::PolicyCheck, }, - widgets::policycheck::policycheck_state::*, + widgets::policycheck::policycheck_state::{PolicycheckAction, PolicycheckState}, }; type List = Vec; @@ -21,6 +22,7 @@ type List = Vec; widget!( /// Dialog to enter a policy identifier/number. /// This identifier is checked agains a map of valid policy codes. + // PolicycheckView: KeyDownHandler { PolicycheckView { lang: String, policy_check: PolicyCheck, @@ -99,7 +101,7 @@ impl Template for PolicycheckView { .on_click(move |ctx, _| { //ctx.get_mut::(policycheck_state) ctx.get_mut::(id) - .action(PolicycheckAction::OpenMenu(policy_check_label_menu)); + .set_action(PolicycheckAction::OpenMenu(policy_check_label_menu)); true }) .build(ctx); @@ -169,32 +171,34 @@ impl Template for PolicycheckView { .on_activate(move |ctx, entity| { // Entity is entered/activated via Mouse/Keyboard //ctx.get_mut::(policy_check_view) - println!("ParseEntry: {:?}", entity); ctx.get_mut::(id) - .action(PolicycheckAction::ParseEntry(entity)); + .set_action(PolicycheckAction::ParseEntry(entity)); }) //.on_changed(|_, entity, _, _| println!("Selection changed: {:?}", entity)) // .on_changed(move |ctx, entity, _| { // ctx.get_mut::(id) - // .action(Action::SetProgressBox(entity)); + // .set_action(Action::SetProgressBox(entity)); // ctx.get_mut::(id) - // .action(Action::AddProgress(0.5)); + // .set_action(Action::AddProgress(0.5)); // ctx.get_mut::(id) - // .action(Action::InputTextChanged(entity)); + // .set_action(Action::InputTextChanged(entity)); // ctx.get_mut::(id) - // .action(Action::SetVisibility(entity)); + // .set_action(Action::SetVisibility(entity)); // ctx.get_widget(policy_check_label_policy_number).set("visible"); // ctx.get_mut::(id) - // .action(Action::SetVisility(entity)); + // .set_action(Action::SetVisility(entity)); // }) // .on_mouse_down | .on_mouse_move | .on_mouse_up (move |ctx, entity| { - // state(id, states).action(Action::AddItem); + // state(id, states).set_action(Action::AddItem); // }) - //.on_key_down(move |ctx, _| { - // ctx.get_mut::(id) - // .action(Action::ImportData); - // true - //}) + .on_key_down(move |_, key_event| { + if key_event.key == Key::A(true) { + println!("A key down"); + } + // ctx.get_mut::(id) + // .set_action(Action::ImportData); + true + }) .build(ctx), ) .child(policy_check_button_result) @@ -313,7 +317,8 @@ impl Template for PolicycheckView { .build(ctx); // WIP: this widget type should handle our target natively - // but it isn't able to get textinput ... yet + // but it isn't able to get textinput, nor handle usize values + // ... yet let _policy_check_numeric_box = NumericBox::new() .id(ID_POLICY_CHECK_POLICY_NUMBER) .h_align("start") @@ -326,14 +331,16 @@ impl Template for PolicycheckView { // WIP code @kivimango // .on_activate(move |ctx, entity| { // ctx.get_mut::(id) - // .action(Action::ParseEntry(entity)); + // .set_action(Action::ParseEntry(entity)); // }) // .on_changed(move |ctx, entity| { // ctx.get_mut::(id) - // .action(Action::InputTextChanged(entity)); + // .set_action(Action::InputTextChanged(entity)); //}) .build(ctx); + // row3: only shown, if we read in `policy numbers` in + // a hashmap as values let policy_data_stack = Stack::new() .id(ID_POLICY_DATA_STACK) .attach(Grid::row(3))