Browse Source

Build improvements

Josh Engebretson 10 years ago
parent
commit
72a7e7f9de

+ 11 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/editor/ui/buildcomplete.tb.txt

@@ -0,0 +1,11 @@
+TBLayout: axis: y, distribution: gravity
+	lp: min-width: 400
+	TBLayout: 
+		TBTextField: id: message
+			font: size: 14
+	TBSeparator: gravity: left right, skin: AESeparator			
+	TBLayout: 
+		TBButton: text: OK, id: ok
+			lp: min-width: 64, min-height: 48
+		TBButton: text: Open Build Folder, id: reveal
+			lp: min-height: 48

+ 3 - 3
Source/AtomicEditor/Source/Build/BuildAndroid.cpp

@@ -113,7 +113,7 @@ void BuildAndroid::HandleEvent(StringHash eventType, VariantMap& eventData)
                 else
                 {
                     // can't proceed
-                    buildSystem->BuildComplete();
+                    buildSystem->BuildComplete(AE_PLATFORM_ANDROID, buildPath_);
                 }
 
             }
@@ -123,14 +123,14 @@ void BuildAndroid::HandleEvent(StringHash eventType, VariantMap& eventData)
             }
             else if (currentBuildPhase_ == ADBStartActivity)
             {
-                buildSystem->BuildComplete();
+                buildSystem->BuildComplete(AE_PLATFORM_ANDROID, buildPath_);
             }
 
         }
         else
         {
 
-            buildSystem->BuildComplete();
+            buildSystem->BuildComplete(AE_PLATFORM_ANDROID, buildPath_, false);
         }
 
 

+ 2 - 2
Source/AtomicEditor/Source/Build/BuildIOS.cpp

@@ -176,13 +176,13 @@ void BuildIOS::HandleEvent(StringHash eventType, VariantMap& eventData)
             }
             else if (currentBuildPhase_ == Deploy)
             {
-                buildSystem->BuildComplete();
+                buildSystem->BuildComplete(AE_PLATFORM_IOS, buildPath_);
             }
 
         }
         else
         {
-            buildSystem->BuildComplete();
+            buildSystem->BuildComplete(AE_PLATFORM_IOS, buildPath_, false);
 
         }
     }

+ 16 - 14
Source/AtomicEditor/Source/Build/BuildMac.cpp

@@ -67,32 +67,34 @@ void BuildMac::Build(const String& buildPath)
 
     buildSourceDir += "Deployment/MacOS/AtomicPlayer.app";
 
-    fileSystem->CreateDir(buildPath);
-    fileSystem->CreateDir(buildPath + "/Contents");
-    fileSystem->CreateDir(buildPath + "/Contents/MacOS");
-    fileSystem->CreateDir(buildPath + "/Contents/Resources");
+    fileSystem->CreateDir(buildPath_);
 
-    String resourcePackagePath = buildPath + "/Contents/Resources/AtomicResources.pak";
+    buildPath_ += "/AtomicPlayer.app";
+
+    fileSystem->CreateDir(buildPath_);
+
+    fileSystem->CreateDir(buildPath_ + "/Contents");
+    fileSystem->CreateDir(buildPath_ + "/Contents/MacOS");
+    fileSystem->CreateDir(buildPath_ + "/Contents/Resources");
+
+    String resourcePackagePath = buildPath_ + "/Contents/Resources/AtomicResources.pak";
     GenerateResourcePackage(resourcePackagePath);
 
-    fileSystem->Copy(buildSourceDir + "/Contents/Resources/Atomic.icns", buildPath + "/Contents/Resources/Atomic.icns");
+    fileSystem->Copy(buildSourceDir + "/Contents/Resources/Atomic.icns", buildPath_ + "/Contents/Resources/Atomic.icns");
 
-    fileSystem->Copy(buildSourceDir + "/Contents/Info.plist", buildPath + "/Contents/Info.plist");    
-    fileSystem->Copy(buildSourceDir + "/Contents/MacOS/AtomicPlayer", buildPath + "/Contents/MacOS/AtomicPlayer");
+    fileSystem->Copy(buildSourceDir + "/Contents/Info.plist", buildPath_ + "/Contents/Info.plist");
+    fileSystem->Copy(buildSourceDir + "/Contents/MacOS/AtomicPlayer", buildPath_ + "/Contents/MacOS/AtomicPlayer");
 
 #ifdef ATOMIC_PLATFORM_OSX
     Vector<String> args;
     args.Push("+x");
-    args.Push(buildPath + "/Contents/MacOS/AtomicPlayer");
+    args.Push(buildPath_ + "/Contents/MacOS/AtomicPlayer");
     fileSystem->SystemRun("chmod", args);
 #endif
 
