Browse Source

Some typescript work

Josh Engebretson 10 years ago
parent
commit
846346f5a6

+ 14 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/AtomicWork.d.ts

@@ -0,0 +1,14 @@
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/Atomic.d.ts" />
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/ToolCore.d.ts" />
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/Editor.d.ts" />
+
+declare module Atomic
+{
+	export function getInput() : Input;
+	export function getGraphics() : Graphics; 		
+}
+
+declare module ToolCore
+{
+	export function getToolEnvironment() : ToolEnvironment; 		
+}

+ 19 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/main.ts

@@ -0,0 +1,19 @@
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/Atomic.d.ts" />
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/ToolCore.d.ts" />
+/// <reference path="/Users/josh/Dev/thunderbeast/AtomicGameEngine/Bin/Editor.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");
+
+
+
+

+ 16 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/tsconfig.json

@@ -0,0 +1,16 @@
+{
+    "compilerOptions": {
+        "target": "es5",
+        "module": "commonjs",
+        "declaration": false,
+        "noImplicitAny": false,
+        "removeComments": true,
+        "noLib": false
+    },
+    "filesGlob": [
+        "./**/*.ts"
+    ],
+    "files": [
+        "./main.ts"
+    ]
+}

+ 67 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/EditorStrings.ts

@@ -0,0 +1,67 @@
+
+export enum StringID {
+
+	RevealInFinder,
+	ShortcutUndo,
+	ShortcutRedo,
+	ShortcutCut,
+	ShortcutCopy,
+	ShortcutPaste,
+	ShortcutSelectAll,
+	ShortcutFind,
+	ShortcutFindNext,
+	ShortcutFindPrev,
+	ShortcutBeautify,
+	ShortcutCloseFile,
+	ShortcutSaveFile,
+	ShortcutPlay,
+	ShortcutBuild,
+	ShortcutBuildSettings
+}
+
+export class EditorString {
+
+	public static GetString(id: StringID):string {
+
+		return EditorString.lookup[id];
+
+	}
+
+	private static lookup: { [id: number]: string; } = {};
+
+	private static Ctor = (() => {
+
+		var lookup = EditorString.lookup;
+
+		var shortcutKey = "⌘";
+
+		lookup[StringID.RevealInFinder] = "Reveal in Finder";
+
+		// Mac
+		lookup[StringID.ShortcutRedo] = "⇧⌘Z";
+		lookup[StringID.ShortcutFindNext] = "⌘G";
+		lookup[StringID.ShortcutFindPrev] = "⇧⌘G";
+		lookup[StringID.ShortcutBuildSettings] = "⇧⌘B";
+
+		// General
+		lookup[StringID.ShortcutUndo] = shortcutKey + "Z";
+
+		lookup[StringID.ShortcutCut] = shortcutKey + "X";
+		lookup[StringID.ShortcutCopy] = shortcutKey + "C";
+		lookup[StringID.ShortcutPaste] = shortcutKey + "V";
+		lookup[StringID.ShortcutSelectAll] = shortcutKey + "A";
+		lookup[StringID.ShortcutFind] = shortcutKey + "F";
+
+		lookup[StringID.ShortcutBeautify] = shortcutKey + "I";
+
+		lookup[StringID.ShortcutSaveFile] = shortcutKey + "S";
+		lookup[StringID.ShortcutCloseFile] = shortcutKey + "W";
+
+		lookup[StringID.ShortcutPlay] = shortcutKey + "P";
+
+		lookup[StringID.ShortcutBuild] = shortcutKey + "B";
+
+	})();
+
+}
+	

+ 93 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/MainFrame.ts

@@ -0,0 +1,93 @@
+
+import strings = require("./EditorStrings");
+import menubar = require("./MainFrameMenu");
+
+export class MainFrame extends Atomic.UIWidget {
+
+	constructor(view: Atomic.UIView, width: number, height: number) {
+
+		super();
+
+		this.load("AtomicEditor/editor/ui/mainframe.tb.txt");
+
+		this.setSize(width, height);
+
+		this.subscribeToEvent(this, "WidgetEvent", function(data) {
+			
+			// this no longer refers to this MainFrame, 
+			// instead it is the this of the function call 
+			// look into fixing this
+
+			if (data.handler.handleMenuBarEvent(data)) return true;
+
+			return false;
+
+		});
+
+	}
+
+	handlePopupMenu(data): boolean {
+
+		var target = data.target;
+
+		if (target && target.id == "menu atomic editor popup") {
+
+			if (data.refid == "quit") {
+
+				// todo, send a request for file saves, etc
+				Atomic.getEngine().exit();
+
+				return true;
+
+			}
+
+		}
+
+		if (target && target.id == "menu edit popup") {
+
+			if (data.refid == "edit play") {
+
+				new ToolCore.PlayCmd().run();
+
+				return true;
+
+			}
+
+		}
+
+
+	}
+
+	handleMenuBarEvent(data): boolean {
+
+		if (this.handlePopupMenu(data))
+			return true;
+
+		if (data.type == Atomic.UI.EVENT_TYPE_CLICK) {
+
+			//if (mainframe.handleMenuAtomicEditor(data)) return true;
+
+			var target = data.target;
+
+			var src = menubar.getMenuItemSource(target.id);
+
+			if (src) {
+
+				var menu = new Atomic.UIMenuWindow(target, target.id + " popup");
+				menu.show(src);
+				return true;
+
+			}
+
+		}
+
+		return false;
+
+	}
+
+	setSize(width: number, height: number): void {
+
+		super.setSize(width, height);
+
+	}
+}

