Browse Source

Support closing projects

Josh Engebretson 10 years ago
parent
commit
168c8de2b0

+ 27 - 5
Script/AtomicEditor/editor/Editor.ts

@@ -10,8 +10,8 @@ class Editor extends Atomic.ScriptObject {
 
     project: ToolCore.Project;
     assetImport: AssetImport;
-    editorLicense:EditorLicense;
-    playMode:PlayMode;
+    editorLicense: EditorLicense;
+    playMode: PlayMode;
 
     static instance: Editor;
 
@@ -35,6 +35,8 @@ class Editor extends Atomic.ScriptObject {
         this.assetImport = new AssetImport();
 
         this.subscribeToEvent(EditorEvents.LoadProject, (data) => this.handleEditorLoadProject(data));
+        this.subscribeToEvent(EditorEvents.CloseProject, (data) => this.handleEditorCloseProject(data));
+        this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
         this.subscribeToEvent(EditorEvents.Quit, (data) => this.handleEditorEventQuit(data));
         this.subscribeToEvent("ExitRequested", (data) => this.handleExitRequested(data));
 
@@ -58,6 +60,26 @@ class Editor extends Atomic.ScriptObject {
 
         return system.loadProject(event.path);
 
+    }
+
+    handleEditorCloseProject(event) {
+
+        var system = ToolCore.getToolSystem();
+
+        if (system.project) {
+
+            system.closeProject();
+
+        }
+
+    }
+
+    handleProjectUnloaded(event) {
+
+        this.sendEvent(EditorEvents.ActiveSceneChange, { scene : null });
+
+
+
     }
 
     parseArguments() {
@@ -70,7 +92,7 @@ class Editor extends Atomic.ScriptObject {
 
             if (args[idx] == "--project") {
 
-                this.sendEvent(EditorEvents.LoadProject, {path: args[idx + 1]});
+                this.sendEvent(EditorEvents.LoadProject, { path: args[idx + 1] });
 
             }
 
@@ -83,13 +105,13 @@ class Editor extends Atomic.ScriptObject {
     // event handling
     handleExitRequested(data) {
 
-      EditorUI.shutdown();
+        EditorUI.shutdown();
 
     }
 
     handleEditorEventQuit(data) {
 
-      this.sendEvent("ExitRequested");
+        this.sendEvent("ExitRequested");
 
     }
 

+ 2 - 0
Script/AtomicEditor/editor/EditorEvents.ts

@@ -35,6 +35,8 @@ export interface ContentFolderChangedEvent {
 
 }
 
+export const CloseProject = "EditorCloseProject";
+
 export const LoadProject = "EditorLoadProject";
 export interface LoadProjectEvent {
 

+ 1 - 0
Script/AtomicEditor/tsconfig.json

@@ -45,6 +45,7 @@
         "./ui/license/ActivationSuccessWindow.ts",
         "./ui/license/ActivationWindow.ts",
         "./ui/license/EULAWindow.ts",
+        "./ui/license/ManageLicense.ts",
         "./ui/menus/MenuItemSources.ts",
         "./ui/modal/About.ts",
         "./ui/modal/CreateProject.ts",

+ 4 - 0
Script/AtomicEditor/ui/MainFrame.ts

@@ -44,6 +44,10 @@ class MainFrame extends ScriptWidget {
             this.showWelcomeFrame(false);
         });
 
+        this.subscribeToEvent("ProjectUnloaded", (data) => {
+            this.showWelcomeFrame(true);
+        });
+
         this.showWelcomeFrame(true);
 
     }

+ 7 - 0
Script/AtomicEditor/ui/MainFrameMenu.ts

@@ -56,6 +56,13 @@ class MainFrameMenu extends Atomic.ScriptObject {
 
                 return true;
 
+            }
+            if (refid == "file close project") {
+
+                this.sendEvent(EditorEvents.CloseProject);
+
+                return true;
+
             }
 
             if (refid == "file save file") {

+ 9 - 0
Script/AtomicEditor/ui/ProjectFrame.ts

@@ -38,6 +38,7 @@ class ProjectFrame extends ScriptWidget {
 
         // events
         this.subscribeToEvent("ProjectLoaded", (data) => this.handleProjectLoaded(data));
+        this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
         this.subscribeToEvent("DragEnded", (data: Atomic.DragEndedEvent) => this.handleDragEnded(data));
 
         this.subscribeToEvent("ResourceAdded", (ev: ToolCore.ResourceAddedEvent) => this.handleResourceAdded(ev));
@@ -301,7 +302,15 @@ class ProjectFrame extends ScriptWidget {
         this.folderList.setExpanded(this.resourcesID, true);
         this.sendEvent(EditorEvents.ContentFolderChanged, { path: ToolCore.toolSystem.project.resourcePath });
 
+    }
+
+    handleProjectUnloaded(data) {
+
+        this.folderList.deleteAllItems();
 
+        var container: Atomic.UILayout = <Atomic.UILayout> this.getWidget("contentcontainer");
+        container.deleteAllChildren();
+        
     }
 
     private refreshContent(folder: ToolCore.Asset) {

+ 9 - 0
Script/AtomicEditor/ui/ResourceFrame.ts

@@ -207,6 +207,14 @@ class ResourceFrame extends ScriptWidget {
 
     }
 
+    handleProjectUnloaded(data) {
+
+      for (var i in this.editors) {
+          this.editors[i].close();
+      }
+
+    }
+
     constructor(parent: Atomic.UIWidget) {
 
         super();
@@ -221,6 +229,7 @@ class ResourceFrame extends ScriptWidget {
 
         this.resourceViewContainer.addChild(this);
 
+        this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
         this.subscribeToEvent(EditorEvents.EditResource, (data) => this.handleEditResource(data));
         this.subscribeToEvent(EditorEvents.SaveResource, (data) => this.handleSaveResource(data));
         this.subscribeToEvent(EditorEvents.SaveAllResources, (data) => this.handleSaveAllResources(data));

+ 14 - 4
Script/AtomicEditor/ui/inspector/InspectorFrame.ts

@@ -11,7 +11,7 @@ import NodeInspector = require("./NodeInspector");
 
 class InspectorFrame extends ScriptWidget {
 
-    inspectingNode:Atomic.Node;
+    inspectingNode: Atomic.Node;
 
     constructor() {
 
@@ -25,10 +25,20 @@ class InspectorFrame extends ScriptWidget {
 
         this.subscribeToEvent(EditorEvents.EditResource, (data) => this.handleEditResource(data));
         this.subscribeToEvent(EditorEvents.ActiveNodeChange, (data) => this.handleActiveNodeChange(data));
+        this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
 
 
     }
 
+    handleProjectUnloaded(data) {
+
+        this.inspectingNode = null;
+        var container = this.getWidget("inspectorcontainer");
+        container.deleteAllChildren();
+
+    }
+
+
     handleEditResource(ev: EditorEvents.EditResourceEvent) {
 
         var path = ev.path;
@@ -52,9 +62,9 @@ class InspectorFrame extends ScriptWidget {
 
             if (this.inspectingNode) {
 
-              this.inspectingNode = null;
-              var container = this.getWidget("inspectorcontainer");
-              container.deleteAllChildren();
+                this.inspectingNode = null;
+                var container = this.getWidget("inspectorcontainer");
+                container.deleteAllChildren();
 
             }
 

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

@@ -70,6 +70,7 @@ declare module ToolCore {
 
       loadProject(fullpath: string): boolean;
       getProject(): Project;
+      closeProject(): void;
       getDataPath(): string;
       setDataPath(path: string): void;
       registerPlatform(platform: Platform): void;

+ 9 - 0
Source/ToolCore/Assets/AssetDatabase.cpp

@@ -21,6 +21,7 @@ namespace ToolCore
 AssetDatabase::AssetDatabase(Context* context) : Object(context)
 {
     SubscribeToEvent(E_PROJECTLOADED, HANDLER(AssetDatabase, HandleProjectLoaded));
+    SubscribeToEvent(E_PROJECTUNLOADED, HANDLER(AssetDatabase, HandleProjectUnloaded));
 }
 
 AssetDatabase::~AssetDatabase()
@@ -403,4 +404,12 @@ void AssetDatabase::HandleProjectLoaded(StringHash eventType, VariantMap& eventD
     Scan();
 }
 
+void AssetDatabase::HandleProjectUnloaded(StringHash eventType, VariantMap& eventData)
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    cache->RemoveResourceDir(GetCachePath());
+    project_ = 0;
+}
+
+
 }

+ 1 - 0
Source/ToolCore/Assets/AssetDatabase.h

@@ -45,6 +45,7 @@ public:
 private:
 
     void HandleProjectLoaded(StringHash eventType, VariantMap& eventData);
+    void HandleProjectUnloaded(StringHash eventType, VariantMap& eventData);
 
     void AddAsset(SharedPtr<Asset>& asset);
 

+ 5 - 0
Source/ToolCore/ToolEvents.h

@@ -13,4 +13,9 @@ EVENT(E_PROJECTLOADED, ProjectLoaded)
     PARAM(P_PROJECTPATH, ProjectPath);    // string
 }
 
+EVENT(E_PROJECTUNLOADED, ProjectUnloaded)
+{
+}
+
+
 }

+ 22 - 0
Source/ToolCore/ToolSystem.cpp

@@ -14,6 +14,7 @@
 
 #include "ToolSystem.h"
 #include "ToolEnvironment.h"
+#include "ToolEvents.h"
 
 #include "Project/Project.h"
 
@@ -71,6 +72,27 @@ bool ToolSystem::LoadProject(const String& fullpath)
     return project_->Load(fullpath);
 }
 
+void ToolSystem::CloseProject()
+{
+    if (project_.Null())
+        return;
+
+    SendEvent(E_PROJECTUNLOADED);
+
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+
+    String projectPath = project_->GetProjectPath();
+    String resourcePath = project_->GetResourcePath();
+
+    project_ = 0;
+
+    cache->RemoveResourceDir(resourcePath);
+    cache->RemoveResourceDir(projectPath);
+
+    cache->ReleaseAllResources(true);
+
+}
+
 void ToolSystem::SetCurrentPlatform(PlatformID platform)
 {
     if (platform == PLATFORMID_UNDEFINED)

+ 1 - 0
Source/ToolCore/ToolSystem.h

@@ -24,6 +24,7 @@ public:
 
     bool LoadProject(const String& fullpath);
     Project* GetProject() { return project_; }
+    void CloseProject();
 
     const String& GetDataPath() { return dataPath_; }
     void SetDataPath(const String& path) { dataPath_ = path; }