Browse Source

A bunch of TS work

Josh Engebretson 10 years ago
parent
commit
0d3ed7c401

+ 4 - 2
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/AtomicWork.d.ts

@@ -5,10 +5,12 @@
 declare module Atomic
 declare module Atomic
 {
 {
 	export function getInput() : Input;
 	export function getInput() : Input;
-	export function getGraphics() : Graphics; 		
+	export function getGraphics() : Graphics;
+	export function getFileSystem(); FileSystem;
 }
 }
 
 
 declare module ToolCore
 declare module ToolCore
 {
 {
-	export function getToolEnvironment() : ToolEnvironment; 		
+	export function getToolEnvironment() : ToolEnvironment;
+	export function getToolSystem() : ToolSystem;
 }
 }

+ 53 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/editor/Editor.ts

@@ -0,0 +1,53 @@
+
+import MainFrame = require("../ui/MainFrame");
+import UIEvents = require("../ui/UIEvents");
+
+
+export function getEditor():Editor {
+  return TheEditor;
+}
+
+var TheEditor:Editor;
+
+export class Editor extends Atomic.JSScriptObject
+{
+
+  project: ToolCore.Project;
+  view: Atomic.UIView;
+  mainframe: MainFrame.MainFrame;
+
+  loadProject(projectPath:string) {
+
+    var system = ToolCore.getToolSystem();
+
+    if (system.project) {
+
+      this.sendEvent(UIEvents.MessageModalEvent,
+        { type:"error", title:"Project already loaded", message:"Project already loaded"} );
+
+    }
+
+    system.loadProject(projectPath);
+
+  }
+
+  constructor() {
+
+    super();
+
+    TheEditor = this;
+
+    var graphics = Atomic.getGraphics();
+
+    this.view = new Atomic.UIView();
+
+    this.mainframe = new MainFrame.MainFrame();
+
+    this.view.addChild(this.mainframe);
+
+    // set initial size
+    this.mainframe.setSize(graphics.width, graphics.height);
+
+  }
+
+}

+ 4 - 11
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/main.ts

@@ -4,16 +4,9 @@
 
 
 /// <reference path="./AtomicWork.d.ts" />
 /// <reference path="./AtomicWork.d.ts" />
 
 
-import ui = require("./ui/ui");
-
-print(ui.ui);
-
-var env = ToolCore.getToolEnvironment();
-
-var system = ToolCore.getToolSystem();
-
-system.loadProject("/Users/josh/Dev/atomic/AtomicExamples/NewSpaceGame");
-
-
+import Editor = require("./editor/Editor");
 
 
+var TheEditor = new Editor.Editor();
 
 
+TheEditor.loadProject("/Users/josh/Dev/atomic/AtomicExamples/NewSpaceGame");
+TheEditor.loadProject("/Users/josh/Dev/atomic/AtomicExamples/NewSpaceGame");

+ 13 - 2
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/tsconfig.json

@@ -11,6 +11,17 @@
         "./**/*.ts"
         "./**/*.ts"
     ],
     ],
     "files": [
     "files": [
-        "./main.ts"
+        "./AtomicWork.d.ts",
+        "./editor/Editor.ts",
+        "./main.ts",
+        "./ui/EditorStrings.ts",
+        "./ui/MainFrame.ts",
+        "./ui/MainFrameMenu.ts",
+        "./ui/ProjectFrame.ts",
+        "./ui/ScriptWidget.ts",
+        "./ui/UIEvents.ts",
+        "./ui/modal/MessageModal.ts",
+        "./ui/modal/ModalOps.ts",
+        "./ui/ui.ts"
     ]
     ]
-}
+}

+ 13 - 12
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/MainFrame.ts

@@ -1,24 +1,28 @@
-
-import strings = require("./EditorStrings");
 import menubar = require("./MainFrameMenu");
 import menubar = require("./MainFrameMenu");
 import scriptwidget = require("./ScriptWidget");
 import scriptwidget = require("./ScriptWidget");
