From c55c24579208edb06fe51258ee646fa21683d904 Mon Sep 17 00:00:00 2001 From: Tsuki Date: Tue, 26 Nov 2024 16:59:54 +0800 Subject: [PATCH] sync --- .DS_Store | Bin 0 -> 6148 bytes loaders/etws_loader/src/lib.rs | 2 +- loaders/etws_loader/src/raw.rs | 2 +- mp/src/app.rs | 11 +-- mp/src/file.rs | 66 ++++++++----- mp/src/widgets/selector.rs | 169 ++++++++++++++++++++++++--------- 6 files changed, 172 insertions(+), 78 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..bfaf4435cbb138f901af99a99cb0842463586fb4 GIT binary patch literal 6148 zcmeHKJ5EC}5S)cbM50NV(pTUHRuoRa1^7IuB0Y(S{#BeSM`QL=5IyLUBGIh09(%oG z%Tv643&1vC!vnAau%tWU+lRUNzWdB>Dq=)B&v?ft_8-Ik?RA`G{~d7d9d;P;g5fuR z-1(MF3P=GdAO)m=6gaU0RbZF*Cq7rlNdYNv`3m^=q0t?C;glGk4i3=*5El%GaUQ({ zv3Y>l3#UXzXqHrBQmtAHOFHAN@_ONvm~>b*A67S8bto3M^ZXX+u%4(<3P^!t1#WY> z^7{Ws|EK>yCTS%Fq`*}vV2kb3cEcxCZJj;NYi*-H(>>=vcjG)L9HJZ(qa1VL<#-)Q bnb&;I{a!dF2A%Ps6ZJFTy2zx!xfS>UNJbTh literal 0 HcmV?d00001 diff --git a/loaders/etws_loader/src/lib.rs b/loaders/etws_loader/src/lib.rs index 2978b2b..d8bbfc3 100644 --- a/loaders/etws_loader/src/lib.rs +++ b/loaders/etws_loader/src/lib.rs @@ -206,7 +206,7 @@ impl DataLoaderPlugin for ETWSLoader { } fn supported_extensions(&self) -> RVec> where { - convert_iter_to_rvec(vec!["dat".into(), "gz".into()].into_iter()) + convert_iter_to_rvec(vec!["dat".into(), "gz".into(), "zip".into()].into_iter()) } fn plugin_info(&self) -> radarg_plugin_interface::PluginInfo where { diff --git a/loaders/etws_loader/src/raw.rs b/loaders/etws_loader/src/raw.rs index d7978c6..f6c58e3 100644 --- a/loaders/etws_loader/src/raw.rs +++ b/loaders/etws_loader/src/raw.rs @@ -252,7 +252,7 @@ pub fn parse_raw_data>(path: P) -> Result { if path.is_file() { let mut file = File::open(path)?; let mut buf = Vec::new(); - file.read_to_end(&mut buf).unwrap(); + file.read_to_end(&mut buf)?; if &buf[0..4] == b"SSTM" || &buf[16..20] == b"STDM" || &buf[0..4] == b"RSTM" { return get_radar_data(buf); } else { diff --git a/mp/src/app.rs b/mp/src/app.rs index ef4a1fe..a3f8561 100644 --- a/mp/src/app.rs +++ b/mp/src/app.rs @@ -232,16 +232,7 @@ impl MatchEvent for App { } fn handle_signal(&mut self, cx: &mut Cx) { - self.file_manager.try_deal_file(cx); - } - - fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions) { - let ui = self.ui.clone(); - - if ui.button(id!(open_modal)).clicked(actions) { - let modal = ui.modal(id!(selector_modal)); - modal.open(cx); - } + self.file_manager.try_deal_file(&self.ui, cx); } fn handle_action(&mut self, _cx: &mut Cx, e: &Action) { diff --git a/mp/src/file.rs b/mp/src/file.rs index d06bf6f..fc423c4 100644 --- a/mp/src/file.rs +++ b/mp/src/file.rs @@ -1,14 +1,20 @@ -use crate::{app::AppAction, errors::AppErr, GIAPP, RUNTIME}; -use std::path::Path; +use crate::{ + app::AppAction, + errors::AppErr, + widgets::selector::{ItemKey, ItemValue, SelectorWidgetRefExt}, + GIAPP, RUNTIME, +}; +use ::log::info; +use makepad_widgets::*; +use std::path::{Path, PathBuf}; -use log::info; -use makepad_widgets::{Cx, ToUIReceiver, ToUISender}; +use makepad_widgets::{id, Cx, ToUIReceiver, ToUISender, WidgetRef}; use mp_core::{datapool::Value, errors::DataError, Data}; use crate::DATAPOOL; #[derive(Default)] pub struct FileManager { - receiver: ToUIReceiver, DataError>>>, + receiver: ToUIReceiver, DataError>)>>, } impl FileManager { @@ -22,7 +28,7 @@ impl FileManager { let path = path.to_path_buf(); RUNTIME.spawn(async move { let data = DATAPOOL.get_or_load_async(&path).await; - sender.send(vec![data]).unwrap(); + sender.send(vec![(path, data)]).unwrap(); }); } @@ -38,10 +44,12 @@ impl FileManager { } } - pub fn try_deal_file(&mut self, cx: &mut Cx) { + pub fn try_deal_file(&mut self, ui: &WidgetRef, cx: &mut Cx) { + let selector = ui.selector(id!(selector)); + let selector_modal = ui.modal(id!(selector_modal)); while let Ok(mut data) = self.receiver.try_recv() { if data.len() == 1 { - let data = data.pop().unwrap(); + let (path, data) = data.pop().unwrap(); if let Ok(data) = data { info!("Data: {:?}", data); cx.action(AppAction::Notification { @@ -49,25 +57,37 @@ impl FileManager { duration: 3.0, }); - let pipelines = GIAPP.pipelines(); - let data = data.get(0).unwrap(); - let supported_elements = pipelines.supported_elements(&data); + let mut items = vec![]; - if supported_elements.is_empty() { - cx.action(AppAction::Notification { - message: "No supported elements".to_string(), - duration: 3.0, - }); - } else { - let names = supported_elements + let pipelines = GIAPP.pipelines(); + for (idx, data) in data.iter() { + let supported_elements = pipelines.supported_elements(&data); + + let key_name = ItemKey { + path: "".to_string(), + category: data.description.clone(), + description: data.description.clone(), + }; + + let item_values = supported_elements .iter() - .map(|e| e.name().to_string()) + .map(|v| ItemValue { + name: v.name().to_string(), + icon: "".to_string(), + }) .collect::>(); - cx.action(AppAction::Notification { - message: format!("Supported elements: {:?}", names), - duration: 3.0, - }); + + items.push((key_name, item_values)); } + + let base_name = path + .file_stem() + .map(|v| v.to_string_lossy()) + .unwrap_or_default(); + + selector.set_items(cx, items); + selector.set_base_name(&base_name); + selector_modal.open(cx); } } else { } diff --git a/mp/src/widgets/selector.rs b/mp/src/widgets/selector.rs index b99bda6..a6e0507 100644 --- a/mp/src/widgets/selector.rs +++ b/mp/src/widgets/selector.rs @@ -189,6 +189,24 @@ live_design! { border_color: #9c9c9c border_width: 0.5 } + + align: { + y: 0.5 + } + + padding: { + left: 20 + } + + file_base_name =