-    ProjectUtils* utils = GetSubsystem<ProjectUtils>();
-    utils->RevealInFinder(GetPath(buildPath));
-
+    buildPath_ = buildPath + "/Mac-Build";
     BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
-    buildSystem->BuildComplete();
-
+    buildSystem->BuildComplete(AE_PLATFORM_MAC, buildPath_);
 
 }
 

+ 55 - 9
Source/AtomicEditor/Source/Build/BuildSystem.cpp

@@ -35,8 +35,62 @@ BuildSystem::~BuildSystem()
 
 }
 
-void BuildSystem::BuildComplete()
+void BuildSystem::ClearBuildCompleteUI()
 {
+    if (uiBuildComplete_.Null())
+        return;
+
+    uiBuildComplete_->Hide();
+
+    uiBuildComplete_ = 0;
+
+}
+
+void BuildSystem::BuildComplete(AEEditorPlatform platform, const String &buildFolder, bool success)
+{
+    String title;
+    String message;
+
+    if (platform == AE_PLATFORM_ANDROID)
+    {
+        title = "Android Deployment";
+        message = "Android Deployment";
+    }
+    else if (platform == AE_PLATFORM_IOS)
+    {
+        title = "iOS Deployment";
+        message = "iOS Deployment";
+    }
+    else if (platform == AE_PLATFORM_MAC)
+    {
+        title = "Mac Deployment";
+        message = "Mac Deployment";
+    }
+    else if (platform == AE_PLATFORM_WINDOWS)
+    {
+        title = "Windows Deployment";
+        message = "Windows Deployment";
+    }
+    else if (platform == AE_PLATFORM_HTML5)
+    {
+        title = "Web Deployment";
+        message = "Web Deployment";
+    }
+
+    if (success)
+    {
+        title += " Success";
+        message += " Success";
+    }
+    else
+    {
+        title += " Failed";
+        message += " Failed";
+    }
+
+    uiBuildComplete_ = new UIBuildComplete(context_, title, message, buildFolder, success);
+    uiBuildComplete_->Show();
+
     currentBuild_ = 0;
 }
 
@@ -90,14 +144,6 @@ void BuildSystem::HandleEditorBuild(StringHash eventType, VariantMap& eventData)
     String buildPlatform = eventData[P_PLATFORM].GetString();
     String buildPath = eventData[P_BUILDPATH].GetString();
 
