From 9224ed9ec6a6be8d378aa8508d50b34471216a73 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Tue, 28 Nov 2023 04:50:38 -0800 Subject: [PATCH] Fix missing menu bar from prev commit; fix menu bar items not graying out after closing all docs --- .../menu_bar/menu_bar_message_handler.rs | 18 +++++++++++------- .../portfolio/portfolio_message_handler.rs | 14 ++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs b/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs index 083f35a1..11135b1c 100644 --- a/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs +++ b/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs @@ -5,16 +5,18 @@ use crate::messages::prelude::*; #[derive(Debug, Clone, Default)] pub struct MenuBarMessageHandler { - no_active_document: bool, - rulers_hidden: bool, + has_active_document: bool, + rulers_visible: bool, } impl MessageHandler for MenuBarMessageHandler { #[remain::check] - fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque, (has_active_document, rulers_hidden): (bool, bool)) { + fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque, (has_active_document, rulers_visible): (bool, bool)) { use MenuBarMessage::*; - self.no_active_document = !has_active_document; - self.rulers_hidden = rulers_hidden; + + self.has_active_document = has_active_document; + self.rulers_visible = rulers_visible; + #[remain::sorted] match message { SendLayout => self.send_layout(responses, LayoutTarget::MenuBar), @@ -28,7 +30,8 @@ impl MessageHandler for MenuBarMessageHandler { impl LayoutHolder for MenuBarMessageHandler { fn layout(&self) -> Layout { - let no_active_document = self.no_active_document; + let no_active_document = !self.has_active_document; + let menu_bar_entries = vec![ MenuBarEntry { icon: Some("GraphiteLogo".into()), @@ -90,6 +93,7 @@ impl LayoutHolder for MenuBarMessageHandler { label: "Import…".into(), shortcut: action_keys!(PortfolioMessageDiscriminant::Import), action: MenuBarEntry::create_action(|_| PortfolioMessage::Import.into()), + disabled: no_active_document, // TODO: Allow importing an image (or dragging it in, or pasting) without an active document to create a new one with an artboards of the image's size (issue #1140) ..MenuBarEntry::default() }, MenuBarEntry { @@ -323,7 +327,7 @@ impl LayoutHolder for MenuBarMessageHandler { ], vec![MenuBarEntry { label: "Rulers".into(), - icon: Some(if self.rulers_hidden { "CheckboxUnchecked" } else { "CheckboxChecked" }.into()), + icon: Some(if self.rulers_visible { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()), shortcut: action_keys!(PortfolioMessageDiscriminant::ToggleRulers), action: MenuBarEntry::create_action(|_| PortfolioMessage::ToggleRulers.into()), disabled: no_active_document, diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index e3df517d..44393ad8 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -32,18 +32,20 @@ pub struct PortfolioMessageHandler { impl MessageHandler for PortfolioMessageHandler { #[remain::check] fn process_message(&mut self, message: PortfolioMessage, responses: &mut VecDeque, (ipp, preferences): (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)) { - let has_active_document = self.active_document_id.is_some(); - #[remain::sorted] match message { // Sub-messages #[remain::unsorted] PortfolioMessage::MenuBar(message) => { - if let Some(document_id) = self.active_document_id { - if let Some(document) = self.documents.get_mut(&document_id) { - self.menu_bar_message_handler.process_message(message, responses, (has_active_document, document.rulers_visible)); - } + let mut has_active_document = false; + let mut rulers_visible = false; + + if let Some(document) = self.active_document_id.and_then(|document_id| self.documents.get_mut(&document_id)) { + has_active_document = true; + rulers_visible = document.rulers_visible; } + + self.menu_bar_message_handler.process_message(message, responses, (has_active_document, rulers_visible)); } #[remain::unsorted] PortfolioMessage::Document(message) => {