+ 68 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/MainFrameMenu.ts

@@ -0,0 +1,68 @@
+
+import strings = require("./EditorStrings");
+
+var UIMenuItemSource = Atomic.UIMenuItemSource;
+var UIMenuItem = Atomic.UIMenuItem;
+
+var StringID = strings.StringID;
+
+var editItems = {
+
+  "Undo" : ["edit undo", StringID.ShortcutUndo],
+  "Redo" : ["edit redo", StringID.ShortcutRedo],
+  "-1" : null,
+  "Cut" : ["edit cut", StringID.ShortcutCut],
+  "Copy" : ["edit copy", StringID.ShortcutCopy],
+  "Paste" : ["edit paste", StringID.ShortcutPaste],
+  "Select All" : ["edit select all", StringID.ShortcutSelectAll],
+  "-2" : null,
+  "Find" : ["edit find", StringID.ShortcutFind],
+  "Find Next" : ["edit find next", StringID.ShortcutFindNext],
+  "Find Prev" : ["edit find prev", StringID.ShortcutFindPrev],
+  "-3" : null,
+  "Format Code" : ["edit format code", StringID.ShortcutBeautify],
+  "-4" : null,
+  "Play" : ["edit play", StringID.ShortcutPlay]
+  
+};
+
+var srcLookup = {};
+
+srcLookup["menu edit"] = createMenuItemSource(editItems);
+
+export function getMenuItemSource(id:string):Atomic.UIMenuItemSource {
+  return srcLookup[id];  
+}
+
+function createMenuItemSource(items:any):Atomic.UIMenuItemSource {
+
+  var src = new UIMenuItemSource();
+
+  for (var key in items) {
+    
+    if (items.hasOwnProperty(key)) {
+
+      var value = items[key];
+
+      if (typeof value === 'string') {
+
+        src.addItem(new UIMenuItem(key, value));
+
+      } else if (value == null) {
+
+        src.addItem(new UIMenuItem(key));
+
+      } else if (typeof value === 'object' && value.length == 2) {
+
+        src.addItem(new UIMenuItem(key, value[0], strings.EditorString.GetString(value[1])));
+
+      }
+
+    }
+
+  }
+
+  return src;
+
+}
+

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

@@ -0,0 +1,27 @@
+
+import MainFrame = require("./MainFrame");
+
+export class MyUI {
+	
+	constructor() {
+
+		var graphics = Atomic.getGraphics();
+
+		this.view = new Atomic.UIView();
+
+		this.mainframe = new MainFrame.MainFrame(this.view, graphics.width, graphics.height);
+
+		this.view.addChild(this.mainframe);
+
+	}
+
+	view: Atomic.UIView;
+
+	mainframe: MainFrame.MainFrame;
+
+
+}
+
+export var ui = new MyUI();
+
+

+ 4 - 4
Source/AtomicEditorWork/Application/AEEditorApp.cpp

@@ -55,22 +55,22 @@ void AEEditorApp::Start()
     // Instantiate and register the Javascript subsystem
     vm_ = javascript->InstantiateVM("MainVM");
     vm_->InitJSContext();
-    vm_->SetModuleSearchPaths("AtomicEditor/javascript");
+    vm_->SetModuleSearchPaths("AtomicEditor/typescript");
 
     jsapi_init_toolcore(vm_);
     jsapi_init_editor(vm_);
 
-    SharedPtr<File> file (GetSubsystem<ResourceCache>()->GetFile("AtomicEditor/javascript/main.js"));
+    SharedPtr<File> file (GetSubsystem<ResourceCache>()->GetFile("AtomicEditor/typescript/main.js"));
 
     if (file.Null())
     {
-        ErrorExit("Unable to load AtomicEditor/javascript/main.js");
+        ErrorExit("Unable to load AtomicEditor/typescript/main.js");
         return;
     }
 
     if (!vm_->ExecuteFile(file))
     {
-        ErrorExit("Error executing AtomicEditor/javascript/main.js");
+        ErrorExit("Error executing AtomicEditor/typescript/main.js");
         return;
     }