-    if (buildPlatform == "Mac")
-    {
-        buildPath += "/AtomicPlayer.app";
-    }
-
-    Editor* editor = GetSubsystem<Editor>();
-    FileSystem* fileSystem = GetSubsystem<FileSystem>();
-
     if (buildPlatform == "Mac")
     {
         DoBuildMac(buildPath);

+ 6 - 2
Source/AtomicEditor/Source/Build/BuildSystem.h

@@ -10,6 +10,8 @@
 
 using namespace Atomic;
 
+#include "UI/Modal/UIBuildComplete.h"
+
 namespace AtomicEditor
 {
 
@@ -28,7 +30,8 @@ public:
     void LoadBuildSettings(rapidjson::Value::Member* jobject);
     void SaveBuildSettings(rapidjson::PrettyWriter<rapidjson::FileStream>& writer);
 
-    void BuildComplete();
+    void ClearBuildCompleteUI();
+    void BuildComplete(AEEditorPlatform platform,const String& buildFolder, bool success = true);
 
 private:
 
@@ -39,9 +42,10 @@ private:
     void DoBuildWeb(const String& buildPath);
 
     SharedPtr<BuildSettings> buildSettings_;
-
     SharedPtr<BuildBase> currentBuild_;
 
+    SharedPtr<UIBuildComplete> uiBuildComplete_;
+
     void HandleEditorBuild(StringHash eventType, VariantMap& eventData);
 };
 

+ 7 - 10
Source/AtomicEditor/Source/Build/BuildWeb.cpp

@@ -57,13 +57,13 @@ void BuildWeb::Build(const String& buildPath)
     String buildSourceDir = fileSystem->GetAppBundleResourceFolder();
     buildSourceDir += "Deployment/Web";
 
-    fileSystem->CreateDir(buildPath);
+    fileSystem->CreateDir(buildPath_);
 
-    String resourcePackagePath = buildPath + "/AtomicResources.data";
+    String resourcePackagePath = buildPath_ + "/AtomicResources.data";
     GenerateResourcePackage(resourcePackagePath);
 
-    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html", buildPath + "/AtomicPlayer.html");
-    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.js", buildPath + "/AtomicPlayer.js");
+    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html", buildPath_ + "/AtomicPlayer.html");
+    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.js", buildPath_ + "/AtomicPlayer.js");
 
     File file(context_, buildSourceDir + "/AtomicResources_js.template", FILE_READ);
     unsigned size = file.GetSize();
@@ -76,7 +76,7 @@ void BuildWeb::Build(const String& buildPath)
 
     file.Close();
 
-    file.Open(buildPath + "/AtomicResources.data", FILE_READ);
+    file.Open(buildPath_ + "/AtomicResources.data", FILE_READ);
     int rsize = (int) file.GetSize();
     file.Close();
 
@@ -85,15 +85,12 @@ void BuildWeb::Build(const String& buildPath)
 
     resourcejs.Replace("$$ATOMIC_RESOURCES_DATA_REQUEST$$", request);
 
-    file.Open(buildPath + "/AtomicResources.js", FILE_WRITE);
+    file.Open(buildPath_ + "/AtomicResources.js", FILE_WRITE);
     file.Write(resourcejs.CString(), resourcejs.Length());
     file.Close();
 
-    //ProjectUtils* utils = GetSubsystem<ProjectUtils>();
-    //utils->RevealInFinder(GetPath(buildPath));
-
     BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
-    buildSystem->BuildComplete();
+    buildSystem->BuildComplete(AE_PLATFORM_HTML5, buildPath_);
 
     //fileSystem->SystemCommandAsync("/Applications/Firefox.app/Contents/MacOS/firefox");
 

+ 5 - 8
Source/AtomicEditor/Source/Build/BuildWindows.cpp

@@ -68,19 +68,16 @@ void BuildWindows::Build(const String& buildPath)
 
     buildSourceDir += "Deployment/Win64";
 
-    fileSystem->CreateDir(buildPath);
-    fileSystem->CreateDir(buildPath + "/AtomicPlayer_Resources");
+    fileSystem->CreateDir(buildPath_);
+    fileSystem->CreateDir(buildPath_ + "/AtomicPlayer_Resources");
 
-    String resourcePackagePath = buildPath + "/AtomicPlayer_Resources/AtomicResources.pak";
+    String resourcePackagePath = buildPath_ + "/AtomicPlayer_Resources/AtomicResources.pak";
     GenerateResourcePackage(resourcePackagePath);
 
-    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.exe", buildPath + "/AtomicPlayer.exe");
-
-    ProjectUtils* utils = GetSubsystem<ProjectUtils>();
-    utils->RevealInFinder(GetPath(buildPath));
+    fileSystem->Copy(buildSourceDir + "/AtomicPlayer.exe", buildPath_ + "/AtomicPlayer.exe");
 
     BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
-    buildSystem->BuildComplete();
+    buildSystem->BuildComplete(AE_PLATFORM_WINDOWS, buildPath_);
 
 }
 

+ 146 - 0
Source/AtomicEditor/Source/UI/Modal/UIBuildComplete.cpp

