use crate::frontend::layer_panel::LayerPanelEntry; use crate::message_prelude::*; use crate::Color; use serde::{Deserialize, Serialize}; pub type Callback = Box; #[impl_message(Message, Frontend)] #[derive(PartialEq, Clone, Deserialize, Serialize, Debug)] pub enum FrontendMessage { CollapseFolder { path: Vec }, ExpandFolder { path: Vec, children: Vec }, SetActiveTool { tool_name: String }, SetActiveDocument { document_index: usize }, UpdateOpenDocumentsList { open_documents: Vec }, DisplayError { description: String }, DisplayConfirmationToCloseDocument { document_index: usize }, DisplayConfirmationToCloseAllDocuments, UpdateCanvas { document: String }, UpdateLayer { path: Vec, data: LayerPanelEntry }, ExportDocument { document: String, name: String }, SaveDocument { document: String, name: String }, OpenDocumentBrowse, EnableTextInput, DisableTextInput, UpdateWorkingColors { primary: Color, secondary: Color }, SetCanvasZoom { new_zoom: f64 }, SetCanvasRotation { new_radians: f64 }, } pub struct FrontendMessageHandler { callback: crate::Callback, } impl FrontendMessageHandler { pub fn new(callback: Callback) -> Self { Self { callback } } } impl MessageHandler for FrontendMessageHandler { fn process_action(&mut self, message: FrontendMessage, _data: (), _responses: &mut VecDeque) { (self.callback)(message) } advertise_actions!( FrontendMessageDiscriminant; DisplayError, CollapseFolder, ExpandFolder, SetActiveTool, UpdateCanvas, EnableTextInput, DisableTextInput, SetCanvasZoom, SetCanvasRotation, OpenDocumentBrowse, ); }