+import projectframe = require("./ProjectFrame");
+import MessageModal = require("./modal/MessageModal");
+import UIEvents = require("./UIEvents");
 
 
 export class MainFrame extends scriptwidget.ScriptWidget {
 export class MainFrame extends scriptwidget.ScriptWidget {
 
 
-	constructor(view: Atomic.UIView, width: number, height: number) {
+	projectframe:projectframe.ProjectFrame;
+	private messagemodal:MessageModal.MessageModal = new MessageModal.MessageModal();
+
+	constructor() {
 
 
 		super();
 		super();
 
 
 		this.load("AtomicEditor/editor/ui/mainframe.tb.txt");
 		this.load("AtomicEditor/editor/ui/mainframe.tb.txt");
 
 
-		this.setSize(width, height);
+		this.projectframe = new projectframe.ProjectFrame(this);
 
 
 	}
 	}
 
 
-	onEventClick(target: Atomic.UIWidget, refid: string): void {
+	onEventClick(target: Atomic.UIWidget, refid: string): boolean {
 
 
 		if (this.handlePopupMenu(target, refid))
 		if (this.handlePopupMenu(target, refid))
-			return;
+			return true;
 
 
 		var src = menubar.getMenuItemSource(target.id);
 		var src = menubar.getMenuItemSource(target.id);
 
 
@@ -26,9 +30,12 @@ export class MainFrame extends scriptwidget.ScriptWidget {
 
 
 			var menu = new Atomic.UIMenuWindow(target, target.id + " popup");
 			var menu = new Atomic.UIMenuWindow(target, target.id + " popup");
 			menu.show(src);
 			menu.show(src);
+			return true;
 
 
 		}
 		}
 
 
+		return false;
+
 	}
 	}
 
 
 
 
@@ -55,10 +62,4 @@ export class MainFrame extends scriptwidget.ScriptWidget {
 		}
 		}
 	}
 	}
 
 
-	// override example	
-	setSize(width: number, height: number): void {
-
-		super.setSize(width, height);
-
-	}
 }
 }

+ 84 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ProjectFrame.ts

@@ -0,0 +1,84 @@
+
+
+import scriptwidget = require("./ScriptWidget");
+
+export class ProjectFrame extends scriptwidget.ScriptWidget {
+
+  folderList:Atomic.UIListView;
+
+	constructor(parent: Atomic.UIWidget) {
+
+		super();
+
+		this.load("AtomicEditor/editor/ui/projectframe.tb.txt");
+
+    this.gravity = Atomic.UI.GRAVITY_TOP_BOTTOM;
+
+    var projectviewcontainer = parent.getWidget("projectviewcontainer");
+
+    projectviewcontainer.addChild(this);
+
+    var foldercontainer = this.getWidget("foldercontainer");
+
+    var folderList = this.folderList = new Atomic.UIListView();
+
+    folderList.id = "folderList";
+
+    foldercontainer.addChild(folderList);
+
+    folderList.addItem("Resources", "Folder.icon", "myid")
+
+    var fileSystem = Atomic.getFileSystem();
+
+    var folders = fileSystem.scanDir("/", "", Atomic.SCAN_DIRS, false);
+
+    print(folders);
+
+
+
+	}
+
+	onEventClick(target: Atomic.UIWidget, refid: string): boolean {
+
+      return false;
+
+	}
+
+
+}
+
+
+
+/*
+var UI = Atomic.UI;
+var UIWidget = Atomic.UIWidget;
+var UIListView = Atomic.UIListView;
+var fileSystem = Atomic.getFileSystem();
+
+var mainframe = require("./mainframe").mainframe;
+
+var projectframe = exports.projectframe = new UIWidget();
+
+projectframe.gravity = UI.GRAVITY_TOP_BOTTOM;
+
+// load the UI
+projectframe.load("AtomicEditor/editor/ui/projectframe.tb.txt");
+
+// snap the project frame into place
+var projectviewcontainer = mainframe.getWidget("projectviewcontainer");
+projectviewcontainer.addChild(projectframe);
+
+var foldercontainer = projectframe.getWidget("foldercontainer");
+
+var folderList = new UIListView();
+
+folderList.id = "folderList";
+
+foldercontainer.addChild(folderList);
+
+//folderList.addItem("Resources", "Folder.icon", "myid")
+
+var folders = fileSystem.scanDir("/", "", Atomic.SCAN_DIRS, false);
+
+print(folders);
+*/

