diff --git a/editor/src/dispatcher.rs b/editor/src/dispatcher.rs index a6c181632..789180cfc 100644 --- a/editor/src/dispatcher.rs +++ b/editor/src/dispatcher.rs @@ -3,6 +3,7 @@ use crate::messages::defer::DeferMessageContext; use crate::messages::dialog::DialogMessageContext; use crate::messages::layout::layout_message_handler::LayoutMessageContext; use crate::messages::prelude::*; +use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed; #[derive(Debug, Default)] pub struct Dispatcher { @@ -24,6 +25,7 @@ pub struct DispatcherMessageHandlers { input_preprocessor_message_handler: InputPreprocessorMessageHandler, key_mapping_message_handler: KeyMappingMessageHandler, layout_message_handler: LayoutMessageHandler, + menu_bar_message_handler: MenuBarMessageHandler, pub portfolio_message_handler: PortfolioMessageHandler, preferences_message_handler: PreferencesMessageHandler, tool_message_handler: ToolMessageHandler, @@ -215,30 +217,61 @@ impl Dispatcher { self.message_handlers.layout_message_handler.process_message(message, &mut queue, context); } Message::Portfolio(message) => { - let ipp = &self.message_handlers.input_preprocessor_message_handler; - let preferences = &self.message_handlers.preferences_message_handler; - let current_tool = &self.message_handlers.tool_message_handler.tool_state.tool_data.active_tool_type; - let message_logging_verbosity = self.message_handlers.debug_message_handler.message_logging_verbosity; - let reset_node_definitions_on_open = self.message_handlers.portfolio_message_handler.reset_node_definitions_on_open; - let timing_information = self.message_handlers.animation_message_handler.timing_information(); - let animation = &self.message_handlers.animation_message_handler; - let viewport = &self.message_handlers.viewport_message_handler; - self.message_handlers.portfolio_message_handler.process_message( message, &mut queue, PortfolioMessageContext { - ipp, - preferences, - current_tool, - message_logging_verbosity, - reset_node_definitions_on_open, - timing_information, - animation, - viewport, + ipp: &self.message_handlers.input_preprocessor_message_handler, + preferences: &self.message_handlers.preferences_message_handler, + current_tool: &self.message_handlers.tool_message_handler.tool_state.tool_data.active_tool_type, + reset_node_definitions_on_open: self.message_handlers.portfolio_message_handler.reset_node_definitions_on_open, + timing_information: self.message_handlers.animation_message_handler.timing_information(), + animation: &self.message_handlers.animation_message_handler, + viewport: &self.message_handlers.viewport_message_handler, }, ); } + Message::MenuBar(message) => { + let menu_bar_message_handler = &mut self.message_handlers.menu_bar_message_handler; + + menu_bar_message_handler.data_panel_open = self.message_handlers.portfolio_message_handler.data_panel_open; + menu_bar_message_handler.layers_panel_open = self.message_handlers.portfolio_message_handler.layers_panel_open; + menu_bar_message_handler.properties_panel_open = self.message_handlers.portfolio_message_handler.properties_panel_open; + menu_bar_message_handler.message_logging_verbosity = self.message_handlers.debug_message_handler.message_logging_verbosity; + menu_bar_message_handler.reset_node_definitions_on_open = self.message_handlers.portfolio_message_handler.reset_node_definitions_on_open; + + if let Some(document) = self + .message_handlers + .portfolio_message_handler + .active_document_id + .and_then(|document_id| self.message_handlers.portfolio_message_handler.documents.get_mut(&document_id)) + { + let selected_nodes = document.network_interface.selected_nodes(); + let metadata = &document.network_interface.document_network_metadata().persistent_metadata; + + menu_bar_message_handler.has_active_document = true; + menu_bar_message_handler.canvas_tilted = document.document_ptz.tilt() != 0.; + menu_bar_message_handler.canvas_flipped = document.document_ptz.flip; + menu_bar_message_handler.rulers_visible = document.rulers_visible; + menu_bar_message_handler.node_graph_open = document.is_graph_overlay_open(); + menu_bar_message_handler.has_selected_nodes = selected_nodes.selected_nodes().next().is_some(); + menu_bar_message_handler.has_selected_layers = selected_nodes.selected_visible_layers(&document.network_interface).next().is_some(); + menu_bar_message_handler.has_selection_history = (!metadata.selection_undo_history.is_empty(), !metadata.selection_redo_history.is_empty()); + menu_bar_message_handler.make_path_editable_is_allowed = make_path_editable_is_allowed(&mut document.network_interface).is_some(); + } else { + menu_bar_message_handler.has_active_document = false; + menu_bar_message_handler.canvas_tilted = false; + menu_bar_message_handler.canvas_flipped = false; + menu_bar_message_handler.rulers_visible = false; + menu_bar_message_handler.node_graph_open = false; + menu_bar_message_handler.has_selected_nodes = false; + menu_bar_message_handler.has_selected_layers = false; + menu_bar_message_handler.has_selection_history = (false, false); + menu_bar_message_handler.make_path_editable_is_allowed = false; + } + + menu_bar_message_handler.process_message(message, &mut queue, ()); + } Message::Preferences(message) => { self.message_handlers.preferences_message_handler.process_message(message, &mut queue, ()); } diff --git a/editor/src/messages/portfolio/menu_bar/menu_bar_message.rs b/editor/src/messages/menu_bar/menu_bar_message.rs similarity index 76% rename from editor/src/messages/portfolio/menu_bar/menu_bar_message.rs rename to editor/src/messages/menu_bar/menu_bar_message.rs index f4f19c0a9..6a1525d38 100644 --- a/editor/src/messages/portfolio/menu_bar/menu_bar_message.rs +++ b/editor/src/messages/menu_bar/menu_bar_message.rs @@ -1,6 +1,6 @@ use crate::messages::prelude::*; -#[impl_message(Message, PortfolioMessage, MenuBar)] +#[impl_message(Message, MenuBar)] #[derive(PartialEq, Eq, Clone, Debug, Hash, serde::Serialize, serde::Deserialize)] pub enum MenuBarMessage { // Messages diff --git a/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs b/editor/src/messages/menu_bar/menu_bar_message_handler.rs similarity index 100% rename from editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs rename to editor/src/messages/menu_bar/menu_bar_message_handler.rs diff --git a/editor/src/messages/portfolio/menu_bar/mod.rs b/editor/src/messages/menu_bar/mod.rs similarity index 100% rename from editor/src/messages/portfolio/menu_bar/mod.rs rename to editor/src/messages/menu_bar/mod.rs diff --git a/editor/src/messages/message.rs b/editor/src/messages/message.rs index 22e6eff0c..a56163426 100644 --- a/editor/src/messages/message.rs +++ b/editor/src/messages/message.rs @@ -28,6 +28,8 @@ pub enum Message { #[child] Layout(LayoutMessage), #[child] + MenuBar(MenuBarMessage), + #[child] Portfolio(PortfolioMessage), #[child] Preferences(PreferencesMessage), diff --git a/editor/src/messages/mod.rs b/editor/src/messages/mod.rs index ff662a1a7..a6430e969 100644 --- a/editor/src/messages/mod.rs +++ b/editor/src/messages/mod.rs @@ -11,6 +11,7 @@ pub mod globals; pub mod input_mapper; pub mod input_preprocessor; pub mod layout; +pub mod menu_bar; pub mod message; pub mod portfolio; pub mod preferences; diff --git a/editor/src/messages/portfolio/mod.rs b/editor/src/messages/portfolio/mod.rs index e9673220a..3c9d53e22 100644 --- a/editor/src/messages/portfolio/mod.rs +++ b/editor/src/messages/portfolio/mod.rs @@ -3,7 +3,6 @@ mod portfolio_message_handler; pub mod document; pub mod document_migration; -pub mod menu_bar; pub mod utility_types; #[doc(inline)] diff --git a/editor/src/messages/portfolio/portfolio_message.rs b/editor/src/messages/portfolio/portfolio_message.rs index b08de4830..42d9db99d 100644 --- a/editor/src/messages/portfolio/portfolio_message.rs +++ b/editor/src/messages/portfolio/portfolio_message.rs @@ -13,8 +13,6 @@ use std::path::PathBuf; pub enum PortfolioMessage { // Sub-messages #[child] - MenuBar(MenuBarMessage), - #[child] Document(DocumentMessage), // Messages diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 81168e2a2..d1a088ba9 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -4,7 +4,6 @@ use super::utility_types::{PanelType, PersistentData}; use crate::application::generate_uuid; use crate::consts::{DEFAULT_DOCUMENT_NAME, DEFAULT_STROKE_WIDTH, FILE_EXTENSION}; use crate::messages::animation::TimingInformation; -use crate::messages::debug::utility_types::MessageLoggingVerbosity; use crate::messages::dialog::simple_dialogs; use crate::messages::frontend::utility_types::{DocumentDetails, OpenDocument}; use crate::messages::input_mapper::utility_types::input_keyboard::Key; @@ -21,7 +20,6 @@ use crate::messages::portfolio::document_migration::*; use crate::messages::preferences::SelectionMode; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils; -use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed; use crate::messages::tool::utility_types::{HintData, ToolType}; use crate::messages::viewport::ToPhysical; use crate::node_graph_executor::{ExportConfig, NodeGraphExecutor}; @@ -42,7 +40,6 @@ pub struct PortfolioMessageContext<'a> { pub preferences: &'a PreferencesMessageHandler, pub animation: &'a AnimationMessageHandler, pub current_tool: &'a ToolType, - pub message_logging_verbosity: MessageLoggingVerbosity, pub reset_node_definitions_on_open: bool, pub timing_information: TimingInformation, pub viewport: &'a ViewportMessageHandler, @@ -51,7 +48,6 @@ pub struct PortfolioMessageContext<'a> { #[derive(Debug, Derivative, ExtractField)] #[derivative(Default)] pub struct PortfolioMessageHandler { - menu_bar_message_handler: MenuBarMessageHandler, pub documents: HashMap, document_ids: VecDeque, active_panel: PanelType, @@ -76,7 +72,6 @@ impl MessageHandler> for Portfolio preferences, animation, current_tool, - message_logging_verbosity, reset_node_definitions_on_open, timing_information, viewport, @@ -84,40 +79,6 @@ impl MessageHandler> for Portfolio match message { // Sub-messages - PortfolioMessage::MenuBar(message) => { - self.menu_bar_message_handler.has_active_document = false; - self.menu_bar_message_handler.canvas_tilted = false; - self.menu_bar_message_handler.canvas_flipped = false; - self.menu_bar_message_handler.rulers_visible = false; - self.menu_bar_message_handler.node_graph_open = false; - self.menu_bar_message_handler.has_selected_nodes = false; - self.menu_bar_message_handler.has_selected_layers = false; - self.menu_bar_message_handler.has_selection_history = (false, false); - self.menu_bar_message_handler.make_path_editable_is_allowed = false; - self.menu_bar_message_handler.data_panel_open = self.data_panel_open; - self.menu_bar_message_handler.layers_panel_open = self.layers_panel_open; - self.menu_bar_message_handler.properties_panel_open = self.properties_panel_open; - self.menu_bar_message_handler.message_logging_verbosity = message_logging_verbosity; - self.menu_bar_message_handler.reset_node_definitions_on_open = reset_node_definitions_on_open; - - if let Some(document) = self.active_document_id.and_then(|document_id| self.documents.get_mut(&document_id)) { - self.menu_bar_message_handler.has_active_document = true; - self.menu_bar_message_handler.canvas_tilted = document.document_ptz.tilt() != 0.; - self.menu_bar_message_handler.canvas_flipped = document.document_ptz.flip; - self.menu_bar_message_handler.rulers_visible = document.rulers_visible; - self.menu_bar_message_handler.node_graph_open = document.is_graph_overlay_open(); - let selected_nodes = document.network_interface.selected_nodes(); - self.menu_bar_message_handler.has_selected_nodes = selected_nodes.selected_nodes().next().is_some(); - self.menu_bar_message_handler.has_selected_layers = selected_nodes.selected_visible_layers(&document.network_interface).next().is_some(); - self.menu_bar_message_handler.has_selection_history = { - let metadata = &document.network_interface.document_network_metadata().persistent_metadata; - (!metadata.selection_undo_history.is_empty(), !metadata.selection_redo_history.is_empty()) - }; - self.menu_bar_message_handler.make_path_editable_is_allowed = make_path_editable_is_allowed(&mut document.network_interface).is_some(); - } - - self.menu_bar_message_handler.process_message(message, responses, ()); - } PortfolioMessage::Document(message) => { if let Some(document_id) = self.active_document_id && let Some(document) = self.documents.get_mut(&document_id) diff --git a/editor/src/messages/prelude.rs b/editor/src/messages/prelude.rs index d71c6a26f..871334cd3 100644 --- a/editor/src/messages/prelude.rs +++ b/editor/src/messages/prelude.rs @@ -19,6 +19,7 @@ pub use crate::messages::input_mapper::key_mapping::{KeyMappingMessage, KeyMappi pub use crate::messages::input_mapper::{InputMapperMessage, InputMapperMessageContext, InputMapperMessageDiscriminant, InputMapperMessageHandler}; pub use crate::messages::input_preprocessor::{InputPreprocessorMessage, InputPreprocessorMessageContext, InputPreprocessorMessageDiscriminant, InputPreprocessorMessageHandler}; pub use crate::messages::layout::{LayoutMessage, LayoutMessageDiscriminant, LayoutMessageHandler}; +pub use crate::messages::menu_bar::{MenuBarMessage, MenuBarMessageDiscriminant, MenuBarMessageHandler}; pub use crate::messages::portfolio::document::data_panel::{DataPanelMessage, DataPanelMessageDiscriminant}; pub use crate::messages::portfolio::document::graph_operation::{GraphOperationMessage, GraphOperationMessageContext, GraphOperationMessageDiscriminant, GraphOperationMessageHandler}; pub use crate::messages::portfolio::document::navigation::{NavigationMessage, NavigationMessageContext, NavigationMessageDiscriminant, NavigationMessageHandler}; @@ -26,7 +27,6 @@ pub use crate::messages::portfolio::document::node_graph::{NodeGraphMessage, Nod pub use crate::messages::portfolio::document::overlays::{OverlaysMessage, OverlaysMessageContext, OverlaysMessageDiscriminant, OverlaysMessageHandler}; pub use crate::messages::portfolio::document::properties_panel::{PropertiesPanelMessage, PropertiesPanelMessageDiscriminant, PropertiesPanelMessageHandler}; pub use crate::messages::portfolio::document::{DocumentMessage, DocumentMessageContext, DocumentMessageDiscriminant, DocumentMessageHandler}; -pub use crate::messages::portfolio::menu_bar::{MenuBarMessage, MenuBarMessageDiscriminant, MenuBarMessageHandler}; pub use crate::messages::portfolio::{PortfolioMessage, PortfolioMessageContext, PortfolioMessageDiscriminant, PortfolioMessageHandler}; pub use crate::messages::preferences::{PreferencesMessage, PreferencesMessageDiscriminant, PreferencesMessageHandler}; pub use crate::messages::tool::transform_layer::{TransformLayerMessage, TransformLayerMessageDiscriminant, TransformLayerMessageHandler};