Browse Source

Refactor menu item sources, add skin icons to menu items

Josh Engebretson 10 years ago
parent
commit
6046e43f5f

+ 2 - 0
Script/AtomicEditor/tsconfig.json

@@ -23,6 +23,7 @@
         "./ui/MainFrameMenu.ts",
         "./ui/MainFrameMenu.ts",
         "./ui/MainToolbar.ts",
         "./ui/MainToolbar.ts",
         "./ui/ProjectFrame.ts",
         "./ui/ProjectFrame.ts",
+        "./ui/ProjectFrameMenu.ts",
         "./ui/ProjectFrameOld.ts",
         "./ui/ProjectFrameOld.ts",
         "./ui/ResourceFrame.ts",
         "./ui/ResourceFrame.ts",
         "./ui/ScriptWidget.ts",
         "./ui/ScriptWidget.ts",
@@ -42,6 +43,7 @@
         "./ui/license/ActivationSuccessWindow.ts",
         "./ui/license/ActivationSuccessWindow.ts",
         "./ui/license/ActivationWindow.ts",
         "./ui/license/ActivationWindow.ts",
         "./ui/license/EULAWindow.ts",
         "./ui/license/EULAWindow.ts",
+        "./ui/menus/MenuItemSources.ts",
         "./ui/modal/CreateProject.ts",
         "./ui/modal/CreateProject.ts",
         "./ui/modal/MessageModal.ts",
         "./ui/modal/MessageModal.ts",
         "./ui/modal/ModalOps.ts",
         "./ui/modal/ModalOps.ts",

+ 3 - 1
Script/AtomicEditor/ui/MainFrame.ts

@@ -11,6 +11,8 @@ import UIEvents = require("./UIEvents");
 import ScriptWidget = require("./ScriptWidget");
 import ScriptWidget = require("./ScriptWidget");
 import MainFrameMenu = require("./MainFrameMenu");
 import MainFrameMenu = require("./MainFrameMenu");
 
 
