Browse Source

Events moved to the separate file. Clean up, refactored.

rsredsq 10 years ago
parent
commit
0e3f709ea1

+ 35 - 19
Script/AtomicEditor/editor/Editor.ts

@@ -20,6 +20,9 @@ class Editor extends Atomic.ScriptObject {
 
     static instance: Editor;
 
+    projectCloseRequested: boolean;
+    exitRequested: boolean;
+
     constructor() {
 
         super();
@@ -57,8 +60,12 @@ class Editor extends Atomic.ScriptObject {
             Preferences.getInstance().registerRecentProject(data.projectPath);
         });
 
-        this.subscribeToEvent("EditorResourceCloseCanceled", (_) => {
-            this.unsubscribeFromEvent("AllResourceEditorsClosed");
+        this.subscribeToEvent("EditorResourceCloseCanceled", (data) => {
+            //if user canceled closing the resource, then user has changes that he doesn't want to lose
+            //so cancel exit/project close request and unsubscribe from event to avoid closing all the editors again
+            this.exitRequested = false;
+            this.projectCloseRequested = false;
+            this.unsubscribeFromEvent("EditorCloseResource");
         });
 
         this.parseArguments();
@@ -88,29 +95,36 @@ class Editor extends Atomic.ScriptObject {
         return system.loadProject(event.path);
     }
 
-    checkIfEverythingClosed() {
+    closeAllResourceEditors() {
         var editor = EditorUI.getCurrentResourceEditor();
         if (!editor) {
-            this.sendEvent("AllResourceEditorsClosed");
-            return;
+          if (this.exitRequested) {
+              Editor.Exit();
+          } else if(this.projectCloseRequested) {
+              this.closeProject();
+          }
+          return;
         }
+        //wait when we close resource editor to check another resource editor for unsaved changes and close it
         this.subscribeToEvent("EditorCloseResource", (data) => {
-            this.checkIfEverythingClosed();
+            this.closeAllResourceEditors();
         });
         editor.requestClose();
     }
 
     handleEditorCloseProject(event) {
-        this.subscribeToEvent("AllResourceEditorsClosed", (_) => {
-            var system = ToolCore.getToolSystem();
+        this.projectCloseRequested = true;
+        this.closeAllResourceEditors();
+    }
 
-            if (system.project) {
+    closeProject() {
+        var system = ToolCore.getToolSystem();
 
-                system.closeProject();
+        if (system.project) {
 
-            }
-        });
-        this.checkIfEverythingClosed();
+            system.closeProject();
+
+        }
     }
 
     handleProjectUnloaded(event) {
@@ -143,12 +157,14 @@ class Editor extends Atomic.ScriptObject {
 
     // event handling
     handleExitRequested(data) {
-      this.subscribeToEvent("AllResourceEditorsClosed", (_) => {
-          Preferences.getInstance().write();
-          EditorUI.shutdown();
-          Atomic.getEngine().exit();
-      });
-      this.checkIfEverythingClosed();
+        this.exitRequested = true;
+        this.closeAllResourceEditors();
+    }
+
+    static Exit() {
+        Preferences.getInstance().write();
+        EditorUI.shutdown();
+        Atomic.getEngine().exit();
     }
 
 

+ 1 - 1
Source/Atomic/UI/UI.cpp

@@ -150,7 +150,7 @@ void UI::HandleExitRequested(StringHash eventType, VariantMap& eventData)
 
 void UI::Shutdown()
 {
-    //SetInputDisabled(true);
+
 }
 
 void UI::Initialize(const String& languageFile)

+ 8 - 6
Source/AtomicEditor/Editors/ResourceEditor.cpp

@@ -12,6 +12,8 @@
 
 #include <TurboBadger/tb_message_window.h>
 
+#include "ResourceEditorEvents.h"
+
 #include "ResourceEditor.h"
 
 //#include "../UI/UIMainFrame.h"
@@ -47,7 +49,7 @@ public:
         }
         else
         {
-            editor_->Close();
+            editor_->Close(container_->GetNumPages()>1);
             return true;
         }
     }
@@ -61,11 +63,11 @@ public:
                 if (ev.ref_id == TBIDC("TBMessageWindow.ok"))
                 {
                     container_->OnEvent(ev);
-                    editor_->Close();
+                    editor_->Close(container_->GetNumPages()>1);
                 }
                 else
                 {
-                    editor_->SendEvent("EditorResourceCloseCanceled");
+                    editor_->SendEvent(E_EDITORRESOURCECLOSECANCELED);
                     SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
                 }
                 return true;
@@ -161,9 +163,9 @@ void ResourceEditor::Close(bool navigateToAvailableResource)
     ((TBTabContainer*)container_->GetInternalWidget())->GetTabLayout()->RemoveChild(editorTabLayout_);
 
     VariantMap data;
-    data["Editor"] = this;
-    data["NavigateToAvailableResource"] = navigateToAvailableResource;
-    SendEvent("EditorCloseResource", data);
+    data[EditorCloseResource::P_EDITOR] = this;
+    data[EditorCloseResource::P_NAVIGATE] = navigateToAvailableResource;
+    SendEvent(E_EDITORCLOSERESOURCE, data);
 }
 
 void ResourceEditor::InvokeShortcut(const String& shortcut)

+ 26 - 0
Source/AtomicEditor/Editors/ResourceEditorEvents.h

@@ -0,0 +1,26 @@
+//
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// LICENSE: Atomic Game Engine Editor and Tools EULA
+// Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
+// license information: https://github.com/AtomicGameEngine/AtomicGameEngine
+//
+
+#pragma once
+
+#include <Atomic/Core/Object.h>
+
+namespace AtomicEditor
+{
+
+EVENT(E_EDITORCLOSERESOURCE, EditorCloseResource)
+{
+PARAM(P_EDITOR, Editor);            // ResourceEditor
+PARAM(P_NAVIGATE, NavigateToAvailableResource); // bool
+}
+
+EVENT(E_EDITORRESOURCECLOSECANCELED, EditorResourceCloseCanceled)
+{
+
+}
+
+}