Add cut, copy, and paste to the Edit menu (#440)
* Add cut * Hook up edit dropdown * Use copy message
This commit is contained in:
parent
fd1ddfc41e
commit
451c9fcd46
|
|
@ -23,6 +23,7 @@ static CLIPBOARD_COUNT: u8 = Clipboard::_ClipboardCount as u8;
|
||||||
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||||
pub enum DocumentsMessage {
|
pub enum DocumentsMessage {
|
||||||
Copy(Clipboard),
|
Copy(Clipboard),
|
||||||
|
Cut(Clipboard),
|
||||||
PasteIntoFolder {
|
PasteIntoFolder {
|
||||||
clipboard: Clipboard,
|
clipboard: Clipboard,
|
||||||
path: Vec<LayerId>,
|
path: Vec<LayerId>,
|
||||||
|
|
@ -352,6 +353,10 @@ impl MessageHandler<DocumentsMessage, &InputPreprocessor> for DocumentsMessageHa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Cut(clipboard) => {
|
||||||
|
responses.push_back(Copy(clipboard).into());
|
||||||
|
responses.push_back(DeleteSelectedLayers.into());
|
||||||
|
}
|
||||||
Paste(clipboard) => {
|
Paste(clipboard) => {
|
||||||
let document = self.active_document();
|
let document = self.active_document();
|
||||||
let shallowest_common_folder = document
|
let shallowest_common_folder = document
|
||||||
|
|
@ -407,6 +412,7 @@ impl MessageHandler<DocumentsMessage, &InputPreprocessor> for DocumentsMessageHa
|
||||||
if self.active_document().layer_data.values().any(|data| data.selected) {
|
if self.active_document().layer_data.values().any(|data| data.selected) {
|
||||||
let select = actions!(DocumentsMessageDiscriminant;
|
let select = actions!(DocumentsMessageDiscriminant;
|
||||||
Copy,
|
Copy,
|
||||||
|
Cut,
|
||||||
);
|
);
|
||||||
common.extend(select);
|
common.extend(select);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,7 @@ impl Default for Mapping {
|
||||||
entry! {action=DocumentsMessage::CloseActiveDocumentWithConfirmation, key_down=KeyW, modifiers=[KeyControl]},
|
entry! {action=DocumentsMessage::CloseActiveDocumentWithConfirmation, key_down=KeyW, modifiers=[KeyControl]},
|
||||||
entry! {action=DocumentMessage::DuplicateSelectedLayers, key_down=KeyD, modifiers=[KeyControl]},
|
entry! {action=DocumentMessage::DuplicateSelectedLayers, key_down=KeyD, modifiers=[KeyControl]},
|
||||||
entry! {action=DocumentsMessage::Copy(User), key_down=KeyC, modifiers=[KeyControl]},
|
entry! {action=DocumentsMessage::Copy(User), key_down=KeyC, modifiers=[KeyControl]},
|
||||||
|
entry! {action=DocumentsMessage::Cut(User), key_down=KeyX, modifiers=[KeyControl]},
|
||||||
entry! {action=DocumentMessage::GroupSelectedLayers, key_down=KeyG, modifiers=[KeyControl]},
|
entry! {action=DocumentMessage::GroupSelectedLayers, key_down=KeyG, modifiers=[KeyControl]},
|
||||||
// Nudging
|
// Nudging
|
||||||
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyShift, KeyArrowLeft]},
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyShift, KeyArrowLeft]},
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ pub mod message_prelude {
|
||||||
pub use crate::communication::generate_uuid;
|
pub use crate::communication::generate_uuid;
|
||||||
pub use crate::communication::message::{AsMessage, Message, MessageDiscriminant};
|
pub use crate::communication::message::{AsMessage, Message, MessageDiscriminant};
|
||||||
pub use crate::communication::{ActionList, MessageHandler};
|
pub use crate::communication::{ActionList, MessageHandler};
|
||||||
|
pub use crate::document::Clipboard;
|
||||||
pub use crate::document::{DocumentMessage, DocumentMessageDiscriminant};
|
pub use crate::document::{DocumentMessage, DocumentMessageDiscriminant};
|
||||||
pub use crate::document::{DocumentsMessage, DocumentsMessageDiscriminant};
|
pub use crate::document::{DocumentsMessage, DocumentsMessageDiscriminant};
|
||||||
pub use crate::document::{MovementMessage, MovementMessageDiscriminant};
|
pub use crate::document::{MovementMessage, MovementMessageDiscriminant};
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,9 @@ function makeMenuEntries(editor: EditorState): MenuListEntries {
|
||||||
{ label: "Redo", shortcut: ["KeyControl", "KeyShift", "KeyZ"], action: async () => editor.instance.redo() },
|
{ label: "Redo", shortcut: ["KeyControl", "KeyShift", "KeyZ"], action: async () => editor.instance.redo() },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ label: "Cut", shortcut: ["KeyControl", "KeyX"] },
|
{ label: "Cut", shortcut: ["KeyControl", "KeyX"], action: async () => editor.instance.cut() },
|
||||||
{ label: "Copy", icon: "Copy", shortcut: ["KeyControl", "KeyC"] },
|
{ label: "Copy", icon: "Copy", shortcut: ["KeyControl", "KeyC"], action: async () => editor.instance.copy() },
|
||||||
{ label: "Paste", icon: "Paste", shortcut: ["KeyControl", "KeyV"] },
|
{ label: "Paste", icon: "Paste", shortcut: ["KeyControl", "KeyV"], action: async () => editor.instance.paste() },
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -349,6 +349,24 @@ impl JsEditorHandle {
|
||||||
self.dispatch(message);
|
self.dispatch(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Cut selected layers
|
||||||
|
pub fn cut(&self) {
|
||||||
|
let message = DocumentsMessage::Cut(Clipboard::User);
|
||||||
|
self.dispatch(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Copy selected layers
|
||||||
|
pub fn copy(&self) {
|
||||||
|
let message = DocumentsMessage::Copy(Clipboard::User);
|
||||||
|
self.dispatch(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Paste selected layers
|
||||||
|
pub fn paste(&self) {
|
||||||
|
let message = DocumentsMessage::Paste(Clipboard::User);
|
||||||
|
self.dispatch(message);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn select_layer(&self, paths: Vec<LayerId>, ctrl: bool, shift: bool) {
|
pub fn select_layer(&self, paths: Vec<LayerId>, ctrl: bool, shift: bool) {
|
||||||
let message = DocumentMessage::SelectLayer(paths, ctrl, shift);
|
let message = DocumentMessage::SelectLayer(paths, ctrl, shift);
|
||||||
self.dispatch(message);
|
self.dispatch(message);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue