Forráskód Böngészése

Bringing undo/redo to master, Scene edits bring up unsaved modifications on resource close

Josh Engebretson 10 éve
szülő
commit
70e0c4a687

+ 0 - 14
Script/AtomicEditor/ui/frames/HierarchyFrame.ts

@@ -68,11 +68,6 @@ class HierarchyFrame extends Atomic.UIWidget {
 
         this.subscribeToEvent("ComponentAdded", (ev: Atomic.ComponentAddedEvent) => {
 
-            //var resourceEditor = EditorUI.getCurrentResourceEditor();
-            //if (resourceEditor) {
-            //    resourceEditor.setModified(true);
-            //}
-
             if (!ev.component || ev.component.typeName != "PrefabComponent") return;
 
             var node = ev.node;
@@ -89,11 +84,6 @@ class HierarchyFrame extends Atomic.UIWidget {
 
         this.subscribeToEvent("ComponentRemoved", (ev: Atomic.ComponentRemovedEvent) => {
 
-            //var resourceEditor = EditorUI.getCurrentResourceEditor();
-            //if (resourceEditor) {
-            //    resourceEditor.setModified(true);
-            //}
-
             if (!ev.component || ev.component.typeName != "PrefabComponent") return;
 
             var node = ev.node;
@@ -142,8 +132,6 @@ class HierarchyFrame extends Atomic.UIWidget {
         if (!node.parent || node.scene != this.scene)
             return;
 
-        //EditorUI.getCurrentResourceEditor().setModified(true);
-
         var parentID = this.nodeIDToItemID[node.parent.id];
 
         var childItemID = this.recursiveAddNode(parentID, node);
@@ -158,8 +146,6 @@ class HierarchyFrame extends Atomic.UIWidget {
         if (!this.scene)
             return;
 
-        //EditorUI.getCurrentResourceEditor().setModified(true);
-
         var node = ev.node;
 
         if (this.filterNode(node))

+ 1 - 1
Script/AtomicEditor/ui/frames/inspector/DataBinding.ts

@@ -537,7 +537,7 @@ class DataBinding {
         if (ev.type == Atomic.UI_EVENT_TYPE_CHANGED) {
 
             if (this.widget == ev.target || this.widget.isAncestorOf(ev.target)) {
-                //EditorUI.getCurrentResourceEditor().setModified(true);
+              
                 this.setObjectValueFromWidget(ev.target);
 
                 if (ev.target.getTypeName() != "UIEditField" && ev.target.getTypeName() != "UIInlineSelect") {

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

@@ -31,6 +31,8 @@ void SceneEditHistory::AddUndoOp(SceneEditOp* op)
 {
     undoHistory_.Push(op);
 
+    scene_->SendEvent(E_SCENEEDITSCENEMODIFIED);
+
     for (unsigned i = 0; i < redoHistory_.Size(); i++)
     {
         delete redoHistory_[i];
@@ -45,6 +47,7 @@ void SceneEditHistory::HandleSceneEditSerializableUndoRedo(StringHash eventType,
 
     if (editStates_.Contains(serial))
     {
+        scene_->SendEvent(E_SCENEEDITSCENEMODIFIED);
         editStates_[serial] = eventData[SceneEditSerializableUndoRedo::P_STATE].GetVectorBuffer();
     }
 }

+ 15 - 9
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.cpp

@@ -57,11 +57,11 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
     // EARLY ACCESS
     if (fullpath.Find(String("ToonTown")) != String::NPOS)
     {
-          sceneView_->GetCameraNode()->SetWorldPosition(Vector3(-119.073f, 76.1121f, 16.47763f));
-          Quaternion q(0.55f, 0.14f,  0.8f, -0.2f);
-          sceneView_->SetYaw(q.YawAngle());
-          sceneView_->SetPitch(q.PitchAngle());
-          sceneView_->GetCameraNode()->SetWorldRotation(q);
+        sceneView_->GetCameraNode()->SetWorldPosition(Vector3(-119.073f, 76.1121f, 16.47763f));
+        Quaternion q(0.55f, 0.14f,  0.8f, -0.2f);
+        sceneView_->SetYaw(q.YawAngle());
+        sceneView_->SetPitch(q.PitchAngle());
+        sceneView_->GetCameraNode()->SetWorldRotation(q);
     }
     else
     {
@@ -99,6 +99,8 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
     SubscribeToEvent(scene_, E_NODEADDED, HANDLER(SceneEditor3D, HandleNodeAdded));
     SubscribeToEvent(scene_, E_NODEREMOVED, HANDLER(SceneEditor3D, HandleNodeRemoved));
 
+    SubscribeToEvent(scene_, E_SCENEEDITSCENEMODIFIED, HANDLER(SceneEditor3D, HandleSceneEditSceneModified));
+
     editHistory_ = new SceneEditHistory(context_, scene_);
 
 }
@@ -155,12 +157,11 @@ bool SceneEditor3D::OnEvent(const TBWidgetEvent &ev)
 
                 scene_->SendEvent(E_SCENEEDITNODEADDEDREMOVED, editData);
             }
-        } 
+        }
         else if (ev.ref_id == TBIDC("close"))
         {
-            //Don't check for unsaved changes yet
-            Close();
-            //RequestClose();
+            RequestClose();
+            return true;
         }
         else if (ev.ref_id == TBIDC("undo"))
         {
@@ -307,5 +308,10 @@ void SceneEditor3D::Redo()
     editHistory_->Redo();
 }
 
+void SceneEditor3D::HandleSceneEditSceneModified(StringHash eventType, VariantMap& eventData)
+{
+    SetModified(true);
+    modified_ = true;
+}
 
 }

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

@@ -71,6 +71,8 @@ private:
     void HandleNodeAdded(StringHash eventType, VariantMap& eventData);
     void HandleNodeRemoved(StringHash eventType, VariantMap& eventData);
 
+    void HandleSceneEditSceneModified(StringHash eventType, VariantMap& eventData);
+
     SharedPtr<Scene> scene_;
 
     // TODO: multiple views

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

@@ -28,6 +28,11 @@ EVENT(E_GIZMOMOVED, GizmoMoved)
 
 }
 
+EVENT(E_SCENEEDITSCENEMODIFIED, SceneEditSceneModified)
+{
+
+}
+
 EVENT(E_SCENEEDITNODEADDEDREMOVED, SceneEditNodeAddedRemoved)
 {
     PARAM(P_SCENE, Scene);             // Scene

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

@@ -390,6 +390,12 @@ void SceneView3D::SelectNode(Node* node)
 
 bool SceneView3D::OnEvent(const TBWidgetEvent &ev)
 {
+    if (ev.type == EVENT_TYPE_SHORTCUT)
+    {
+        if (ev.ref_id == TBIDC("close"))
+            return false;
+    }
+
     return sceneEditor_->OnEvent(ev);
 }