Explorar el Código

Check for unsaved changes before closing a SceneEditor

rsredsq hace 10 años
padre
commit
19ac4525f8

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

@@ -479,6 +479,7 @@ class DataBinding {
 
         if (ev.type == Atomic.UI_EVENT_TYPE_CHANGED) {
             if (this.widget == ev.target || this.widget.isAncestorOf(ev.target)) {
+                EditorUI.getMainFrame().resourceframe.currentResourceEditor.setModified(true);
                 this.setObjectValueFromWidget(ev.target);
                 return true;
             }

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

@@ -54,6 +54,8 @@ public:
 
     void RequestClose();
 
+    virtual void SetModified(bool modified) { modified_ = modified; };
+
 protected:
 
     String fullpath_;

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

@@ -139,6 +139,10 @@ bool SceneEditor3D::OnEvent(const TBWidgetEvent &ev)
                 eventData[EditorActiveNodeChange::P_NODE] = pasteNode;
                 SendEvent(E_EDITORACTIVENODECHANGE, eventData);
             }
+        } 
+        else if (ev.ref_id == TBIDC("close"))
+        {
+            RequestClose();
         }
     }
 
@@ -255,4 +259,13 @@ bool SceneEditor3D::Save()
 
 }
 
+void SceneEditor3D::SetModified(bool modified)
+{
+    ResourceEditor::SetModified(modified);
+
+    String filename = GetFileNameAndExtension(fullpath_);
+    filename += "*";
+    button_->SetText(filename.CString());
+}
+
 }

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

@@ -54,6 +54,8 @@ public:
     void Close(bool navigateToAvailableResource = true);
     bool Save();
 
+    void SetModified(bool modified);
+
 private:
 
     void HandleUpdate(StringHash eventType, VariantMap& eventData);