From a817794709019cf2fe6c7786bbc9cde1e7d87c2b Mon Sep 17 00:00:00 2001 From: aOK Date: Tue, 14 May 2024 09:40:13 +0300 Subject: [PATCH] choices options UI --- nimanyatta_v001/.DS_Store | Bin 0 -> 6148 bytes nimanyatta_v001/.gitignore | 1 + nimanyatta_v001/Cargo.toml | 20 +- nimanyatta_v001/README.md | 31 + nimanyatta_v001/resources/.DS_Store | Bin 0 -> 6148 bytes nimanyatta_v001/resources/back.svg | 4 + nimanyatta_v001/resources/forward.svg | 4 + .../resources/icons/drawable-mdpi/icon.png | Bin 0 -> 11153 bytes nimanyatta_v001/resources/me.svg | 2 +- nimanyatta_v001/resources/profile.svg | 4 + nimanyatta_v001/resources/status_info.svg | 5 + nimanyatta_v001/resources/x.svg | 4 + nimanyatta_v001/src/app.rs | 317 +++++- nimanyatta_v001/src/default_choice/cho.rs | 682 +++++++++++++ nimanyatta_v001/src/default_choice/choice.rs | 938 ++++++++++++++++++ nimanyatta_v001/src/default_choice/choose.rs | 297 ++++++ .../default_choice/default_choice_screen.rs | 233 ++++- nimanyatta_v001/src/default_choice/mod.rs | 2 + nimanyatta_v001/src/home/home_screen.rs | 8 + nimanyatta_v001/src/index.html | 43 + nimanyatta_v001/src/lib.rs | 2 + nimanyatta_v001/src/options.json | 6 + nimanyatta_v001/src/shared/cho.rs | 483 +++++++++ nimanyatta_v001/src/shared/custom_button.rs | 225 ++++- nimanyatta_v001/src/shared/dropdown_menu.rs | 362 +++++++ nimanyatta_v001/src/shared/header.rs | 190 ++++ nimanyatta_v001/src/shared/helpers.rs | 27 + nimanyatta_v001/src/shared/mod.rs | 9 + nimanyatta_v001/src/shared/popup_menu.rs | 415 ++++++++ nimanyatta_v001/src/shared/round_slider.rs | 99 ++ .../src/shared/stack_navigation.rs | 258 +++++ .../src/shared/stack_view_action.rs | 12 + nimanyatta_v001/src/shared/steps.rs | 846 ++++++++++++++++ nimanyatta_v001/src/shared/styles.rs | 7 +- nimanyatta_v001/src/utils.rs | 15 + 35 files changed, 5459 insertions(+), 92 deletions(-) create mode 100644 nimanyatta_v001/.DS_Store create mode 100644 nimanyatta_v001/resources/.DS_Store create mode 100644 nimanyatta_v001/resources/back.svg create mode 100644 nimanyatta_v001/resources/forward.svg create mode 100644 nimanyatta_v001/resources/icons/drawable-mdpi/icon.png create mode 100644 nimanyatta_v001/resources/profile.svg create mode 100644 nimanyatta_v001/resources/status_info.svg create mode 100644 nimanyatta_v001/resources/x.svg create mode 100644 nimanyatta_v001/src/default_choice/cho.rs create mode 100644 nimanyatta_v001/src/default_choice/choice.rs create mode 100644 nimanyatta_v001/src/default_choice/choose.rs create mode 100644 nimanyatta_v001/src/index.html create mode 100644 nimanyatta_v001/src/options.json create mode 100644 nimanyatta_v001/src/shared/cho.rs create mode 100644 nimanyatta_v001/src/shared/dropdown_menu.rs create mode 100644 nimanyatta_v001/src/shared/header.rs create mode 100644 nimanyatta_v001/src/shared/helpers.rs create mode 100644 nimanyatta_v001/src/shared/popup_menu.rs create mode 100644 nimanyatta_v001/src/shared/round_slider.rs create mode 100644 nimanyatta_v001/src/shared/stack_navigation.rs create mode 100644 nimanyatta_v001/src/shared/stack_view_action.rs create mode 100644 nimanyatta_v001/src/shared/steps.rs diff --git a/nimanyatta_v001/.DS_Store b/nimanyatta_v001/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..001d9ef2f6d491a924b27d21227afa9c8c1987e3 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8Z74zxiXH=A3$|(%@e*Qv0V8@)sfi65jM84!vh25Ee;8xj$wxiLOvYFX6tQMNvp_J8Iwv*lLFDoqIZN0b3s~wG zbJ^thiwxk}8L(=wW=yaz>z9uGNca$a^T$z`X5H>PuhknXt4)x0^TvG;g`0UEp}Bq{;>-)lNtRnE8^8NQ=O=K6)g<>=tIWIE%vLTZTtVqlhmy6T#E z{-1vT{+}(P9x*@+{3`}{W8e-Pn36tQ=O%||tp$1uih_Bi!p{;gS5Z<+|Z7D(yiXIod7HmZ+;w8lT0!H+pQWH}&7p9XePbXob!is7B zrU}2j!D9Bn6q9WE`#-`-5~o?O_sKVE^~Posq|?0fpH%K=K{iXhV0we2OQn*q)PwLU z9_J%x`%K9!h~;>y6XIwLA-C7Dj8yKanT%4M>l;TKWaRA5=Yv649G@(@V&3l^9-%&1 zEZVJ|{e#ns(R1=5)tljw1L0b>ESB&N%2GkE{!}JPK7zH(C?g4p0b+m{AO_Zy0ec{{ zI%`@#l}!u~13xo>`-6an=vpic>a7DhygsA9j)(#}z9kTaMb~0s5Ii8(#+7bU5R#LF$PCVqlelni)EH{-47yQ~AhWO`#Dn zKn(md26%nw4?QT#o~_@?!?RXEyN8B?aRn+Mps!p4V1WC`o^~3)Kpo;-i-kd)1?@T= PkS+q65bB75Utr)1K>SL^ literal 0 HcmV?d00001 diff --git a/nimanyatta_v001/resources/back.svg b/nimanyatta_v001/resources/back.svg new file mode 100644 index 0000000..7178c73 --- /dev/null +++ b/nimanyatta_v001/resources/back.svg @@ -0,0 +1,4 @@ + + + + diff --git a/nimanyatta_v001/resources/forward.svg b/nimanyatta_v001/resources/forward.svg new file mode 100644 index 0000000..490dae4 --- /dev/null +++ b/nimanyatta_v001/resources/forward.svg @@ -0,0 +1,4 @@ + + + + diff --git a/nimanyatta_v001/resources/icons/drawable-mdpi/icon.png b/nimanyatta_v001/resources/icons/drawable-mdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e88f3715073018c3dcb11ffd2aaaa03dfaa26c2f GIT binary patch literal 11153 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Τy>L t7w$zW^Fg75$WRoaFDO;j{GaL@wpG?7W4|Jb*gssVqU;BmIw?@t{|9j>6MFyv literal 0 HcmV?d00001 diff --git a/nimanyatta_v001/resources/me.svg b/nimanyatta_v001/resources/me.svg index f9508de..140674f 100644 --- a/nimanyatta_v001/resources/me.svg +++ b/nimanyatta_v001/resources/me.svg @@ -1,4 +1,4 @@ - \ No newline at end of file + diff --git a/nimanyatta_v001/resources/profile.svg b/nimanyatta_v001/resources/profile.svg new file mode 100644 index 0000000..3742f56 --- /dev/null +++ b/nimanyatta_v001/resources/profile.svg @@ -0,0 +1,4 @@ + + + + diff --git a/nimanyatta_v001/resources/status_info.svg b/nimanyatta_v001/resources/status_info.svg new file mode 100644 index 0000000..d243817 --- /dev/null +++ b/nimanyatta_v001/resources/status_info.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/nimanyatta_v001/resources/x.svg b/nimanyatta_v001/resources/x.svg new file mode 100644 index 0000000..490dae4 --- /dev/null +++ b/nimanyatta_v001/resources/x.svg @@ -0,0 +1,4 @@ + + + + diff --git a/nimanyatta_v001/src/app.rs b/nimanyatta_v001/src/app.rs index e08abca..d0332eb 100644 --- a/nimanyatta_v001/src/app.rs +++ b/nimanyatta_v001/src/app.rs @@ -1,4 +1,6 @@ +// use crate::shared::stack_view_action::StackViewAction; use makepad_widgets::*; +// use std::collections::HashMap; live_design! { @@ -7,12 +9,20 @@ live_design! { import makepad_widgets::theme_desktop_dark::*; import crate::home::home_screen::HomeScreen; - import crate::default_choice::default_choice_screen::DefaultChoiceScreen; + import crate::default_choice::default_choice_screen::DefaultChoice; + // import crate::default_choice::choose::Choose; import crate::two::two_screen::TwoScreen; import crate::three::three_screen::ThreeScreen; import crate::four::four_screen::FourScreen; import crate::five::five_screen::FiveScreen; import crate::shared::styles::*; + import crate::shared::steps::Choices; + import crate::shared::steps::ChoicesComponent; + import crate::shared::popup_menu::MenuItem; + // import crate::shared::header::DropDown; + + // import crate::shared::stack_navigation::*;ChoicesComponent + REGULAR_TEXT = { font_size: (12), @@ -21,7 +31,7 @@ live_design! { ICON_CHAT = dep("crate://self/resources/icons/chat.svg") PHONE_CHAT = dep("crate://self/resources/icons/chat.svg") - AppTab = { + AppTab2 = { width: Fit, height: Fill, flow: Right, @@ -31,8 +41,43 @@ live_design! { // color: #000 draw_radio: { radio_type: Tab, - color_active: #fff, - color_inactive: #fff, + + instance border_width: 0.0 + instance border_color: #0000 + instance inset: vec4(0.0, 0.0, 0.0, 0.0) + instance radius: 2.5 + + fn get_color(self) -> vec4 { + return mix( + mix( + (SIDEBAR_BG_COLOR), + (SIDEBAR_BG_COLOR_HOVER), + self.hover + ), + (SIDEBAR_BG_COLOR_SELECTED), + self.selected + ) + } + + fn get_border_color(self) -> vec4 { + return self.border_color + } + + fn pixel(self) -> vec4 { + let sdf = Sdf2d::viewport(self.pos * self.rect_size) + sdf.box( + self.inset.x + self.border_width, + self.inset.y + self.border_width, + self.rect_size.x - (self.inset.x + self.inset.z + self.border_width * 2.0), + self.rect_size.y - (self.inset.y + self.inset.w + self.border_width * 2.0), + max(1.0, self.radius) + ) + sdf.fill_keep(self.get_color()) + if self.border_width > 0.0 { + sdf.stroke(self.get_border_color(), self.border_width) + } + return sdf.result; + } } draw_text: { color_selected: #000, //#0b0, @@ -41,9 +86,114 @@ live_design! { text_style: {} } } + SIDEBAR_FONT_COLOR = #344054 + SIDEBAR_FONT_COLOR_HOVER = #344054 + SIDEBAR_FONT_COLOR_SELECTED = #127487 + + // SIDEBAR_BG_COLOR = #F8F8F8 + SIDEBAR_BG_COLOR = #f + SIDEBAR_BG_COLOR_HOVER = #E2F1F199 + SIDEBAR_BG_COLOR_SELECTED = #E2F1F199 + + AppTab = { + width: 80, + height: 70, + padding: 0, margin: 0, + flow: Down, spacing: 8.0, align: {x: 0.5, y: 0.5} + + icon_walk: {margin: 0, width: 30, height: 30} + label_walk: {margin: 0} + + draw_radio: { + radio_type: Tab, + + instance border_width: 0.0 + instance border_color: #0000 + instance inset: vec4(0.0, 0.0, 0.0, 0.0) + instance radius: 2.5 + + fn get_color(self) -> vec4 { + return mix( + mix( + (SIDEBAR_BG_COLOR), + (SIDEBAR_BG_COLOR_HOVER), + self.hover + ), + (SIDEBAR_BG_COLOR_SELECTED), + self.selected + ) + } + + fn get_border_color(self) -> vec4 { + return self.border_color + } + + fn pixel(self) -> vec4 { + let sdf = Sdf2d::viewport(self.pos * self.rect_size) + sdf.box( + self.inset.x + self.border_width, + self.inset.y + self.border_width, + self.rect_size.x - (self.inset.x + self.inset.z + self.border_width * 2.0), + self.rect_size.y - (self.inset.y + self.inset.w + self.border_width * 2.0), + max(1.0, self.radius) + ) + sdf.fill_keep(self.get_color()) + if self.border_width > 0.0 { + sdf.stroke(self.get_border_color(), self.border_width) + } + return sdf.result; + } + } + + draw_text: { + color_unselected: (SIDEBAR_FONT_COLOR) + color_unselected_hover: (SIDEBAR_FONT_COLOR_HOVER) + color_selected: (SIDEBAR_FONT_COLOR_SELECTED) + + fn get_color(self) -> vec4 { + return mix( + mix( + self.color_unselected, + self.color_unselected_hover, + self.hover + ), + self.color_selected, + self.selected + ) + } + } + + draw_icon: { + instance color_unselected: (SIDEBAR_FONT_COLOR) + instance color_unselected_hover: (SIDEBAR_FONT_COLOR_HOVER) + instance color_selected: (SIDEBAR_FONT_COLOR_SELECTED) + fn get_color(self) -> vec4 { + return mix( + mix( + self.color_unselected, + self.color_unselected_hover, + self.hover + ), + self.color_selected, + self.selected + ) + } + } + } App = {{App}} { ui: { - caption_bar = { margin: {left: -100}, visible: true, caption_label = {label = {text: "NiManyatta"}} }, + caption_bar = { + margin: { + left: -100 + }, + visible: true, + caption_label = { + label = { + text: "NiManyatta" + } + } + }, + window: {inner_size: vec2(1280, 1000)}, body = { show_bg: true @@ -80,31 +230,36 @@ live_design! { } mobile_modes = { - - home_tab = { - flow: Right, - align: {x: 0.0, y: 0.5} - animator: {selected = {default: on}} - label: "" - draw_icon: { - svg_file: (ICON_CHAT), - fn get_color(self) -> vec4 { - return mix( - #000, - #016def,//#0b0, - self.selected - ) + // spacing: 20 + { + // padding: { right: 60 } + home_tab = { + flow: Right, + align: {x: 0.0, y: 0.5} + animator: {selected = {default: on}} + text: "" + draw_icon: { + svg_file: (ICON_CHAT), + fn get_color(self) -> vec4 { + return mix( + #000, + #016def,//#0b0, + self.selected + ) + } } + width: 80.0, + icon_walk: {width: 20, height: 20} + flow: Right, spacing: 5.0, align: {x: 0.5, y: 0.5} } - width: Fill, - icon_walk: {width: 20, height: 20} - flow: Right, spacing: 5.0, align: {x: 0.2, y: 0.5} } + { + align: {x: 0.5} two_tab = { flow: Right, align: {x: 0.0, y: 0.5} - animator: {selected = {default: on}} - label: "2" + // animator: {selected = {default: on}} + text: "2" draw_icon: { svg_file: (ICON_CHAT), fn get_color(self) -> vec4 { @@ -115,15 +270,18 @@ live_design! { ) } } - width: Fill, + width: 80.0, icon_walk: {width: 20, height: 20} flow: Down, spacing: 5.0, align: {x: 0.5, y: 0.5} } + } + { + align: {x: 0.5} three_tab = { flow: Right, align: {x: 0.0, y: 0.5} - animator: {selected = {default: on}} - label: "3" + // animator: {selected = {default: on}} + text: "3" draw_icon: { svg_file: (ICON_CHAT), fn get_color(self) -> vec4 { @@ -134,15 +292,18 @@ live_design! { ) } } - width: Fill, + width: 80.0, icon_walk: {width: 20, height: 20} flow: Down, spacing: 5.0, align: {x: 0.5, y: 0.5} } + } + { + align: {x: 0.5} four_tab = { flow: Right, align: {x: 0.0, y: 0.5} - animator: {selected = {default: on}} - label: "4" + // animator: {selected = {default: on}} + text: "4" draw_icon: { svg_file: (ICON_CHAT), fn get_color(self) -> vec4 { @@ -153,28 +314,32 @@ live_design! { ) } } - width: Fill, + width: 80.0, icon_walk: {width: 20, height: 20} flow: Down, spacing: 5.0, align: {x: 0.5, y: 0.5} } + } + { + align: {x: 1.0} five_tab = { - flow: Right, - align: {x: 0.0, y: 0.5} - animator: {selected = {default: on}} - label: "" - draw_icon: { - svg_file: (PHONE_CHAT), - fn get_color(self) -> vec4 { - return mix( - #000, - #016def,//#0b0, - self.selected - ) + flow: Right, + align: {x: 0.0, y: 0.5} + // animator: {selected = {default: on}} + text: "" + draw_icon: { + svg_file: (PHONE_CHAT), + fn get_color(self) -> vec4 { + return mix( + #000, + #016def,//#0b0, + self.selected + ) + } } + width: 80.0, + icon_walk: {width: 20, height: 20} + flow: Right, spacing: 5.0, align: {x: 0.5, y: 0.5} } - width: Fill, - icon_walk: {width: 20, height: 20} - flow: Right, spacing: 5.0, align: {x: 0.8, y: 0.5} } } @@ -184,10 +349,10 @@ live_design! { padding: 0.0 home_frame = { visible: true } - kimanyatta_frame = {visible: false} - insurance_frame = {visible: false} - matatu_frame = {visible: false} - contactus_frame = {visible: false} + two_frame = {visible: false} + three_frame = {visible: false} + four_frame = {visible: false} + five_frame = {visible: false} } } @@ -197,12 +362,15 @@ live_design! { title_container = { title = { text: "Help Me Choose" + draw_text: { + color: #000 + } } } } } body = { - {} + {} } } } @@ -217,6 +385,8 @@ app_main!(App); pub struct App { #[live] ui: WidgetRef, + // #[rust] + // navigation_destinations: HashMap, } impl LiveRegister for App { @@ -224,6 +394,8 @@ impl LiveRegister for App { crate::makepad_widgets::live_design(cx); crate::home::home_screen::live_design(cx); crate::default_choice::default_choice_screen::live_design(cx); + crate::default_choice::choice::live_design(cx); + // crate::default_choice::choose::live_design(cx); crate::two::two_screen::live_design(cx); crate::three::three_screen::live_design(cx); crate::four::four_screen::live_design(cx); @@ -231,12 +403,20 @@ impl LiveRegister for App { crate::shared::styles::live_design(cx); crate::shared::custom_button::live_design(cx); + crate::shared::round_slider::live_design(cx); + crate::shared::steps::live_design(cx); + crate::shared::cho::live_design(cx); + crate::shared::popup_menu::live_design(cx); + crate::shared::header::live_design(cx); + crate::shared::helpers::live_design(cx); + + crate::shared::dropdown_menu::live_design(cx); } } impl LiveHook for App { // fn after_new_from_doc(&mut self, _cx: &mut Cx) { - // // self.init_navigation_destinations(); + // self.init_navigation_destinations(); // } fn after_new_from_doc(&mut self, _cx: &mut Cx) { println!("after_new_from_doc(): starting some kind of a loop"); @@ -287,6 +467,16 @@ impl MatchEvent for App { let mut navigation = self.ui.stack_navigation(id!(navigation)); navigation.handle_stack_view_actions(cx, &actions); + + for action in actions { + if let WindowAction::WindowGeomChange(ce) = action.as_widget_action().cast() { + let screen_width = ce.new_geom.inner_size.x * ce.new_geom.dpi_factor; + + log!("x ===> {}", ce.new_geom.inner_size.x); + log!("dpi_factor ===> {}", ce.new_geom.dpi_factor); + log!("SCREEN_WIDTH ===> {}", screen_width); + } + } } } @@ -296,3 +486,26 @@ impl AppMain for App { self.ui.handle_event(cx, event, &mut Scope::empty()); } } + +// impl Widget for App { +// fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep { +// // let label = self.view.label(id!(footer)); +// // let cap = self.ui.widget(id!(caption_bar)); + +// // cap.apply_value_instance(cx, apply, index, nodes) + +// DrawStep::done() +// } +// } + +impl App { + async fn _do_network_request(_cx: CxRef, _ui: WidgetRef, _url: &str) -> String { + "".to_string() + } + // fn handle_event(&mut self, cx: &mut Cx, event: &Event) { + // if let Event::Draw(event) = event { + // return self.ui.draw_widget_all(&mut Cx2d::new(cx, event)); + // } + // let actions = self.ui.handle_widget_event(cx, event); + // } +} diff --git a/nimanyatta_v001/src/default_choice/cho.rs b/nimanyatta_v001/src/default_choice/cho.rs new file mode 100644 index 0000000..2586797 --- /dev/null +++ b/nimanyatta_v001/src/default_choice/cho.rs @@ -0,0 +1,682 @@ +// use makepad_widgets::*; +use crate::makepad_widgets::*; +const CHOICE_MAX_OFFSET: f64 = 700.0; +const SELECT_MAX_OFFSET: f64 = 500.0; +// use crate::shared::custom_button::CustomButton; + +live_design! { + import makepad_draw::shader::std::*; + import makepad_widgets::base::*; + import makepad_widgets::theme_desktop_dark::*; + import crate::shared::styles::*; + import crate::shared::steps::StepNav; + import crate::shared::custom_button::CustomButton; + + Indicator = { + width: 100.0 + height: 8.0 + draw_bg: { + color: #f60, + radius: 2.5 + } + } + ButChoices = { + flow: Down, + show_bg: false + draw_bg: { + color: #000 + } + align: {x: 0.5, y: 0.5} + but = { + width: 300, height: 45, + text: "Option 1" + draw_bg: { + border_radius: 2. + } + } + } + SelectOptions = {{SelectOptions}} { + // page_titles: [] + width: Fit, height: Fit, + // indicator_titles: [] + flow: Down, + spacing: 10, + align: {x: 0.5, y: 0.5}, + select_choices_values: [] + selects_template: { + flow: Down, + } + choice_page_offset: 0.0 + animator: { + selectopt = { + default: restart, + restart = { + from: {all: Snap} + apply: {choice_page_offset: 500.0} + } + show = { + redraw: false, + from: {all: Forward {duration: 0}} + apply: {choice_page_offset: 0.0} + } + } + } + + } + OptionC = {{Indicators}} { + width: Fit, + height: Fit, + flow: Down, + spacing: 5, + align: {x: 0.5, y: 0.5}, + indicator_titles: [] + template: { + width: 100, height: Fit, + // margin: 0, padding: 0 + text: "Option 1" + draw_bg: { + border_radius: 2. + } + } + } + StepsScreen = { + // width: 300, + height: Fit, + flow: Down, + padding: 10.0 + align: {x: 0.5, y: 0.5} + padding: 20, + spacing: 20, + step_title =