Browse Source

Serializing user prefs, build output ui work, messages for mac and web deployment tasks, configurable build paths

Josh Engebretson 10 years ago
parent
commit
4bf72d3a6f

+ 0 - 1
Script/AtomicEditor/ui/frames/MainFrame.ts

@@ -5,7 +5,6 @@ import InspectorFrame = require("./inspector/InspectorFrame");
 import HierarchyFrame = require("./HierarchyFrame");
 import MainToolbar = require("ui//MainToolbar");
 
-import MessageModal = require("../modal/MessageModal");
 import UIEvents = require("ui/UIEvents");
 
 import ScriptWidget = require("ui/ScriptWidget");

+ 2 - 2
Script/AtomicEditor/ui/frames/menus/MainFrameMenu.ts

@@ -223,7 +223,7 @@ var fileItems = {
     "-1": null,
     "Close Project": ["file close project"],
     "-2": null,
-    "Save File": ["file save file"],
+    "Save File": ["file save file", StringID.ShortcutSaveFile],
     "Save All Files": ["file save all"],
-    "Close File": ["file close file"]
+    "Close File": ["file close file", StringID.ShortcutCloseFile]
 }

+ 29 - 10
Script/AtomicEditor/ui/modal/build/BuildOutput.ts

@@ -4,32 +4,51 @@ import ModalWindow = require("../ModalWindow");
 
 class BuildOutput extends ModalWindow {
 
-    constructor(buildBase:ToolCore.BuildBase) {
+    constructor(buildBase: ToolCore.BuildBase) {
 
         super();
 
         this.buildBase = buildBase;
 
-        this.init("Program Output", "AtomicEditor/editor/ui/programoutput.tb.txt");
+        this.init("Build Output", "AtomicEditor/editor/ui/programoutput.tb.txt");
 
-        this.outputField = <Atomic.UIEditField> this.getWidget("output");
+        this.outputField = <Atomic.UIEditField>this.getWidget("output");
 
         this.resizeToFitContent();
         this.center();
 
-        this.subscribeToEvent(buildBase, "BuildOutput", (ev:ToolCore.BuildOutputEvent) => {
+        this.subscribeToEvent(buildBase, "BuildOutput", (ev: ToolCore.BuildOutputEvent) => {
 
-          this.textOutput += ev.text;
-          this.outputField.text = this.textOutput;
-          this.outputField.scrollTo(0, 0xffffff);
+            this.textOutput += ev.text;
+            this.outputField.text = this.textOutput;
+            this.outputField.scrollTo(0, 0xffffff);
 
         });
 
     }
 
-    textOutput:string;
-    buildBase:ToolCore.BuildBase;
-    outputField:Atomic.UIEditField;
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent): boolean {
+
+        if (ev.type == Atomic.UI_EVENT_TYPE_CLICK) {
+
+            if (ev.target.id == "cancel") {
+                this.hide();
+                return true;
+            }
+
+            if (ev.target.id == "ok") {
+                this.hide();
+                return true;
+            }
+
+        }
+
+        return false;
+    }
+
+    textOutput: string;
+    buildBase: ToolCore.BuildBase;
+    outputField: Atomic.UIEditField;
 
 }
 

+ 21 - 7
Script/AtomicEditor/ui/modal/build/BuildWindow.ts

@@ -3,6 +3,7 @@ import EditorEvents = require("editor/EditorEvents");
 import EditorUI = require("ui/EditorUI");
 import ModalWindow = require("../ModalWindow");
 import ProgressModal = require("../ProgressModal");
+import UIEvents = require("../../UIEvents");
 
 import WindowsSettingsWidget = require("./platforms/WindowsSettingsWidget");
 import MacSettingsWidget = require("./platforms/MacSettingsWidget");
@@ -23,10 +24,7 @@ class BuildWindow extends ModalWindow {
 
         var currentPlatform = ToolCore.toolSystem.currentPlatform;
 
-        if (Atomic.platform == "Windows")
-            this.buildPathField.text = "C:/Users/Josh/Desktop/MyBuilds/";
-        else
-            this.buildPathField.text = "/Users/josh/Desktop/MyBuilds/";
+        this.buildPathField.text = ToolCore.toolSystem.project.userPrefs.lastBuildPath;
 
         switch (currentPlatform.name) {
 
@@ -51,6 +49,23 @@ class BuildWindow extends ModalWindow {
             }
 
             if (ev.target.id == "build") {
+
+              var toolSystem = ToolCore.toolSystem;
+              var userPrefs = ToolCore.toolSystem.project.userPrefs;
+
+              if (this.buildPathField.text != userPrefs.lastBuildPath) {
+
+                  userPrefs.lastBuildPath = this.buildPathField.text;
+                  ToolCore.toolSystem.project.saveUserPrefs();
+
+              }
+
+              if (!userPrefs.lastBuildPath.length || !Atomic.fileSystem.dirExists(userPrefs.lastBuildPath)) {
+
+                  new Atomic.UIMessageWindow(this, "modal_error").show("Build Folder","Please select an existing build folder", Atomic.UI_MESSAGEWINDOW_SETTINGS_OK, true, 480, 240);
+                  return true;
+              }
+
                 this.hide();
                 this.build();
                 return true;
@@ -75,10 +90,9 @@ class BuildWindow extends ModalWindow {
 
         var buildSystem = ToolCore.buildSystem;
         var toolSystem = ToolCore.toolSystem;
+        var userPrefs = ToolCore.toolSystem.project.userPrefs;
 
-        toolSystem.setCurrentPlatform(toolSystem.getPlatformByName("ANDROID").platformID);
-
-        buildSystem.buildPath = "/Users/josh/Desktop/MyBuilds/";
+        buildSystem.buildPath = userPrefs.lastBuildPath;
 
         var project = toolSystem.project;
         var platform = toolSystem.currentPlatform;

+ 10 - 2
Source/ToolCore/Build/BuildMac.cpp

@@ -7,8 +7,10 @@
 #include "../ToolSystem.h"
 #include "../ToolEnvironment.h"
 #include "../Project/Project.h"
-#include "BuildMac.h"
+
+#include "BuildEvents.h"
 #include "BuildSystem.h"
+#include "BuildMac.h"
 
 namespace ToolCore
 {
@@ -48,11 +50,14 @@ void BuildMac::Initialize()
 
 void BuildMac::Build(const String& buildPath)
 {
-    ToolSystem* tsystem = GetSubsystem<ToolSystem>();
     ToolEnvironment* tenv = GetSubsystem<ToolEnvironment>();
 
     buildPath_ = AddTrailingSlash(buildPath) + GetBuildSubfolder();
 
+    VariantMap buildOutput;
+    buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Starting Mac Deployment</color>\n\n";
+    SendEvent(E_BUILDOUTPUT, buildOutput);
+
     Initialize();
 
     BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
@@ -88,6 +93,9 @@ void BuildMac::Build(const String& buildPath)
     fileSystem->SystemRun("chmod", args);
 #endif
 
+    buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Mac Deployment Complete</color>\n\n";
+    SendEvent(E_BUILDOUTPUT, buildOutput);
+
     buildPath_ = buildPath + "/Mac-Build";    
     buildSystem->BuildComplete(PLATFORMID_MAC, buildPath_);
 

+ 10 - 0
Source/ToolCore/Build/BuildWeb.cpp

@@ -9,6 +9,8 @@
 #include "../ToolSystem.h"
 #include "../ToolEnvironment.h"
 #include "../Project/Project.h"
+
+#include "BuildEvents.h"
 #include "BuildSystem.h"
 #include "BuildWeb.h"
 
@@ -52,6 +54,10 @@ void BuildWeb::Build(const String& buildPath)
 
     buildPath_ = AddTrailingSlash(buildPath) + GetBuildSubfolder();
 
+    VariantMap buildOutput;
+    buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Starting Web Deployment</color>\n\n";
+    SendEvent(E_BUILDOUTPUT, buildOutput);
+
     Initialize();
 
     FileSystem* fileSystem = GetSubsystem<FileSystem>();
@@ -99,6 +105,10 @@ void BuildWeb::Build(const String& buildPath)
     file.Write(resourcejs.CString(), resourcejs.Length());
     file.Close();
 
+    buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Web Deployment Complete</color>\n\n";
+    SendEvent(E_BUILDOUTPUT, buildOutput);
+
+
     BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
     buildSystem->BuildComplete(PLATFORMID_WEB, buildPath_);
 

+ 7 - 0
Source/ToolCore/Project/Project.cpp

@@ -43,6 +43,9 @@ Project::~Project()
 
 void Project::SaveUserPrefs()
 {
+    String path = GetProjectPath() + "UserPrefs.json";
+
+    userPrefs_->Save(path);
 
 }
 
@@ -50,6 +53,10 @@ bool Project::LoadUserPrefs()
 {
     ToolSystem* tsystem = GetSubsystem<ToolSystem>();
 
+    String path = GetProjectPath() + "UserPrefs.json";
+
+    userPrefs_->Load(path);
+
     // If we're in CLI mode, the Build folder is always relative to project
     if (tsystem->IsCLI())
     {

+ 4 - 1
Source/ToolCore/Project/ProjectBuildSettings.cpp

@@ -177,6 +177,9 @@ bool ProjectBuildSettings::Load(const String& path)
     bool result = jsonFile->Load(*file);
     file->Close();
 
+    if (!result)
+        return false;
+
     JSONValue root = jsonFile->GetRoot();
     if (root == JSONValue::EMPTY)
         return false;
@@ -187,7 +190,7 @@ bool ProjectBuildSettings::Load(const String& path)
     androidBuildSettings_->Read(root);
     iosBuildSettings_->Read(root);
 
-    return result;
+    return true;
 }
 
 void ProjectBuildSettings::Save(const String& path)

+ 44 - 0
Source/ToolCore/Project/ProjectUserPrefs.cpp

@@ -1,6 +1,9 @@
 
 #include "ProjectUserPrefs.h"
 
+#include <Atomic/IO/File.h>
+#include <Atomic/Resource/JSONFile.h>
+
 namespace ToolCore
 {
 
@@ -18,4 +21,45 @@ ProjectUserPrefs::~ProjectUserPrefs()
 
 }
 
+bool ProjectUserPrefs::Load(const String& path)
+{
+    SharedPtr<File> file(new File(context_, path));
+    if (!file->IsOpen())
+        return false;
+
+    SharedPtr<JSONFile> jsonFile(new JSONFile(context_));
+    bool result = jsonFile->Load(*file);
+    file->Close();
+
+    if (!result)
+        return false;
+
+    JSONValue root = jsonFile->GetRoot();
+    if (root == JSONValue::EMPTY)
+        return false;
+
+    lastBuildPath_ = root.GetString("lastBuildPath");
+
+    return true;
+}
+
+void ProjectUserPrefs::Save(const String& path)
+{
+
+    SharedPtr<JSONFile> jsonFile(new JSONFile(context_));
+
+    JSONValue root = jsonFile->CreateRoot();
+
+    SharedPtr<File> file(new File(context_, path, FILE_WRITE));
+
+    root.SetString("lastBuildPath", lastBuildPath_);
+
+    jsonFile->Save(*file, String("   "));
+
+    file->Close();
+
+
+}
+
+
 }

+ 6 - 0
Source/ToolCore/Project/ProjectUserPrefs.h

@@ -12,6 +12,8 @@ namespace ToolCore
 
 class ProjectUserPrefs : public Object
 {
+    friend class Project;
+
     OBJECT(ProjectUserPrefs);
 
 public:
@@ -27,6 +29,10 @@ public:
     void SetLastBuildPath(const String& path) { lastBuildPath_ = path; }
 
 private:
+
+    bool Load(const String& path);
+    void Save(const String& path);
+
     PlatformID defaultPlatform_;
     String lastBuildPath_;