Browse Source

Support for cut operations, various fixes

Josh Engebretson 10 years ago
parent
commit
9685adaba8

+ 12 - 3
Script/AtomicEditor/ui/Shortcuts.ts

@@ -112,7 +112,7 @@ class Shortcuts extends Atomic.ScriptObject {
 
 
             // TODO: Make these customizable
             // TODO: Make these customizable
 
 
-            if (!Atomic.ui.focusedWidget) {
+            if (!Atomic.ui.focusedWidget && !this.cmdKeyDown()) {
 
 
                 if (ev.key == Atomic.KEY_W) {
                 if (ev.key == Atomic.KEY_W) {
                     this.invokeGizmoEditModeChanged(Editor.EDIT_MOVE);
                     this.invokeGizmoEditModeChanged(Editor.EDIT_MOVE);
@@ -131,8 +131,7 @@ class Shortcuts extends Atomic.ScriptObject {
 
 
     }
     }
 
 
-    // global shortcut handler
-    handleUIShortcut(ev: Atomic.UIShortcutEvent) {
+    cmdKeyDown(): boolean {
 
 
         var cmdKey;
         var cmdKey;
         if (Atomic.platform == "MacOSX") {
         if (Atomic.platform == "MacOSX") {
@@ -141,6 +140,16 @@ class Shortcuts extends Atomic.ScriptObject {
             cmdKey = (Atomic.input.getKeyDown(Atomic.KEY_LCTRL) || Atomic.input.getKeyDown(Atomic.KEY_RCTRL));
             cmdKey = (Atomic.input.getKeyDown(Atomic.KEY_LCTRL) || Atomic.input.getKeyDown(Atomic.KEY_RCTRL));
         }
         }
 
 
+        return cmdKey;
+
+
+    }
+
+    // global shortcut handler
+    handleUIShortcut(ev: Atomic.UIShortcutEvent) {
+
+        var cmdKey = this.cmdKeyDown();
+
         if (cmdKey) {
         if (cmdKey) {
 
 
             if (ev.key == Atomic.KEY_S) {
             if (ev.key == Atomic.KEY_S) {

+ 4 - 3
Script/AtomicEditor/ui/frames/inspector/InspectorFrame.ts

@@ -74,7 +74,7 @@ class InspectorFrame extends ScriptWidget {
 
 
             for (var i = 0; i < selection.getSelectedNodeCount(); i++) {
             for (var i = 0; i < selection.getSelectedNodeCount(); i++) {
 
 
-                this.handleSceneNodeSelected( { node: selection.getSelectedNode(i),  scene: this.scene, selected: true} );
+                this.handleSceneNodeSelected( { node: selection.getSelectedNode(i),  scene: this.scene, selected: true, quiet: true} );
 
 
             }
             }
 
 
@@ -96,6 +96,8 @@ class InspectorFrame extends ScriptWidget {
 
 
     handleSceneNodeSelected(ev: Editor.SceneNodeSelectedEvent) {
     handleSceneNodeSelected(ev: Editor.SceneNodeSelectedEvent) {
 
 
+        var selection = this.sceneEditor.selection;
+
         if (this.selectionInspector) {
         if (this.selectionInspector) {
 
 
             if (ev.selected) {
             if (ev.selected) {
@@ -115,8 +117,7 @@ class InspectorFrame extends ScriptWidget {
 
 
         }
         }
 
 
-        var selection = this.sceneEditor.selection;
-
+        // close last, so state is saved
         if (!selection.selectedNodeCount) {
         if (!selection.selectedNodeCount) {
             this.closeSelectionInspector();
             this.closeSelectionInspector();
         }
         }

+ 1 - 1
Script/AtomicEditor/ui/frames/menus/HierarchyFrameMenu.ts

@@ -83,7 +83,7 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
             } else if (refid == "duplicate_node") {
             } else if (refid == "duplicate_node") {
 
 
                 var newnode = node.clone();
                 var newnode = node.clone();
-
+                node.scene.sendEvent("SceneEditNodeCreated", { node : newnode});
             }
             }
 
 
             return true;
             return true;

+ 1 - 0
Script/TypeScript/AtomicWork.d.ts

@@ -265,6 +265,7 @@ declare module Editor {
         scene: Atomic.Scene;
         scene: Atomic.Scene;
         node: Atomic.Node;
         node: Atomic.Node;
         selected: boolean;
         selected: boolean;
+        quiet: boolean;
     }
     }
 
 
     export interface SceneEditAddRemoveNodesEvent {
     export interface SceneEditAddRemoveNodesEvent {

+ 4 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditHistory.cpp

@@ -197,6 +197,10 @@ void SceneEditHistory::Redo()
 
 
 void SceneEditHistory::HandleSceneNodeSelected(StringHash eventType, VariantMap& eventData)
 void SceneEditHistory::HandleSceneNodeSelected(StringHash eventType, VariantMap& eventData)
 {
 {
+
+    if (eventData[SceneNodeSelected::P_QUIET].GetBool())
+        return;
+
     if (curSelEditOp_)
     if (curSelEditOp_)
     {
     {
         EndSelectionEdit();
         EndSelectionEdit();

+ 5 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.cpp

@@ -310,6 +310,11 @@ void SceneEditor3D::Redo()
     editHistory_->Redo();
     editHistory_->Redo();
 }
 }
 
 
+void SceneEditor3D::Cut()
+{
+    selection_->Cut();
+}
+
 void SceneEditor3D::Copy()
 void SceneEditor3D::Copy()
 {
 {
     selection_->Copy();
     selection_->Copy();

+ 1 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.h

@@ -72,6 +72,7 @@ public:
 
 
     void Undo();
     void Undo();
     void Redo();
     void Redo();
+    void Cut();
     void Copy();
     void Copy();
     void Paste();
     void Paste();
 
 

+ 1 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3DEvents.h

@@ -35,6 +35,7 @@ EVENT(E_SCENENODESELECTED, SceneNodeSelected)
     PARAM(P_SCENE, Scene);             // Scene
     PARAM(P_SCENE, Scene);             // Scene
     PARAM(P_NODE, Node);               // Node
     PARAM(P_NODE, Node);               // Node
     PARAM(P_SELECTED, Selected);       // bool
     PARAM(P_SELECTED, Selected);       // bool
+    PARAM(P_QUIET, Quiet);             // bool (don't record edit event)
 }
 }
 
 
 EVENT(E_SCENEEDITBEGIN, SceneEditBegin)
 EVENT(E_SCENEEDITBEGIN, SceneEditBegin)

+ 7 - 3
Source/AtomicEditor/Editors/SceneEditor3D/SceneSelection.cpp

@@ -79,13 +79,11 @@ void SceneSelection::RemoveNode(Node* node, bool quiet)
 
 
     nodes_.Remove(_node);
     nodes_.Remove(_node);
 
 
-    if (quiet)
-        return;
-
     VariantMap eventData;
     VariantMap eventData;
     eventData[SceneNodeSelected::P_SCENE] = scene_;
     eventData[SceneNodeSelected::P_SCENE] = scene_;
     eventData[SceneNodeSelected::P_NODE] = node;
     eventData[SceneNodeSelected::P_NODE] = node;
     eventData[SceneNodeSelected::P_SELECTED] = false;    
     eventData[SceneNodeSelected::P_SELECTED] = false;    
+    eventData[SceneNodeSelected::P_QUIET] = quiet;
     scene_->SendEvent(E_SCENENODESELECTED, eventData);
     scene_->SendEvent(E_SCENENODESELECTED, eventData);
 
 
 }
 }
@@ -159,6 +157,11 @@ void SceneSelection::Paste()
 
 
 }
 }
 
 
+void SceneSelection::Cut()
+{
+    Copy();
+    Delete();
+}
 
 
 void SceneSelection::Copy()
 void SceneSelection::Copy()
 {
 {
@@ -284,6 +287,7 @@ void SceneSelection::DrawNodeDebug(Node* node, DebugRenderer* debug, bool drawNo
 void SceneSelection::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
 void SceneSelection::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
 {
 {
     Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
     Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
+
     RemoveNode(node, true);
     RemoveNode(node, true);
 }
 }
 
 

+ 1 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneSelection.h

@@ -33,6 +33,7 @@ public:
 
 
     Vector<SharedPtr<Node>>& GetNodes() { return nodes_; }
     Vector<SharedPtr<Node>>& GetNodes() { return nodes_; }
 
 
+    void Cut();
     void Copy();
     void Copy();
     void Paste();
     void Paste();
     void Delete();
     void Delete();

+ 2 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneView3D.cpp

@@ -323,6 +323,8 @@ void SceneView3D::HandleUIUnhandledShortcut(StringHash eventType, VariantMap& ev
         sceneEditor_->Redo();
         sceneEditor_->Redo();
     else if (id == TBIDC("copy"))
     else if (id == TBIDC("copy"))
         sceneEditor_->Copy();
         sceneEditor_->Copy();
+    else if (id == TBIDC("cut"))
+        sceneEditor_->Cut();
     else if (id == TBIDC("paste"))
     else if (id == TBIDC("paste"))
         sceneEditor_->Paste();
         sceneEditor_->Paste();