use super::utility_types::{FrontendDocumentDetails, MouseCursorIcon}; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::utility_types::{ BoxSelection, ContextMenuInformation, FrontendClickTargets, FrontendGraphInput, FrontendGraphOutput, FrontendNode, FrontendNodeType, Transform, }; use crate::messages::portfolio::document::utility_types::nodes::{JsRawBuffer, LayerPanelEntry, RawBuffer}; use crate::messages::portfolio::document::utility_types::wires::{WirePath, WirePathUpdate}; use crate::messages::prelude::*; use crate::messages::tool::utility_types::HintData; use graph_craft::document::NodeId; use graphene_std::raster::color::Color; use graphene_std::text::Font; #[impl_message(Message, Frontend)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum FrontendMessage { // Display prefix: make the frontend show something, like a dialog DisplayDialog { title: String, icon: String, }, DisplayDialogDismiss, DisplayDialogPanic { #[serde(rename = "panicInfo")] panic_info: String, }, DisplayEditableTextbox { text: String, #[serde(rename = "lineHeightRatio")] line_height_ratio: f64, #[serde(rename = "fontSize")] font_size: f64, color: Color, url: String, transform: [f64; 6], #[serde(rename = "maxWidth")] max_width: Option, #[serde(rename = "maxHeight")] max_height: Option, }, DisplayEditableTextboxTransform { transform: [f64; 6], }, DisplayRemoveEditableTextbox, // Send prefix: Send global, static data to the frontend that is never updated SendUIMetadata { #[serde(rename = "nodeDescriptions")] node_descriptions: Vec<(String, String)>, #[serde(rename = "nodeTypes")] node_types: Vec, }, // Trigger prefix: cause a browser API to do something TriggerAboutGraphiteLocalizedCommitDate { #[serde(rename = "commitDate")] commit_date: String, }, TriggerDelayedZoomCanvasToFitAll, TriggerDownloadImage { svg: String, name: String, mime: String, size: (f64, f64), }, TriggerDownloadTextFile { document: String, name: String, }, TriggerFetchAndOpenDocument { name: String, filename: String, }, TriggerFontLoad { font: Font, }, TriggerImport, TriggerIndexedDbRemoveDocument { #[serde(rename = "documentId")] document_id: DocumentId, }, TriggerIndexedDbWriteDocument { document: String, details: FrontendDocumentDetails, }, TriggerLoadFirstAutoSaveDocument, TriggerLoadRestAutoSaveDocuments, TriggerLoadPreferences, TriggerOpenDocument, TriggerPaste, TriggerSavePreferences { preferences: PreferencesMessageHandler, }, TriggerSaveActiveDocument { #[serde(rename = "documentId")] document_id: DocumentId, }, TriggerTextCommit, TriggerTextCopy { #[serde(rename = "copyText")] copy_text: String, }, TriggerVisitLink { url: String, }, // Update prefix: give the frontend a new value or state for it to use UpdateActiveDocument { #[serde(rename = "documentId")] document_id: DocumentId, }, UpdateImportsExports { imports: Vec<(FrontendGraphOutput, i32, i32)>, exports: Vec<(FrontendGraphInput, i32, i32)>, #[serde(rename = "addImport")] add_import: Option<(i32, i32)>, #[serde(rename = "addExport")] add_export: Option<(i32, i32)>, }, UpdateInSelectedNetwork { #[serde(rename = "inSelectedNetwork")] in_selected_network: bool, }, UpdateBox { #[serde(rename = "box")] box_selection: Option, }, UpdateContextMenuInformation { #[serde(rename = "contextMenuInformation")] context_menu_information: Option, }, UpdateClickTargets { #[serde(rename = "clickTargets")] click_targets: Option, }, UpdateGraphViewOverlay { open: bool, }, UpdateSpreadsheetState { open: bool, node: Option, }, UpdateSpreadsheetLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateImportReorderIndex { #[serde(rename = "importIndex")] index: Option, }, UpdateExportReorderIndex { #[serde(rename = "exportIndex")] index: Option, }, UpdateLayerWidths { #[serde(rename = "layerWidths")] layer_widths: HashMap, #[serde(rename = "chainWidths")] chain_widths: HashMap, #[serde(rename = "hasLeftInputWire")] has_left_input_wire: HashMap, }, UpdateDialogButtons { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateDialogColumn1 { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateDialogColumn2 { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateDocumentArtwork { svg: String, }, UpdateDocumentBarLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateDocumentLayerDetails { data: LayerPanelEntry, }, UpdateDocumentLayerStructure { #[serde(rename = "dataBuffer")] data_buffer: RawBuffer, }, UpdateDocumentLayerStructureJs { #[serde(rename = "dataBuffer")] data_buffer: JsRawBuffer, }, UpdateDocumentModeLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateDocumentRulers { origin: (f64, f64), spacing: f64, interval: f64, visible: bool, }, UpdateDocumentScrollbars { position: (f64, f64), size: (f64, f64), multiplier: (f64, f64), }, UpdateEyedropperSamplingState { #[serde(rename = "mousePosition")] mouse_position: Option<(f64, f64)>, #[serde(rename = "primaryColor")] primary_color: String, #[serde(rename = "secondaryColor")] secondary_color: String, #[serde(rename = "setColorChoice")] set_color_choice: Option, }, UpdateGraphFadeArtwork { percentage: f64, }, UpdateInputHints { #[serde(rename = "hintData")] hint_data: HintData, }, UpdateLayersPanelControlBarLeftLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateLayersPanelControlBarRightLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateLayersPanelBottomBarLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateMenuBarLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, layout: Vec, }, UpdateMouseCursor { cursor: MouseCursorIcon, }, UpdateNodeGraphNodes { nodes: Vec, }, UpdateVisibleNodes { nodes: Vec, }, UpdateNodeGraphWires { wires: Vec, }, ClearAllNodeGraphWires, UpdateNodeGraphControlBarLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateNodeGraphSelection { selected: Vec, }, UpdateNodeGraphTransform { transform: Transform, }, UpdateNodeThumbnail { id: NodeId, value: String, }, UpdateOpenDocumentsList { #[serde(rename = "openDocuments")] open_documents: Vec, }, UpdatePropertyPanelSectionsLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateToolOptionsLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateToolShelfLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, UpdateWirePathInProgress { #[serde(rename = "wirePath")] wire_path: Option, }, UpdateWorkingColorsLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, }, }