+import MenuItemSources = require("./menus/MenuItemSources");
+
 class MainFrame extends ScriptWidget {
 class MainFrame extends ScriptWidget {
 
 
     constructor() {
     constructor() {
@@ -95,7 +97,7 @@ class MainFrame extends ScriptWidget {
         if (this.menu.handlePopupMenu(target, refid))
         if (this.menu.handlePopupMenu(target, refid))
             return true;
             return true;
 
 
-        var src = this.menu.getMenuItemSource(target.id);
+        var src = MenuItemSources.getMenuItemSource(target.id);
 
 
         if (src) {
         if (src) {
 
 

+ 42 - 88
Script/AtomicEditor/ui/MainFrameMenu.ts

@@ -2,120 +2,74 @@
 import strings = require("./EditorStrings");
 import strings = require("./EditorStrings");
 import EditorEvents = require("../editor/EditorEvents");
 import EditorEvents = require("../editor/EditorEvents");
 import EditorUI = require("./EditorUI");
 import EditorUI = require("./EditorUI");
+import MenuItemSources = require("./menus/MenuItemSources");
 
 
 class MainFrameMenu extends Atomic.ScriptObject {
 class MainFrameMenu extends Atomic.ScriptObject {
 
 
-  constructor() {
+    constructor() {
 
 
-    super();
+        super();
 
 
-    this.srcLookup["menu atomic editor"] = this.createMenuItemSource(editorItems);
-    this.srcLookup["menu edit"] = this.createMenuItemSource(editItems);
-    this.srcLookup["menu file"] = this.createMenuItemSource(fileItems);
+        MenuItemSources.createMenuItemSource("menu atomic editor", editorItems);
+        MenuItemSources.createMenuItemSource("menu edit", editItems);
+        MenuItemSources.createMenuItemSource("menu file", fileItems);
 
 
-  }
+    }
 
 
-  handlePopupMenu(target: Atomic.UIWidget, refid: string): boolean {
+    handlePopupMenu(target: Atomic.UIWidget, refid: string): boolean {
 
 
-      if (target.id == "menu atomic editor popup") {
+        if (target.id == "menu atomic editor popup") {
 
 
-          if (refid == "quit") {
+            if (refid == "quit") {
 
 
-            this.sendEvent(EditorEvents.Quit);
-            return true;
+                this.sendEvent(EditorEvents.Quit);
+                return true;
 
 
-          }
+            }
 
 
-      } else if (target.id == "menu edit popup") {
+        } else if (target.id == "menu edit popup") {
 
 
-          if (refid == "edit play") {
+            if (refid == "edit play") {
 
 
-              new ToolCore.PlayCmd().run();
-              return true;
+                new ToolCore.PlayCmd().run();
+                return true;
 
 
-          }
+            }
 
 
-          return false;
+            return false;
 
 
-      } else if (target.id == "menu file popup") {
+        } else if (target.id == "menu file popup") {
 
 
-          if (refid == "file new project") {
+            if (refid == "file new project") {
 
 
-            var mo = EditorUI.getModelOps();
-            mo.showNewProject();
+                var mo = EditorUI.getModelOps();
+                mo.showNewProject();
 
 
-            return true;
+                return true;
 
 
-          }
+            }
 
 
-          if (refid == "file save file") {
+            if (refid == "file save file") {
 
 
-             //TODO: this is horrible
-              //if (this.resourceframe.currentResourceEditor)
-              //    this.resourceframe.currentResourceEditor.save();
+                //TODO: this is horrible
+                //if (this.resourceframe.currentResourceEditor)
+                //    this.resourceframe.currentResourceEditor.save();
 
 
-              return true;
+                return true;
 
 
-          }
+            }
 
 
-          return false;
-      }
+            return false;
+        }
 
 
-  }
+    }
 
 
-  getMenuItemSource(id: string): Atomic.UIMenuItemSource {
-
-      return this.srcLookup[id];
-
-  }
-
-  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 == 1) {
-
-                  src.addItem(new UIMenuItem(key, value[0]));
-
-              } else if (typeof value === 'object' && value.length == 2) {
-
-                  src.addItem(new UIMenuItem(key, value[0], strings.EditorString.GetString(value[1])));
-
-              }
-
-          }
-
-      }
-
-      return src;
-
-  }
-
-  srcLookup = {};
 
 
 }
 }
 
 
 export = MainFrameMenu;
 export = MainFrameMenu;
 
 
 // initialization
 // initialization
-
-var UIMenuItemSource = Atomic.UIMenuItemSource;
-var UIMenuItem = Atomic.UIMenuItem;
 var StringID = strings.StringID;
 var StringID = strings.StringID;
 
 
 var editorItems = {
 var editorItems = {
@@ -150,12 +104,12 @@ var editItems = {
 
 
 var fileItems = {
 var fileItems = {
 
 
-  "New Project": ["file new project"],
-  "Open Project": ["file open project"],
-  "Save Project": ["file save project"],
-  "-1": null,
-  "Close Project": ["file close project"],
-  "-2": null,
-  "Save File": ["file save file"],
-  "Close File": ["file close file"]
+    "New Project": ["file new project"],
+    "Open Project": ["file open project"],
+    "Save Project": ["file save project"],
+    "-1": null,
+    "Close Project": ["file close project"],
+    "-2": null,
+    "Save File": ["file save file"],
+    "Close File": ["file close file"]
 }
 }

+ 27 - 8
Script/AtomicEditor/ui/ProjectFrame.ts

@@ -3,15 +3,20 @@
 import ScriptWidget = require("./ScriptWidget");
 import ScriptWidget = require("./ScriptWidget");
 import Editor = require("../editor/Editor");
 import Editor = require("../editor/Editor");
 import EditorEvents = require("../editor/EditorEvents");
 import EditorEvents = require("../editor/EditorEvents");
+import ProjectFrameMenu = require("./ProjectFrameMenu");
+import MenuItemSources = require("./menus/MenuItemSources");
 
 
 class ProjectFrame extends ScriptWidget {
 class ProjectFrame extends ScriptWidget {
 
 
     folderList: Atomic.UIListView;
     folderList: Atomic.UIListView;
+    menu: ProjectFrameMenu;
 
 
     constructor(parent: Atomic.UIWidget) {
     constructor(parent: Atomic.UIWidget) {
 
 
         super();
         super();
 
 
+        this.menu = new ProjectFrameMenu();
+
         this.load("AtomicEditor/editor/ui/projectframe.tb.txt");
         this.load("AtomicEditor/editor/ui/projectframe.tb.txt");
 
 
         this.gravity = Atomic.UI_GRAVITY_TOP_BOTTOM;
         this.gravity = Atomic.UI_GRAVITY_TOP_BOTTOM;
@@ -34,18 +39,32 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    handleWidgetEvent(data): boolean {
+    handleWidgetEvent(data: Atomic.UIWidgetEvent): boolean {
 
 
         if (data.type == Atomic.UI_EVENT_TYPE_CLICK) {
         if (data.type == Atomic.UI_EVENT_TYPE_CLICK) {
 
 
+            var id = data.target.id;
+
+            if (this.menu.handlePopupMenu(data.target, data.refid))
+                return true;
+
+            // create
+            if (id == "menu create") {
+
+                var src = MenuItemSources.getMenuItemSource("project create items");
+                var menu = new Atomic.UIMenuWindow(data.target, "create popup");
+                menu.show(src);
+                return true;
+
+            }
+
+
             var db = ToolCore.getAssetDatabase();
             var db = ToolCore.getAssetDatabase();
 
 
             var fs = Atomic.getFileSystem();
             var fs = Atomic.getFileSystem();
 
 
             if (data.target && data.target.id.length) {
             if (data.target && data.target.id.length) {
 
 
-                var id = data.target.id;
-
                 if (id == "folderList_") {
                 if (id == "folderList_") {
 
 
                     var list = <Atomic.UISelectList> data.target;
                     var list = <Atomic.UISelectList> data.target;
@@ -91,13 +110,13 @@ class ProjectFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    rescan(asset:ToolCore.Asset) {
+    rescan(asset: ToolCore.Asset) {
 
 
-      var db = ToolCore.getAssetDatabase();
+        var db = ToolCore.getAssetDatabase();
 
 
-      db.scan();
-      this.refresh();
-      this.refreshContent(asset);
+        db.scan();
+        this.refresh();
+        this.refreshContent(asset);
 
 
     }
     }
 
 

+ 52 - 0
Script/AtomicEditor/ui/ProjectFrameMenu.ts

@@ -0,0 +1,52 @@
+
+import strings = require("./EditorStrings");
+import EditorEvents = require("../editor/EditorEvents");
+import EditorUI = require("./EditorUI");
+import MenuItemSources = require("./menus/MenuItemSources");
+
+class ProjectFrameMenus extends Atomic.ScriptObject {
+
+    constructor() {
+
+        super();
+
+        MenuItemSources.createMenuItemSource("project create items", createItems);
+
+    }
+
+    handlePopupMenu(target: Atomic.UIWidget, refid: string): boolean {
+
+        if (!target || !refid) return;
+
+        if (target.id == "create popup") {
+
+            if (refid == "create_folder") {
+
+                return true;
+
+            }
+
+            if (refid == "create_script") {
+
+                return true;
+
+            }
+
+        }
+
+        return false;
+
+    }
+
+}
+
+export = ProjectFrameMenus;
+
+// initialization
+var StringID = strings.StringID;
+
+var createItems = {
+    "Folder": ["create_folder", undefined, "Folder.icon"],
+    "-1": null,
+    "Script": ["create_script", undefined, "JavascriptBitmap"]
+};

+ 17 - 16
Script/AtomicEditor/ui/inspector/InspectorFrame.ts

@@ -58,35 +58,36 @@ class InspectorFrame extends ScriptWidget {
 
 
     inspectAsset(asset: ToolCore.Asset) {
     inspectAsset(asset: ToolCore.Asset) {
 
 
-       if (asset.importerTypeName == "ModelImporter") {
+        if (asset.importerTypeName == "ModelImporter") {
 
 
-         var container = this.getWidget("inspectorcontainer");
-         container.deleteAllChildren();
+            var container = this.getWidget("inspectorcontainer");
+            container.deleteAllChildren();
 
 
-         var inspector = new ModelInspector();
-         container.addChild(inspector);
+            var inspector = new ModelInspector();
+            container.addChild(inspector);
 
 
-         inspector.inspect(asset);
+            inspector.inspect(asset);
 
 
 
 
-       }
+        }
 
 
         if (asset.importerTypeName == "MaterialImporter") {
         if (asset.importerTypeName == "MaterialImporter") {
 
 
-          var cache = Atomic.getResourceCache();
+            var cache = Atomic.getResourceCache();
 
 
-          var material = <Atomic.Material> cache.getResource("Material", asset.path);
+            var material = <Atomic.Material> cache.getResource("Material", asset.path);
 
 
-          if (!material)
-              return;
+            if (!material) {
+                return;
+            }
 
 
-          var container = this.getWidget("inspectorcontainer");
-          container.deleteAllChildren();
+            var container = this.getWidget("inspectorcontainer");
+            container.deleteAllChildren();
 
 
-          var materialInspector = new MaterialInspector();
-          container.addChild(inspector);
+            var materialInspector = new MaterialInspector();
+            container.addChild(materialInspector);
 
 
-          materialInspector.inspect(asset, material);
+            materialInspector.inspect(asset, material);
 
 
         }
         }
 
 

+ 65 - 0
Script/AtomicEditor/ui/menus/MenuItemSources.ts

@@ -0,0 +1,65 @@
+
+import strings = require("../EditorStrings");
+import EditorEvents = require("../../editor/EditorEvents");
+import EditorUI = require("../EditorUI");
+
+var UIMenuItemSource = Atomic.UIMenuItemSource;
+var UIMenuItem = Atomic.UIMenuItem;
+var StringID = strings.StringID;
+
+var srcLookup = {};
+
+export function getMenuItemSource(id: string): Atomic.UIMenuItemSource {
+
+    return srcLookup[id];
+
+}
+
+export function createMenuItemSource(id: string, items: any): Atomic.UIMenuItemSource {
+
+    var src = srcLookup[id] = 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 == 1) {
+
+                src.addItem(new UIMenuItem(key, value[0]));
+
+            } else if (typeof value === 'object' && value.length == 2) {
+
+                src.addItem(new UIMenuItem(key, value[0], strings.EditorString.GetString(value[1])));
+
+            } else if (typeof value === 'object' && value.length == 3) {
+
+                var str = "";
+                if (value[1])
+                    str = strings.EditorString.GetString(value[1]);
+
+                var skinBg = "";
+                if (value[2])
+                    skinBg = value[2];
+
+                src.addItem(new UIMenuItem(key, value[0], str, skinBg));
+
+            }
+
+        }
+
+    }
+
+    return src;
+
+}

+ 1 - 1
Script/TypeScript/Atomic.d.ts

@@ -7133,7 +7133,7 @@ declare module Atomic {
 
 
    export class UIMenuItem extends UISelectItem {
    export class UIMenuItem extends UISelectItem {
 
 
-      constructor(str?: string, id?: string, shortcut?: string);
+      constructor(str?: string, id?: string, shortcut?: string, skinBg?: string);
 
 
 
 
    }
    }

+ 8 - 2
Source/Atomic/UI/UIMenubar.cpp

@@ -68,9 +68,10 @@ private:
 
 
 // UI IMPLEMENTATION
 // UI IMPLEMENTATION
 
 
-UIMenuItem::UIMenuItem(Context* context, const String& str, const String& id, const String& shortcut):
+UIMenuItem::UIMenuItem(Context* context, const String& str, const String& id, const String& shortcut, const String& skinBg):
     UISelectItem(context, str, id),
     UISelectItem(context, str, id),
-    shortcut_(shortcut)
+    shortcut_(shortcut),
+    skinBg_(skinBg)
 {
 {
 
 
 }
 }
@@ -93,6 +94,11 @@ tb::TBGenericStringItem* UIMenuItem::GetTBItem()
         item = new MenubarItem(str_.CString(), subSource_->GetTBItemSource());
         item = new MenubarItem(str_.CString(), subSource_->GetTBItemSource());
     }
     }
 
 
+    if (skinBg_.Length())
+    {
+        item->SetSkinImage(TBIDC(skinBg_.CString()));
+    }
+
     return item;
     return item;
 
 
 }
 }

+ 2 - 1
Source/Atomic/UI/UIMenubar.h

@@ -14,7 +14,7 @@ class UIMenuItem : public UISelectItem
 
 
 public:
 public:
 
 
-    UIMenuItem(Context* context, const String& str = String::EMPTY, const String& id = String::EMPTY, const String& shortcut = String::EMPTY);
+    UIMenuItem(Context* context, const String& str = String::EMPTY, const String& id = String::EMPTY, const String& shortcut = String::EMPTY, const String& skinBg = String::EMPTY);
     virtual ~UIMenuItem();
     virtual ~UIMenuItem();
 
 
     tb::TBGenericStringItem* GetTBItem();
     tb::TBGenericStringItem* GetTBItem();
@@ -22,6 +22,7 @@ public:
 private:
 private:
 
 
     String shortcut_;
     String shortcut_;
+    String skinBg_;
 
 
 };
 };