Clean up MenuList types and fix many Vue and Clippy warnings

Also remove hard-coded-in-Vue Graphite logo in the menu bar in favor of a Rust definition.
This commit is contained in:
Keavon Chambers
2022-08-25 14:41:16 -07:00
parent 1a90a4db86
commit 3a84de32ac
27 changed files with 361 additions and 374 deletions
@@ -47,6 +47,7 @@ impl LayerMetadata {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct LayerPanelEntry {
pub name: String,
pub tooltip: String,
pub visible: bool,
#[serde(rename = "layerType")]
pub layer_type: LayerDataTypeDiscriminant,
@@ -59,9 +60,16 @@ pub struct LayerPanelEntry {
impl LayerPanelEntry {
pub fn new(layer_metadata: &LayerMetadata, transform: DAffine2, layer: &Layer, path: Vec<LayerId>, font_cache: &FontCache) -> Self {
let name = layer.name.clone().unwrap_or_else(|| String::from(""));
let tooltip = if cfg!(debug_assertions) {
let joined = &path.iter().map(|id| id.to_string()).collect::<Vec<_>>().join(" / ");
name.clone() + "\nLayer Path: " + joined.as_str()
} else {
name.clone()
};
let arr = layer.data.bounding_box(transform, font_cache).unwrap_or([DVec2::ZERO, DVec2::ZERO]);
let arr = arr.iter().map(|x| (*x).into()).collect::<Vec<(f64, f64)>>();
let mut thumbnail = String::new();
let mut svg_defs = String::new();
let render_data = RenderData::new(ViewMode::Normal, font_cache, None, false);
@@ -84,6 +92,7 @@ impl LayerPanelEntry {
LayerPanelEntry {
name,
tooltip,
visible: layer.visible,
layer_type: (&layer.data).into(),
layer_metadata: *layer_metadata,
@@ -1,7 +1,7 @@
use crate::messages::input_mapper::utility_types::macros::action_keys;
use crate::messages::layout::utility_types::layout_widget::{Layout, PropertyHolder};
use crate::messages::layout::utility_types::misc::LayoutTarget;
use crate::messages::layout::utility_types::widgets::menu_widgets::{MenuColumn, MenuEntry, MenuEntryGroups, MenuLayout};
use crate::messages::layout::utility_types::widgets::menu_widgets::{MenuBarEntry, MenuBarEntryChildren, MenuLayout};
use crate::messages::portfolio::document::utility_types::clipboards::Clipboard;
use crate::messages::prelude::*;
@@ -27,295 +27,300 @@ impl MessageHandler<MenuBarMessage, ()> for MenuBarMessageHandler {
impl PropertyHolder for MenuBarMessageHandler {
fn properties(&self) -> Layout {
Layout::MenuLayout(MenuLayout::new(vec![
MenuColumn {
label: "File".into(),
children: MenuEntryGroups(vec![
MenuBarEntry {
icon: Some("GraphiteLogo".into()),
action: MenuBarEntry::create_action(|_| FrontendMessage::TriggerVisitLink { url: "https://graphite.rs".into() }.into()),
..Default::default()
},
MenuBarEntry::new_root(
"File".into(),
MenuBarEntryChildren(vec![
vec![
MenuEntry {
MenuBarEntry {
label: "New…".into(),
icon: Some("File".into()),
action: MenuEntry::create_action(|_| DialogMessage::RequestNewDocumentDialog.into()),
action: MenuBarEntry::create_action(|_| DialogMessage::RequestNewDocumentDialog.into()),
shortcut: action_keys!(DialogMessageDiscriminant::RequestNewDocumentDialog),
children: MenuEntryGroups::empty(),
children: MenuBarEntryChildren::empty(),
},
MenuEntry {
MenuBarEntry {
label: "Open…".into(),
shortcut: action_keys!(PortfolioMessageDiscriminant::OpenDocument),
action: MenuEntry::create_action(|_| PortfolioMessage::OpenDocument.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| PortfolioMessage::OpenDocument.into()),
..MenuBarEntry::default()
},
],
vec![
MenuEntry {
MenuBarEntry {
label: "Close".into(),
shortcut: action_keys!(PortfolioMessageDiscriminant::CloseActiveDocumentWithConfirmation),
action: MenuEntry::create_action(|_| PortfolioMessage::CloseActiveDocumentWithConfirmation.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| PortfolioMessage::CloseActiveDocumentWithConfirmation.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Close All".into(),
shortcut: action_keys!(DialogMessageDiscriminant::CloseAllDocumentsWithConfirmation),
action: MenuEntry::create_action(|_| DialogMessage::CloseAllDocumentsWithConfirmation.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DialogMessage::CloseAllDocumentsWithConfirmation.into()),
..MenuBarEntry::default()
},
],
vec![MenuEntry {
vec![MenuBarEntry {
label: "Save".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SaveDocument),
action: MenuEntry::create_action(|_| DocumentMessage::SaveDocument.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SaveDocument.into()),
..MenuBarEntry::default()
}],
vec![
MenuEntry {
MenuBarEntry {
label: "Import…".into(),
shortcut: action_keys!(PortfolioMessageDiscriminant::Import),
action: MenuEntry::create_action(|_| PortfolioMessage::Import.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| PortfolioMessage::Import.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Export…".into(),
shortcut: action_keys!(DialogMessageDiscriminant::RequestExportDialog),
action: MenuEntry::create_action(|_| DialogMessage::RequestExportDialog.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DialogMessage::RequestExportDialog.into()),
..MenuBarEntry::default()
},
],
]),
},
MenuColumn {
label: "Edit".into(),
children: MenuEntryGroups(vec![
),
MenuBarEntry::new_root(
"Edit".into(),
MenuBarEntryChildren(vec![
vec![
MenuEntry {
MenuBarEntry {
label: "Undo".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::Undo),
action: MenuEntry::create_action(|_| DocumentMessage::Undo.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::Undo.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Redo".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::Redo),
action: MenuEntry::create_action(|_| DocumentMessage::Redo.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::Redo.into()),
..MenuBarEntry::default()
},
],
vec![
MenuEntry {
MenuBarEntry {
label: "Cut".into(),
shortcut: action_keys!(PortfolioMessageDiscriminant::Cut),
action: MenuEntry::create_action(|_| PortfolioMessage::Cut { clipboard: Clipboard::Device }.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| PortfolioMessage::Cut { clipboard: Clipboard::Device }.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Copy".into(),
icon: Some("Copy".into()),
shortcut: action_keys!(PortfolioMessageDiscriminant::Copy),
action: MenuEntry::create_action(|_| PortfolioMessage::Copy { clipboard: Clipboard::Device }.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| PortfolioMessage::Copy { clipboard: Clipboard::Device }.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Paste".into(),
icon: Some("Paste".into()),
shortcut: action_keys!(FrontendMessageDiscriminant::TriggerPaste),
action: MenuEntry::create_action(|_| FrontendMessage::TriggerPaste.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| FrontendMessage::TriggerPaste.into()),
..MenuBarEntry::default()
},
],
]),
},
MenuColumn {
label: "Layer".into(),
children: MenuEntryGroups(vec![
),
MenuBarEntry::new_root(
"Layer".into(),
MenuBarEntryChildren(vec![
vec![
MenuEntry {
MenuBarEntry {
label: "Select All".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SelectAllLayers),
action: MenuEntry::create_action(|_| DocumentMessage::SelectAllLayers.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectAllLayers.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Deselect All".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::DeselectAllLayers),
action: MenuEntry::create_action(|_| DocumentMessage::DeselectAllLayers.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::DeselectAllLayers.into()),
..MenuBarEntry::default()
},
],
vec![MenuEntry {
vec![MenuBarEntry {
label: "Delete Selected".into(),
icon: Some("Trash".into()),
shortcut: action_keys!(DocumentMessageDiscriminant::DeleteSelectedLayers),
action: MenuEntry::create_action(|_| DocumentMessage::DeleteSelectedLayers.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::DeleteSelectedLayers.into()),
..MenuBarEntry::default()
}],
vec![
MenuEntry {
MenuBarEntry {
label: "Grab Selected".into(),
shortcut: action_keys!(TransformLayerMessageDiscriminant::BeginGrab),
action: MenuEntry::create_action(|_| TransformLayerMessage::BeginGrab.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| TransformLayerMessage::BeginGrab.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Rotate Selected".into(),
shortcut: action_keys!(TransformLayerMessageDiscriminant::BeginRotate),
action: MenuEntry::create_action(|_| TransformLayerMessage::BeginRotate.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| TransformLayerMessage::BeginRotate.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Scale Selected".into(),
shortcut: action_keys!(TransformLayerMessageDiscriminant::BeginScale),
action: MenuEntry::create_action(|_| TransformLayerMessage::BeginScale.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| TransformLayerMessage::BeginScale.into()),
..MenuBarEntry::default()
},
],
vec![MenuEntry {
vec![MenuBarEntry {
label: "Order".into(),
action: MenuEntry::no_action(),
children: MenuEntryGroups(vec![vec![
MenuEntry {
action: MenuBarEntry::no_action(),
children: MenuBarEntryChildren(vec![vec![
MenuBarEntry {
label: "Raise To Front".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SelectedLayersRaiseToFront),
action: MenuEntry::create_action(|_| DocumentMessage::SelectedLayersRaiseToFront.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectedLayersRaiseToFront.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Raise".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SelectedLayersRaise),
action: MenuEntry::create_action(|_| DocumentMessage::SelectedLayersRaise.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectedLayersRaise.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Lower".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SelectedLayersLower),
action: MenuEntry::create_action(|_| DocumentMessage::SelectedLayersLower.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectedLayersLower.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Lower to Back".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::SelectedLayersLowerToBack),
action: MenuEntry::create_action(|_| DocumentMessage::SelectedLayersLowerToBack.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectedLayersLowerToBack.into()),
..MenuBarEntry::default()
},
]]),
..MenuEntry::default()
..MenuBarEntry::default()
}],
]),
},
MenuColumn {
label: "Document".into(),
children: MenuEntryGroups(vec![vec![MenuEntry {
),
MenuBarEntry::new_root(
"Document".into(),
MenuBarEntryChildren(vec![vec![MenuBarEntry {
label: "Clear Artboards".into(),
action: MenuEntry::create_action(|_| ArtboardMessage::ClearArtboards.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| ArtboardMessage::ClearArtboards.into()),
..MenuBarEntry::default()
}]]),
},
MenuColumn {
label: "View".into(),
children: MenuEntryGroups(vec![
),
MenuBarEntry::new_root(
"View".into(),
MenuBarEntryChildren(vec![
vec![
MenuEntry {
MenuBarEntry {
label: "Zoom to Fit".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::ZoomCanvasToFitAll),
action: MenuEntry::create_action(|_| DocumentMessage::ZoomCanvasToFitAll.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::ZoomCanvasToFitAll.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Zoom to 100%".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::ZoomCanvasTo100Percent),
action: MenuEntry::create_action(|_| DocumentMessage::ZoomCanvasTo100Percent.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::ZoomCanvasTo100Percent.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Zoom to 200%".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::ZoomCanvasTo200Percent),
action: MenuEntry::create_action(|_| DocumentMessage::ZoomCanvasTo200Percent.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::ZoomCanvasTo200Percent.into()),
..MenuBarEntry::default()
},
],
vec![MenuEntry {
vec![MenuBarEntry {
label: "Node Graph (In Development)".into(),
action: MenuEntry::create_action(|_| WorkspaceMessage::NodeGraphToggleVisibility.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| WorkspaceMessage::NodeGraphToggleVisibility.into()),
..MenuBarEntry::default()
}],
]),
},
MenuColumn {
label: "Help".into(),
children: MenuEntryGroups(vec![
vec![MenuEntry {
),
MenuBarEntry::new_root(
"Help".into(),
MenuBarEntryChildren(vec![
vec![MenuBarEntry {
label: "About Graphite".into(),
icon: Some("GraphiteLogo".into()),
action: MenuEntry::create_action(|_| DialogMessage::RequestAboutGraphiteDialog.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DialogMessage::RequestAboutGraphiteDialog.into()),
..MenuBarEntry::default()
}],
vec![
MenuEntry {
MenuBarEntry {
label: "Report a Bug".into(),
action: MenuEntry::create_action(|_| {
action: MenuBarEntry::create_action(|_| {
FrontendMessage::TriggerVisitLink {
url: "https://github.com/GraphiteEditor/Graphite/issues/new".into(),
}
.into()
}),
..MenuEntry::default()
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Visit on GitHub".into(),
action: MenuEntry::create_action(|_| {
action: MenuBarEntry::create_action(|_| {
FrontendMessage::TriggerVisitLink {
url: "https://github.com/GraphiteEditor/Graphite".into(),
}
.into()
}),
..MenuEntry::default()
..MenuBarEntry::default()
},
],
vec![
MenuEntry {
MenuBarEntry {
label: "Debug: Print Messages".into(),
action: MenuEntry::no_action(),
children: MenuEntryGroups(vec![vec![
MenuEntry {
action: MenuBarEntry::no_action(),
children: MenuBarEntryChildren(vec![vec![
MenuBarEntry {
label: "Off".into(),
// icon: Some("Checkmark".into()), // TODO: Find a way to set this icon on the active mode
shortcut: action_keys!(DebugMessageDiscriminant::MessageOff),
action: MenuEntry::create_action(|_| DebugMessage::MessageOff.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DebugMessage::MessageOff.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Only Names".into(),
shortcut: action_keys!(DebugMessageDiscriminant::MessageNames),
action: MenuEntry::create_action(|_| DebugMessage::MessageNames.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DebugMessage::MessageNames.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Full Contents".into(),
shortcut: action_keys!(DebugMessageDiscriminant::MessageContents),
action: MenuEntry::create_action(|_| DebugMessage::MessageContents.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DebugMessage::MessageContents.into()),
..MenuBarEntry::default()
},
]]),
..MenuEntry::default()
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Debug: Print Trace Logs".into(),
icon: Some(if let log::LevelFilter::Trace = log::max_level() { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()),
shortcut: action_keys!(DebugMessageDiscriminant::ToggleTraceLogs),
action: MenuEntry::create_action(|_| DebugMessage::ToggleTraceLogs.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DebugMessage::ToggleTraceLogs.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Debug: Print Document".into(),
shortcut: action_keys!(DocumentMessageDiscriminant::DebugPrintDocument),
action: MenuEntry::create_action(|_| DocumentMessage::DebugPrintDocument.into()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| DocumentMessage::DebugPrintDocument.into()),
..MenuBarEntry::default()
},
MenuEntry {
MenuBarEntry {
label: "Debug: Panic (DANGER)".into(),
action: MenuEntry::create_action(|_| panic!()),
..MenuEntry::default()
action: MenuBarEntry::create_action(|_| panic!()),
..MenuBarEntry::default()
},
],
]),
},
),
]))
}
}