mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-12-23 10:11:54 +00:00
Move the MenuBarMessage up from within PortfolioMessage to the root Message (#3459)
Move the MenuBarMessage up from within PortfolioMessage
This commit is contained in:
parent
532dc30028
commit
d6c06da878
10 changed files with 55 additions and 61 deletions
|
|
@ -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, ());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -28,6 +28,8 @@ pub enum Message {
|
|||
#[child]
|
||||
Layout(LayoutMessage),
|
||||
#[child]
|
||||
MenuBar(MenuBarMessage),
|
||||
#[child]
|
||||
Portfolio(PortfolioMessage),
|
||||
#[child]
|
||||
Preferences(PreferencesMessage),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)]
|
||||
|
|
|
|||
|
|
@ -13,8 +13,6 @@ use std::path::PathBuf;
|
|||
pub enum PortfolioMessage {
|
||||
// Sub-messages
|
||||
#[child]
|
||||
MenuBar(MenuBarMessage),
|
||||
#[child]
|
||||
Document(DocumentMessage),
|
||||
|
||||
// Messages
|
||||
|
|
|
|||
|
|
@ -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<DocumentId, DocumentMessageHandler>,
|
||||
document_ids: VecDeque<DocumentId>,
|
||||
active_panel: PanelType,
|
||||
|
|
@ -76,7 +72,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
|
|||
preferences,
|
||||
animation,
|
||||
current_tool,
|
||||
message_logging_verbosity,
|
||||
reset_node_definitions_on_open,
|
||||
timing_information,
|
||||
viewport,
|
||||
|
|
@ -84,40 +79,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> 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)
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue