106 lines
4.1 KiB
Rust
106 lines
4.1 KiB
Rust
use graphite_editor::messages::clipboard::utility_types::ClipboardContentRaw;
|
|
use graphite_editor::messages::prelude::*;
|
|
|
|
use super::DesktopWrapperMessageDispatcher;
|
|
use super::messages::{DesktopFrontendMessage, DesktopWrapperMessage, EditorMessage, OpenFileDialogContext, SaveFileDialogContext};
|
|
|
|
pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: DesktopWrapperMessage) {
|
|
match message {
|
|
DesktopWrapperMessage::FromWeb(message) => {
|
|
dispatcher.queue_editor_message(*message);
|
|
}
|
|
DesktopWrapperMessage::Input(message) => {
|
|
dispatcher.queue_editor_message(EditorMessage::InputPreprocessor(message));
|
|
}
|
|
DesktopWrapperMessage::FileDialogResult { path, content, context } => match context {
|
|
OpenFileDialogContext::Open => {
|
|
dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::OpenFile { path, content });
|
|
}
|
|
OpenFileDialogContext::Import => {
|
|
dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::ImportFile { path, content });
|
|
}
|
|
},
|
|
DesktopWrapperMessage::SaveFileDialogResult { path, context } => match context {
|
|
SaveFileDialogContext::Document { document_id, content } => {
|
|
dispatcher.respond(DesktopFrontendMessage::WriteFile { path: path.clone(), content });
|
|
dispatcher.queue_editor_message(EditorMessage::Portfolio(PortfolioMessage::DocumentPassMessage {
|
|
document_id,
|
|
message: DocumentMessage::SavedDocument { path: Some(path) },
|
|
}));
|
|
}
|
|
SaveFileDialogContext::File { content } => {
|
|
dispatcher.respond(DesktopFrontendMessage::WriteFile { path, content });
|
|
}
|
|
},
|
|
DesktopWrapperMessage::OpenFile { path, content } => {
|
|
let message = PortfolioMessage::OpenFile { path, content };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::ImportFile { path, content } => {
|
|
let message = PortfolioMessage::ImportFile { path, content };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::PollNodeGraphEvaluation => dispatcher.poll_node_graph_evaluation(),
|
|
DesktopWrapperMessage::UpdateMaximized { maximized } => {
|
|
let message = FrontendMessage::UpdateMaximized { maximized };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::UpdateFullscreen { fullscreen } => {
|
|
let message = FrontendMessage::UpdateFullscreen { fullscreen };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::LoadDocument {
|
|
id,
|
|
document,
|
|
to_front,
|
|
select_after_open,
|
|
} => {
|
|
let message = PortfolioMessage::OpenDocumentFileWithId {
|
|
document_id: id,
|
|
document_name: Some(document.name),
|
|
document_path: document.path,
|
|
document_serialized_content: document.content,
|
|
document_is_auto_saved: true,
|
|
document_is_saved: document.is_saved,
|
|
to_front,
|
|
select_after_open,
|
|
};
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::SelectDocument { id } => {
|
|
let message = PortfolioMessage::SelectDocument { document_id: id };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::LoadPreferences { preferences } => {
|
|
let message = PreferencesMessage::Load { preferences };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
#[cfg(target_os = "macos")]
|
|
DesktopWrapperMessage::MenuEvent { id } => {
|
|
if let Some(message) = crate::utils::menu::parse_item_path(id) {
|
|
dispatcher.queue_editor_message(message);
|
|
} else {
|
|
tracing::error!("Received a malformed MenuEvent id");
|
|
}
|
|
}
|
|
#[cfg(not(target_os = "macos"))]
|
|
DesktopWrapperMessage::MenuEvent { id: _ } => {}
|
|
DesktopWrapperMessage::ClipboardReadResult { content } => {
|
|
if let Some(content) = content {
|
|
let message = ClipboardMessage::ReadClipboard {
|
|
content: ClipboardContentRaw::Text(content),
|
|
};
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
}
|
|
DesktopWrapperMessage::PointerLockMove { x, y } => {
|
|
let message = AppWindowMessage::PointerLockMove { x, y };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
DesktopWrapperMessage::LoadThirdPartyLicenses { text } => {
|
|
let message = DialogMessage::RequestLicensesThirdPartyDialogWithLicenseText { license_text: text };
|
|
dispatcher.queue_editor_message(message);
|
|
}
|
|
}
|
|
}
|