Skip to content
Snippets Groups Projects
Commit 68e78f84 authored by Camillo Nicoletti's avatar Camillo Nicoletti :computer:
Browse files

Prova-da-testare

parent 315c80b7
No related branches found
No related tags found
No related merge requests found
use crate::MAVLINK_PROFILE; use crate::MAVLINK_PROFILE;
use crate::mavlink::reflection::ReflectionContext; // Importa ReflectionContext dal crate mavlink use crate::mavlink::TimedMessage; // Importa moduli specifici dal crate mavlink
use crate::mavlink::{TimedMessage}; // Importa moduli specifici dal crate mavlink
use crate::ui::panes::{PaneBehavior, PaneResponse}; // Importa i comportamenti e le risposte del pannello use crate::ui::panes::{PaneBehavior, PaneResponse}; // Importa i comportamenti e le risposte del pannello
use crate::ui::shortcuts::ShortcutHandler; use crate::ui::shortcuts::ShortcutHandler;
use egui::Ui;
use egui::{Response, ScrollArea, Window}; // Importa i moduli necessari da egui use egui::{Response, ScrollArea, Window}; // Importa i moduli necessari da egui
use serde::{Deserialize, Serialize}; // Importa i moduli per la serializzazione e deserializzazione use serde::{Deserialize, Serialize}; // Importa i moduli per la serializzazione e deserializzazione
use std::collections::{HashMap, HashSet}; // Importa HashSet e HashMap dalla libreria standard use std::collections::{HashMap, HashSet}; // Importa HashSet e HashMap dalla libreria standard
...@@ -39,7 +39,8 @@ impl Default for MessagesViewerPane { ...@@ -39,7 +39,8 @@ impl Default for MessagesViewerPane {
items: vec![], items: vec![],
settings: MsgSources::default(), settings: MsgSources::default(),
available_messages: MAVLINK_PROFILE available_messages: MAVLINK_PROFILE
.get_sorted_msgs().iter() .get_sorted_msgs()
.iter()
.map(|&s| s.id) .map(|&s| s.id)
.collect(), .collect(),
seen_message_types: HashSet::new(), seen_message_types: HashSet::new(),
...@@ -54,11 +55,11 @@ impl Default for MessagesViewerPane { ...@@ -54,11 +55,11 @@ impl Default for MessagesViewerPane {
impl PaneBehavior for MessagesViewerPane { impl PaneBehavior for MessagesViewerPane {
fn ui(&mut self, ui: &mut egui::Ui, _shortcut_handler: &mut ShortcutHandler) -> PaneResponse { fn ui(&mut self, ui: &mut egui::Ui, _shortcut_handler: &mut ShortcutHandler) -> PaneResponse {
let response = PaneResponse::default(); // Crea una risposta predefinita del pannello let response = PaneResponse::default();
ui.heading("Messages Viewer"); ui.horizontal(|ui| {
if ui.button("Open Message Filter").clicked() { ui.add_space(20.0);
self.settings_visible = true; // Mostra le impostazioni se il pulsante è cliccato ui.heading("Messages Viewer");
} });
if self.settings_visible { if self.settings_visible {
let msg_name = self let msg_name = self
...@@ -113,7 +114,8 @@ impl PaneBehavior for MessagesViewerPane { ...@@ -113,7 +114,8 @@ impl PaneBehavior for MessagesViewerPane {
} }
if select_all { if select_all {
if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg) { if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg)
{
for field in &fields { for field in &fields {
self.selected_fields.insert(field.id()); self.selected_fields.insert(field.id());
} }
...@@ -126,8 +128,10 @@ impl PaneBehavior for MessagesViewerPane { ...@@ -126,8 +128,10 @@ impl PaneBehavior for MessagesViewerPane {
if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg) { if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg) {
for field in fields { for field in fields {
let mut selected = self.selected_fields.contains(&field.id()); let mut selected =
let response: Response = ui.checkbox(&mut selected, field.field().name.clone()); self.selected_fields.contains(&field.id());
let response: Response =
ui.checkbox(&mut selected, field.field().name.clone());
if response.clicked() { if response.clicked() {
if selected { if selected {
self.selected_fields.insert(field.id()); self.selected_fields.insert(field.id());
...@@ -145,29 +149,40 @@ impl PaneBehavior for MessagesViewerPane { ...@@ -145,29 +149,40 @@ impl PaneBehavior for MessagesViewerPane {
ui.add(egui::Slider::new(&mut self.sampling_frequency, 1.0..=100.0).text("Hz")); ui.add(egui::Slider::new(&mut self.sampling_frequency, 1.0..=100.0).text("Hz"));
}); });
} }
egui::Grid::new("message_viewer").show(ui, |ui| { egui::Frame::default()
if let Some(selected_msg) = &self.selected_message { .fill(ui.visuals().window_fill())
if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg) { .show(ui, |ui| {
for field in fields {
// Usa field come &str per il controllo egui::ScrollArea::vertical()
if self.selected_fields.contains(&field.id()) { .auto_shrink([false, false])
let value = self .show(ui, |ui| {
.field_map ui.horizontal(|ui| {
.get(&field.id()) if let Some(selected_msg) = &self.selected_message {
.and_then(|v| v.as_deref()) if let Some(fields) = MAVLINK_PROFILE.get_fields(*selected_msg) {
.unwrap_or("N/A"); ui.add_space(20.0);
egui::Grid::new("message_viewer").show(ui, |ui| {
ui.label(field.field().name.clone()); for field in fields {
ui.label(value); if self.selected_fields.contains(&field.id()) {
ui.end_row(); let value = self
.field_map
.get(&field.id())
.and_then(|v| v.as_deref())
.unwrap_or("N/A");
ui.label(field.field().name.clone());
ui.label("");
ui.label(value);
ui.end_row();
}
}
});
}
} }
} });
} });
} else { })
ui.label("No message selected"); .response
} .context_menu(|ui| show_menu(ui, &mut self.settings_visible, &mut self.settings));
});
response response
} }
...@@ -178,9 +193,7 @@ impl PaneBehavior for MessagesViewerPane { ...@@ -178,9 +193,7 @@ impl PaneBehavior for MessagesViewerPane {
for field in fields { for field in fields {
if self.selected_fields.contains(&field.id()) { if self.selected_fields.contains(&field.id()) {
if let Ok(value) = field.extract_as_f64(&msg.message) { if let Ok(value) = field.extract_as_f64(&msg.message) {
self.field_map self.field_map.insert(field.id(), Some(value.to_string()));
.insert(field.id(), Some(value.to_string()));
} }
} }
} }
...@@ -198,6 +211,15 @@ impl PaneBehavior for MessagesViewerPane { ...@@ -198,6 +211,15 @@ impl PaneBehavior for MessagesViewerPane {
} }
} }
fn show_menu(ui: &mut Ui, settings_visible: &mut bool, _settings: &mut MsgSources) {
ui.set_max_width(200.0);
if ui.button("Source Data Settings…").clicked() {
*settings_visible = true;
ui.close_menu();
}
}
#[derive(Clone, Debug, Serialize, Deserialize)] #[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MsgSources { pub struct MsgSources {
msg_id: u32, msg_id: u32,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment