Add the Spreadsheet panel to inspect node output data (#2442)

* Inspect node ouput stub

* Fix compile error in tests

* Create a table

* Clickable tables

* Add vector data support

* Checkbox to enable the panel

* Remove Instances table ID column; style the spreadsheet

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
James Lindsay
2025-03-18 23:06:05 -07:00
committed by GitHub
co-authored by Keavon Chambers
parent 6292dea103
commit 43275b7a1e
24 changed files with 771 additions and 108 deletions
@@ -6,46 +6,20 @@ use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate,
use crate::messages::prelude::*;
use graphene_std::vector::misc::BooleanOperation;
pub struct MenuBarMessageData {
#[derive(Debug, Clone, Default)]
pub struct MenuBarMessageHandler {
pub has_active_document: bool,
pub rulers_visible: bool,
pub node_graph_open: bool,
pub has_selected_nodes: bool,
pub has_selected_layers: bool,
pub has_selection_history: (bool, bool),
pub spreadsheet_view_open: bool,
pub message_logging_verbosity: MessageLoggingVerbosity,
}
#[derive(Debug, Clone, Default)]
pub struct MenuBarMessageHandler {
has_active_document: bool,
rulers_visible: bool,
node_graph_open: bool,
has_selected_nodes: bool,
has_selected_layers: bool,
has_selection_history: (bool, bool),
message_logging_verbosity: MessageLoggingVerbosity,
}
impl MessageHandler<MenuBarMessage, MenuBarMessageData> for MenuBarMessageHandler {
fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque<Message>, data: MenuBarMessageData) {
let MenuBarMessageData {
has_active_document,
rulers_visible,
node_graph_open,
has_selected_nodes,
has_selected_layers,
has_selection_history,
message_logging_verbosity,
} = data;
self.has_active_document = has_active_document;
self.rulers_visible = rulers_visible;
self.node_graph_open = node_graph_open;
self.has_selected_nodes = has_selected_nodes;
self.has_selected_layers = has_selected_layers;
self.has_selection_history = has_selection_history;
self.message_logging_verbosity = message_logging_verbosity;
impl MessageHandler<MenuBarMessage, ()> for MenuBarMessageHandler {
fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque<Message>, _data: ()) {
match message {
MenuBarMessage::SendLayout => self.send_layout(responses, LayoutTarget::MenuBar),
}
@@ -590,6 +564,13 @@ impl LayoutHolder for MenuBarMessageHandler {
disabled: no_active_document,
..MenuBarEntry::default()
}],
vec![MenuBarEntry {
label: "Window: Spreadsheet".into(),
icon: Some(if self.spreadsheet_view_open { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()),
action: MenuBarEntry::create_action(|_| SpreadsheetMessage::ToggleOpen.into()),
disabled: no_active_document,
..MenuBarEntry::default()
}],
]),
),
MenuBarEntry::new_root(
@@ -4,4 +4,4 @@ mod menu_bar_message_handler;
#[doc(inline)]
pub use menu_bar_message::{MenuBarMessage, MenuBarMessageDiscriminant};
#[doc(inline)]
pub use menu_bar_message_handler::{MenuBarMessageData, MenuBarMessageHandler};
pub use menu_bar_message_handler::MenuBarMessageHandler;