+ 6 - 6
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ScriptWidget.ts

@@ -5,16 +5,18 @@ export class ScriptWidget extends Atomic.UIWidget {
 	constructor() {
 	constructor() {
 
 
 		super();
 		super();
-		
+
 		// JS way of binding method
 		// JS way of binding method
 		// this.subscribeToEvent(this, "WidgetEvent", this.handleWidgetEvent.bind(this));
 		// this.subscribeToEvent(this, "WidgetEvent", this.handleWidgetEvent.bind(this));
-		
+
 		// TypeScript-ey
 		// TypeScript-ey
 		this.subscribeToEvent(this, "WidgetEvent", (data) => this.handleWidgetEvent(data));
 		this.subscribeToEvent(this, "WidgetEvent", (data) => this.handleWidgetEvent(data));
 
 
 	}
 	}
 
 
-	onEventClick(target: Atomic.UIWidget, refid: string): void {
+	onEventClick(target: Atomic.UIWidget, refid: string): boolean {
+
+		return false;
 
 
 	}
 	}
 
 
@@ -23,9 +25,7 @@ export class ScriptWidget extends Atomic.UIWidget {
 
 
 		if (data.type == Atomic.UI.EVENT_TYPE_CLICK) {
 		if (data.type == Atomic.UI.EVENT_TYPE_CLICK) {
 
 
-			this.onEventClick(data.target, data.refid);
-
-			return true;
+			return this.onEventClick(data.target, data.refid);
 
 
 		}
 		}
 
 

+ 2 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/UIEvents.ts

@@ -0,0 +1,2 @@
+
+export const MessageModalEvent = "MessageModalEvent";

+ 35 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/modal/MessageModal.ts

@@ -0,0 +1,35 @@
+
+import UIEvents = require("../UIEvents");
+import Editor = require("../../editor/Editor");
+
+export class MessageModal extends Atomic.JSScriptObject
+{
+
+  showErrorWindow(title:string, message:string):void {
+
+    var mainframe = Editor.getEditor().mainframe;
+
+    new Atomic.UIMessageWindow(mainframe, "modal_error").show(title, message, 640, 360);
+
+  }
+
+
+  constructor() {
+
+    super();
+
+    // Subscribe to graphics subsystems screen mode switching, so we can adjust the widget size
+    this.subscribeToEvent(UIEvents.MessageModalEvent, (data) => {
+
+      if (data.type == "error") {
+
+        this.showErrorWindow(data.title, data.message);
+
+      }
+
+    });
+
+
+  }
+
+}

+ 0 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/modal/ModalOps.ts


+ 10 - 0
Source/Atomic/UI/UI.cpp

@@ -8,6 +8,7 @@
 #include <TurboBadger/tb_node_tree.h>
 #include <TurboBadger/tb_node_tree.h>
 #include <TurboBadger/tb_widgets_reader.h>
 #include <TurboBadger/tb_widgets_reader.h>
 #include <TurboBadger/tb_window.h>
 #include <TurboBadger/tb_window.h>
+#include <TurboBadger/tb_message_window.h>
 #include <TurboBadger/tb_editfield.h>
 #include <TurboBadger/tb_editfield.h>
 #include <TurboBadger/tb_select.h>
 #include <TurboBadger/tb_select.h>
 #include <TurboBadger/image/tb_image_widget.h>
 #include <TurboBadger/image/tb_image_widget.h>
@@ -38,6 +39,7 @@ using namespace tb;
 #include "UIClickLabel.h"
 #include "UIClickLabel.h"
 #include "UICheckBox.h"
 #include "UICheckBox.h"
 #include "UISelectList.h"
 #include "UISelectList.h"
+#include "UIMessageWindow.h"
 
 
 namespace tb
 namespace tb
 {
 {
@@ -524,6 +526,14 @@ UIWidget* UI::WrapWidget(tb::TBWidget* widget)
         return nwidget;
         return nwidget;
     }
     }
 
 
+    if (widget->IsOfType<TBMessageWindow>())
+    {
+        UIMessageWindow* nwidget = new UIMessageWindow(context_, NULL, "", false);
+        nwidget->SetWidget(widget);
+        widgetWrap_[widget] = nwidget;
+        return nwidget;
+    }
+
     return 0;
     return 0;
 }
 }
 
 

