mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-01 16:28:11 +08:00
Fix missing menu bar from prev commit; fix menu bar items not graying out after closing all docs
This commit is contained in:
@@ -5,16 +5,18 @@ use crate::messages::prelude::*;
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Default)]
|
#[derive(Debug, Clone, Default)]
|
||||||
pub struct MenuBarMessageHandler {
|
pub struct MenuBarMessageHandler {
|
||||||
no_active_document: bool,
|
has_active_document: bool,
|
||||||
rulers_hidden: bool,
|
rulers_visible: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageHandler<MenuBarMessage, (bool, bool)> for MenuBarMessageHandler {
|
impl MessageHandler<MenuBarMessage, (bool, bool)> for MenuBarMessageHandler {
|
||||||
#[remain::check]
|
#[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::*;
|
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]
|
#[remain::sorted]
|
||||||
match message {
|
match message {
|
||||||
SendLayout => self.send_layout(responses, LayoutTarget::MenuBar),
|
SendLayout => self.send_layout(responses, LayoutTarget::MenuBar),
|
||||||
@@ -28,7 +30,8 @@ impl MessageHandler<MenuBarMessage, (bool, bool)> for MenuBarMessageHandler {
|
|||||||
|
|
||||||
impl LayoutHolder for MenuBarMessageHandler {
|
impl LayoutHolder for MenuBarMessageHandler {
|
||||||
fn layout(&self) -> Layout {
|
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![
|
let menu_bar_entries = vec![
|
||||||
MenuBarEntry {
|
MenuBarEntry {
|
||||||
icon: Some("GraphiteLogo".into()),
|
icon: Some("GraphiteLogo".into()),
|
||||||
@@ -90,6 +93,7 @@ impl LayoutHolder for MenuBarMessageHandler {
|
|||||||
label: "Import…".into(),
|
label: "Import…".into(),
|
||||||
shortcut: action_keys!(PortfolioMessageDiscriminant::Import),
|
shortcut: action_keys!(PortfolioMessageDiscriminant::Import),
|
||||||
action: MenuBarEntry::create_action(|_| PortfolioMessage::Import.into()),
|
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::default()
|
||||||
},
|
},
|
||||||
MenuBarEntry {
|
MenuBarEntry {
|
||||||
@@ -323,7 +327,7 @@ impl LayoutHolder for MenuBarMessageHandler {
|
|||||||
],
|
],
|
||||||
vec![MenuBarEntry {
|
vec![MenuBarEntry {
|
||||||
label: "Rulers".into(),
|
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),
|
shortcut: action_keys!(PortfolioMessageDiscriminant::ToggleRulers),
|
||||||
action: MenuBarEntry::create_action(|_| PortfolioMessage::ToggleRulers.into()),
|
action: MenuBarEntry::create_action(|_| PortfolioMessage::ToggleRulers.into()),
|
||||||
disabled: no_active_document,
|
disabled: no_active_document,
|
||||||
|
|||||||
@@ -32,18 +32,20 @@ pub struct PortfolioMessageHandler {
|
|||||||
impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)> for PortfolioMessageHandler {
|
impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)> for PortfolioMessageHandler {
|
||||||
#[remain::check]
|
#[remain::check]
|
||||||
fn process_message(&mut self, message: PortfolioMessage, responses: &mut VecDeque<Message>, (ipp, preferences): (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)) {
|
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]
|
#[remain::sorted]
|
||||||
match message {
|
match message {
|
||||||
// Sub-messages
|
// Sub-messages
|
||||||
#[remain::unsorted]
|
#[remain::unsorted]
|
||||||
PortfolioMessage::MenuBar(message) => {
|
PortfolioMessage::MenuBar(message) => {
|
||||||
if let Some(document_id) = self.active_document_id {
|
let mut has_active_document = false;
|
||||||
if let Some(document) = self.documents.get_mut(&document_id) {
|
let mut rulers_visible = false;
|
||||||
self.menu_bar_message_handler.process_message(message, responses, (has_active_document, document.rulers_visible));
|
|
||||||
}
|
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]
|
#[remain::unsorted]
|
||||||
PortfolioMessage::Document(message) => {
|
PortfolioMessage::Document(message) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user