@@ -0,0 +1,146 @@
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#include "AtomicEditor.h"
+
+#include <Atomic/Core/Context.h>
+#include "AEEvents.h"
+
+#include "UI/UIMainFrame.h"
+#include "UI/Modal/UIBuildComplete.h"
+
+#include <TurboBadger/tb_widgets_common.h>
+#include <TurboBadger/tb_window.h>
+#include <TurboBadger/tb_message_window.h>
+#include <TurboBadger/tb_editfield.h>
+
+#include <Atomic/UI/TBUI.h>
+
+#include <Build/BuildSystem.h>
+#include <Project/ProjectUtils.h>
+
+using namespace tb;
+
+namespace AtomicEditor
+{
+
+/// Construct.
+UIBuildComplete::UIBuildComplete(Context* context, const String &title, const String &message, const String &buildFolder, bool success) :
+    AEWidget(context)
+  , window_(0)
+  , dimmer_(0)
+{
+
+    buildFolder_ = buildFolder;
+    success_ = success;
+
+    TBUI* tbui = GetSubsystem<TBUI>();
+    dimmer_ = new TBDimmer();
+
+    window_ = new TBWindow();
+    tbui->LoadResourceFile(window_->GetContentRoot(), "AtomicEditor/editor/ui/buildcomplete.tb.txt");
+
+    window_->ResizeToFitContent();
+    delegate_->AddChild(window_);
+
+    message_ = delegate_->GetWidgetByIDAndType<TBTextField>(TBIDC("message"));
+    assert(message_);
+
+    TBButton* reveal = delegate_->GetWidgetByIDAndType<TBButton>(TBIDC("reveal"));
+    assert(reveal);
+
+    if (!success)
+        reveal->SetState(WIDGET_STATE_DISABLED, true);
+
+    message_->SetText(message.CString());
+    window_->SetText(title.CString());
+
+    Center();
+
+    TBWidgetListener::AddGlobalListener(this);
+}
+
+
+/// Destruct.
+UIBuildComplete::~UIBuildComplete()
+{
+    TBWidgetListener::RemoveGlobalListener(this);
+}
+
+bool UIBuildComplete::OnEvent(const TBWidgetEvent &ev)
+{
+
+    BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
+
+    if (ev.type == EVENT_TYPE_CLICK)
+    {
+        if (ev.target->GetID() == TBIDC("ok"))
+        {
+            buildSystem->ClearBuildCompleteUI();
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("reveal"))
+        {
+            ProjectUtils* utils = GetSubsystem<ProjectUtils>();
+            utils->RevealInFinder(buildFolder_);
+            return true;
+        }
+
+    }
+
+    return false;
+}
+
+void UIBuildComplete::SetMessage(const String& message)
+{
+    message_->SetText(message.CString());
+}
+
+void UIBuildComplete::Center()
+{
+    TBUI* tbui = GetSubsystem<TBUI>();
+    TBRect rect = window_->GetRect();
+    TBWidget* root = tbui->GetRootWidget();
+    TBRect bounds(0, 0, root->GetRect().w, root->GetRect().h);
+    window_->SetRect(rect.CenterIn(bounds).MoveIn(bounds).Clip(bounds));
+    delegate_->SetRect(bounds);
+
+}
+
+void UIBuildComplete::Show()
+{
+    assert(!dimmer_->GetParent());
+    TBUI* tbui = GetSubsystem<TBUI>();
+    TBWidget* root = tbui->GetRootWidget();
+    root->AddChild(dimmer_);
+    root->AddChild(delegate_);
+
+}
+
+void UIBuildComplete::Hide()
+{
+    if (dimmer_->GetParent())
+        dimmer_->GetParent()->RemoveChild(dimmer_);
+
+    if (delegate_->GetParent())
+        delegate_->GetParent()->RemoveChild(delegate_);
+}
+
+void UIBuildComplete::OnWidgetDelete(TBWidget *widget)
+{
+    if (widget == window_)
+    {
+        BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
+        buildSystem->ClearBuildCompleteUI();
+    }
+}
+
+bool UIBuildComplete::OnWidgetDying(TBWidget *widget)
+{
+    return false;
+}
+
+
+
+}

+ 58 - 0
Source/AtomicEditor/Source/UI/Modal/UIBuildComplete.h

@@ -0,0 +1,58 @@
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#pragma once
+
+#include <UI/AEWidget.h>
+
+#include <TurboBadger/tb_widgets_listener.h>
+
+namespace tb
+{
+    class TBWindow;
+    class TBDimmer;
+    class TBTextField;
+}
+
+using namespace Atomic;
+using namespace tb;
+
+namespace AtomicEditor
+{
+
+class UIBuildComplete : public AEWidget, private TBWidgetListener
+{
+    OBJECT(UIBuildComplete);
+
+public:
+    /// Construct.
+    UIBuildComplete(Context* context, const String& title, const String& message, const String& buildFolder, bool success);
+    /// Destruct.
+    virtual ~UIBuildComplete();
+
+    void Show();
+    void Hide();
+    void Center();
+
+    bool OnEvent(const TBWidgetEvent &ev);
+
+    void SetMessage(const String& message);    
+
+    // TBWidgetListener
+    void OnWidgetDelete(TBWidget *widget);
+    bool OnWidgetDying(TBWidget *widget);
+
+private:
+
+    String buildFolder_;
+    bool success_;
+
+    TBWindow* window_;
+    TBDimmer* dimmer_;
+    TBTextField* message_;
+
+};
+
+
+}

+ 0 - 1
Source/AtomicEditor/Source/UI/Modal/UIBuildSettings.cpp

@@ -98,7 +98,6 @@ UIBuildSettings::UIBuildSettings(Context* context):
     else if (platform == AE_PLATFORM_IOS)
         SelectIOSSettings();
 
-
     window_->ResizeToFitContent();
     Center();
 

+ 1 - 0
Source/AtomicEditor/Source/UI/Modal/UIModalOps.cpp

@@ -268,6 +268,7 @@ bool UIModalOps::OnWidgetDying(TBWidget *widget)
 
 UIModalOps::~UIModalOps()
 {
+    TBWidgetListener::RemoveGlobalListener(this);
 
 }