+ 50 - 0
Source/Atomic/UI/UIMessageWindow.cpp

@@ -0,0 +1,50 @@
+
+#include <TurboBadger/tb_widgets.h>
+#include <TurboBadger/tb_widgets_common.h>
+#include <TurboBadger/tb_message_window.h>
+
+#include "../IO/Log.h"
+
+#include "UI.h"
+#include "UIEvents.h"
+#include "UIMessageWindow.h"
+
+using namespace tb;
+
+namespace Atomic
+{
+
+UIMessageWindow::UIMessageWindow(Context* context, UIWidget* target, const String& id, bool createWidget) : UIWindow(context, false)
+{
+    if (createWidget)
+    {
+        widget_ = new TBMessageWindow(target ? target->GetInternalWidget() : 0, TBIDC(id.CString()));
+        widget_->SetDelegate(this);
+        GetSubsystem<UI>()->WrapWidget(this, widget_);
+    }
+}
+
+UIMessageWindow::~UIMessageWindow()
+{
+
+}
+
+void UIMessageWindow::Show(const String &title, const String &message, int width, int height)
+{
+    if (!widget_)
+        return;
+
+    TBMessageWindowSettings settings;
+    settings.styling = true;
+    settings.dimmer = true;
+
+    ((TBMessageWindow*)widget_)->Show(title.CString(), message.CString(), &settings, width, height);
+
+}
+
+bool UIMessageWindow::OnEvent(const tb::TBWidgetEvent &ev)
+{
+    return UIWindow::OnEvent(ev);
+}
+
+}

+ 28 - 0
Source/Atomic/UI/UIMessageWindow.h

@@ -0,0 +1,28 @@
+
+#pragma once
+
+#include "UIWindow.h"
+
+namespace Atomic
+{
+
+class UIMessageWindow : public UIWindow
+{
+    OBJECT(UIMessageWindow)
+
+public:
+
+    UIMessageWindow(Context* context, UIWidget* target, const String& id, bool createWidget = true);
+    virtual ~UIMessageWindow();
+
+    void Show(const String& title, const String& message, int width, int height);
+
+protected:
+
+    virtual bool OnEvent(const tb::TBWidgetEvent &ev);
+
+private:
+
+};
+
+}

+ 1 - 0
Source/AtomicJS/Javascript/JSUI.cpp

@@ -48,6 +48,7 @@ JSUI::JSUI(Context* context) : Object(context),
     uiTypes_["UICheckBox"] = true;
     uiTypes_["UICheckBox"] = true;
     uiTypes_["UISelectLost"] = true;
     uiTypes_["UISelectLost"] = true;
     uiTypes_["UIListView"] = true;
     uiTypes_["UIListView"] = true;
+    uiTypes_["UIMessageWindow"] = true;
 }
 }
 
 
 JSUI::~JSUI()
 JSUI::~JSUI()

+ 1 - 1
Source/AtomicJS/Packages/Atomic/UI.json

@@ -6,7 +6,7 @@
 	"classes" : ["UIWidget", "UILayout", "UIView", "UIWindow", "UIButton", "UITextField",
 	"classes" : ["UIWidget", "UILayout", "UIView", "UIWindow", "UIButton", "UITextField",
 								"UISelectItem", "UISelectItemSource", "UIMenuWindow", "UIEditField",
 								"UISelectItem", "UISelectItemSource", "UIMenuWindow", "UIEditField",
 								"UIImageWidget", "UIClickLabel", "UICheckBox", "UIMenuItem", "UIMenuItemSource",
 								"UIImageWidget", "UIClickLabel", "UICheckBox", "UIMenuItem", "UIMenuItemSource",
-								"UISelectList", "UIListView"],
+								"UISelectList", "UIListView", "UIMessageWindow"],
 	"overloads" : {
 	"overloads" : {
 	}
 	}
 }
 }