Fix missing menu bar from prev commit; fix menu bar items not graying out after closing all docs
This commit is contained in:
parent
4fead6e7ec
commit
9224ed9ec6
|
|
@ -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<MenuBarMessage, (bool, bool)> for MenuBarMessageHandler {
|
||||
#[remain::check]
|
||||
fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque<Message>, (has_active_document, rulers_hidden): (bool, bool)) {
|
||||
fn process_message(&mut self, message: MenuBarMessage, responses: &mut VecDeque<Message>, (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<MenuBarMessage, (bool, bool)> 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,
|
||||
|
|
|
|||
|
|
@ -32,18 +32,20 @@ pub struct PortfolioMessageHandler {
|
|||
impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)> for PortfolioMessageHandler {
|
||||
#[remain::check]
|
||||
fn process_message(&mut self, message: PortfolioMessage, responses: &mut VecDeque<Message>, (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) => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue