diff --git a/advotracker/src/bin/policycheck.rs b/advotracker/src/bin/policycheck.rs new file mode 100644 index 0000000..06d0fdd --- /dev/null +++ b/advotracker/src/bin/policycheck.rs @@ -0,0 +1,235 @@ +use orbtk::prelude::*; +use orbtk::theme::DEFAULT_THEME_CSS; +//use orbtk::theme::LIGHT_THEME_EXTENSION_CSS; + +//#[cfg(feature = "light-theme")] +static WIDGET_EXT: &'static str = include_str!("../../resources/stylesheets/policyholder_check.css"); + +fn get_theme() -> ThemeValue { + //ThemeValue::create_from_css(LIGHT_THEME_EXTENSION_CSS) + ThemeValue::create_from_css(DEFAULT_THEME_CSS) + .extension_css(WIDGET_EXT) + .build() +} + +#[derive(Debug, Copy, Clone)] +enum Action { + //ClearText, + EntryActivated(Entity), + EntryChanged(Entity), + //ValueChanged(Entity), + //ValueOk, + //ValueNone, +} + +#[derive(AsAny)] +pub struct MainViewState { + action: Option, +} + +impl Default for MainViewState { + fn default() -> Self { + MainViewState { action: None } + } +} + +impl MainViewState { + fn action(&mut self, action: impl Into>) { + self.action = action.into(); + } +} + +impl State for MainViewState { + fn update(&mut self, _: &mut Registry, ctx: &mut Context<'_>) { + if let Some(action) = self.action { + match action { + // Action::ClearText => { + // ctx.widget().set("policynumber", String16::from("")); + // } + // Action::ValueOk => { + // //let mut text_box = TextBox::get(ctx.get_widget(entity)); + // //let text = text_box.text_mut(); + // //ctx.widget().set("policynumber", background("#4d4c4c")); + // } + // Action::ValueNone => { + // //let mut text_box = TextBox::get(ctx.get_widget(entity)); + // //let text = text_box.text_mut(); + // //ctx.widget().set("policynumber", background("#5b0f22")); + //} + Action::EntryActivated(entity) => { + let mut text_box = TextBox::get(ctx.get_widget(entity)); + let text = text_box.text_mut(); + //let mut widget = ctx.get_widget(entity); + //let text = widget.get_mut::("text"); + println!("got value policynumber: {}", text); + //text.clear(); + } + Action::EntryChanged(entity) => { + let widget = ctx.get_widget(entity); + let text = widget.get::("text"); + println!("entry changed: {}", text); + } + // Action::ValueChanged(entity) => { + // let val = + // ((*ctx.get_widget(entity).get::("val")).floor() as i32).to_string(); + // ctx.child("value_text").set("text", String16::from(val)); + //} + } + + self.action = None; + } + } +} + +fn create_header(ctx: &mut BuildContext, text: &str) -> Entity { + TextBlock::new() + .text(text) + .element("text-block") + .class("h1") + .build(ctx) +} + +widget!( + MainView { + sum_policynumbers: usize, + policynumber: String16, + result: String16 + } +); + +impl Template for MainView { + fn template(self, id: Entity, ctx: &mut BuildContext) -> Self { + self.name("MainView").child( + //.result("Anzahl Versicherungsnummern: 0") + //.result("Policyholders count: 0").sum_policynumbers(0) + //.sum_policynumbers(0) + Grid::new() + .background("#fafafa") + //.width(200.0) + //.height(360.0) + .columns( + Columns::new() + .add(150.0) + .add("*") + //.add(120.0) + //.add("auto") + .add(150.0) + .build(), + ) + .rows( + Rows::new() + .add("*") + .add("*") + .build(), + ) + .child( + Grid::new() + .element("policyholder_check") + .margin((4.0, 24.0, 24.0, 4.0)) + .min_width(180.0) + .min_height(80.0) + .attach(Grid::column(1)) + .attach(Grid::row(0)) + .child( + Stack::new() + .spacing(8.0) + .orientation("vertical") + .h_align("center") + //.child(create_header(ctx, "Validation number policyholder")) + .child(create_header(ctx, "Validierung Versicherungsnummer")) + .child( + TextBox::new() + //.class("text_box") + // overwriting the class defaults + /* .background("transparent") + .foreground("#9dafbf") + .background("#fafafa") + /* .foreground(colors::LINK_WATER_COLOR) */ + .border_brush("#5b0f22") + .border_width(5) + .border_radius(15) */ + //.name("policynumber") + .focused(true) + .water_mark("Versicherungs-Nr...") + //.text("Number policyholder", id) + .text(("policynumber", id)) + .font_size(24.0) + .h_align("stretch") + .on_activate(move |states, entity| { + state(id, states).action(Action::EntryActivated(entity)); + }) + .on_changed(move |states, entity| { + state(id, states).action(Action::EntryChanged(entity)); + }) + .build(ctx), + ) + .child( + TextBlock::new() + .element("text-block") + .id("result") + .min_width(80.0) + .max_width(180.0) + //.text("Result:") + .text("Ergebnis:") + .build(ctx), + ) + .build(ctx), + ) + .build(ctx) + ) + .child( + Grid::new() + .element("logo_customer") + .margin((9.0, 16.0, 16.0, 9.0)) + .attach(Grid::column(0)) + .attach(Grid::row(1)) + .v_align("end") + .child( + ImageWidget::new() + .image("./resources/images/hiedemann_logo.png") + .build(ctx), + ) + .build(ctx), + ) + .child( + Grid::new() + .element("logo_vendor") + .margin((9.0, 16.0, 16.0, 9.0)) + .attach(Grid::column(2)) + .attach(Grid::row(1)) + .v_align("end") + .child( + ImageWidget::new() + .image("./resources/images/networkx_logo.png") + .build(ctx), + ) + .build(ctx), + ) + .build(ctx), + ) // MainView + } +} + +fn main() { + Application::new() + .window(|ctx| { + Window::new() + //.title("OrbTk - Policyholder checker example") + .name("MainWindow") + .title("AdvoTracker - Versicherungsnummern") + .position((-500.0, -100.0)) + .size(480.0, 260.0) + .min_width(460.0) + .min_height(180.0) + .resizeable(true) + .theme(get_theme()) + .child(MainView::new().build(ctx)) + .build(ctx) + }) + .run(); +} + +// helper to request MainViewState +fn state<'a>(id: Entity, states: &'a mut StatesContext) -> &'a mut MainViewState { + states.get_mut(id) +}