Browse Source

Merge pull request #64 from LumaDigital/master

Updated example for plugin API changes.
JoshEngebretson 9 years ago
parent
commit
67dc7fc33c

+ 26 - 1
EditorPluginExample/Resources/EditorData/Example.plugin.js

@@ -7,6 +7,7 @@ var ExamplePluginService = (function () {
         this.description = "This service demonstrates plugin functionality functionality.";
         this.serviceLocator = null;
         this.extensionWindow = null;
+        this.lastObjectName = null;
         this.handleWidgetEvent = function (ev) {
             if (!_this.extensionWindow)
                 return;
@@ -33,6 +34,8 @@ var ExamplePluginService = (function () {
         }
     };
     ExamplePluginService.prototype.projectUnloaded = function () {
+        this.serviceLocator.uiServices.removeProjectContextMenuItemSource(ExamplePluginUILabel);
+        this.serviceLocator.uiServices.removeHierarchyContextMenuItemSource(ExamplePluginUILabel);
         this.serviceLocator.uiServices.removePluginMenuItemSource(ExamplePluginUILabel);
         Atomic.print("ExamplePluginService.projectUnloaded");
         if (this.serviceLocator) {
@@ -42,7 +45,9 @@ var ExamplePluginService = (function () {
     };
     ExamplePluginService.prototype.projectLoaded = function (ev) {
         Atomic.print("ExamplePluginService.projectLoaded");
-        var menu = this.serviceLocator.uiServices.createPluginMenuItemSource(ExamplePluginUILabel, { "Open": ["exampleplugin open"] });
+        this.serviceLocator.uiServices.createPluginMenuItemSource(ExamplePluginUILabel, { "Open": ["exampleplugin open"] });
+        this.serviceLocator.uiServices.createHierarchyContextMenuItemSource(ExamplePluginUILabel, { "Get name": ["exampleplugin hierarchy context"] });
+        this.serviceLocator.uiServices.createProjectContextMenuItemSource(ExamplePluginUILabel, { "Get name": ["exampleplugin project context"] });
     };
     ExamplePluginService.prototype.playerStarted = function () {
         Atomic.print("ExamplePluginService.playerStarted");
@@ -56,11 +61,31 @@ var ExamplePluginService = (function () {
         }
         return false;
     };
+    ExamplePluginService.prototype.hierarchyContextItemClicked = function (node, refid) {
+        Atomic.print("ExamplePluginService.hierarchyContextItemClicked: " + node.name + " " + refid);
+        if (refid == "exampleplugin hierarchy context") {
+            this.lastObjectName = "node " + node.name;
+            return true;
+        }
+        return false;
+    };
+    ExamplePluginService.prototype.projectContextItemClicked = function (asset, refid) {
+        Atomic.print("ExamplePluginService.projectContextItemClicked: " + asset.name + " " + refid);
+        if (refid == "exampleplugin project context") {
+            this.lastObjectName = "asset " + asset.name;
+            return true;
+        }
+        return false;
+    };
     ExamplePluginService.prototype.getWidgets = function () {
         if (!this.extensionWindow)
             return;
         this.helloLabel = this.extensionWindow.getWidget("example_hello");
         this.nameField = this.extensionWindow.getWidget("example_name");
+        if (this.lastObjectName) {
+            this.nameField.text = this.lastObjectName;
+            this.lastObjectName = null;
+        }
     };
     return ExamplePluginService;
 })();

+ 37 - 2
EditorPluginExample/Resources/EditorData/Example.plugin.ts

@@ -15,6 +15,8 @@ class ExamplePluginService implements Editor.HostExtensions.HostEditorService, E
     private helloLabel: Atomic.UITextField;
     private nameField: Atomic.UIEditField;
 
+    private lastObjectName: string = null;
+
     initialize(serviceLoader: Editor.HostExtensions.HostServiceLocator) {
         Atomic.print("ExamplePluginService.initialize");
 
@@ -25,6 +27,8 @@ class ExamplePluginService implements Editor.HostExtensions.HostEditorService, E
         }
     }
     projectUnloaded() {
+        this.serviceLocator.uiServices.removeProjectContextMenuItemSource(ExamplePluginUILabel);
+        this.serviceLocator.uiServices.removeHierarchyContextMenuItemSource(ExamplePluginUILabel);
         this.serviceLocator.uiServices.removePluginMenuItemSource(ExamplePluginUILabel);
 
         Atomic.print("ExamplePluginService.projectUnloaded");
@@ -35,7 +39,9 @@ class ExamplePluginService implements Editor.HostExtensions.HostEditorService, E
     }
     projectLoaded(ev: Editor.EditorEvents.LoadProjectEvent) {
         Atomic.print("ExamplePluginService.projectLoaded");
-        let menu = this.serviceLocator.uiServices.createPluginMenuItemSource(ExamplePluginUILabel, { "Open" : ["exampleplugin open"] });
+        this.serviceLocator.uiServices.createPluginMenuItemSource(ExamplePluginUILabel, { "Open" : ["exampleplugin open"] });
+        this.serviceLocator.uiServices.createHierarchyContextMenuItemSource(ExamplePluginUILabel, { "Get name" : ["exampleplugin hierarchy context"]});
+        this.serviceLocator.uiServices.createProjectContextMenuItemSource(ExamplePluginUILabel, { "Get name" : ["exampleplugin project context"]});
     }
     playerStarted() {
         Atomic.print("ExamplePluginService.playerStarted");
@@ -54,12 +60,41 @@ class ExamplePluginService implements Editor.HostExtensions.HostEditorService, E
         return false;
     }
 
+    hierarchyContextItemClicked(node: Atomic.Node, refid: string): boolean {
+        Atomic.print("ExamplePluginService.hierarchyContextItemClicked: " + node.name + " " + refid);
+
+        if (refid == "exampleplugin hierarchy context") {
+            this.lastObjectName = "node " + node.name;
+
+            return true;
+        }
+
+        return false;
+    }
+
+    projectContextItemClicked(asset: ToolCore.Asset, refid: string): boolean {
+        Atomic.print("ExamplePluginService.projectContextItemClicked: " + asset.name + " " + refid);
+
+        if (refid == "exampleplugin project context") {
+            this.lastObjectName = "asset " + asset.name;
+
+            return true;
+        }
+
+        return false;
+    }
+
     getWidgets() {
         if (!this.extensionWindow)
             return;
 
         this.helloLabel = <Atomic.UITextField>this.extensionWindow.getWidget("example_hello");
         this.nameField = <Atomic.UIEditField>this.extensionWindow.getWidget("example_name");
+
+        if (this.lastObjectName) {
+            this.nameField.text = this.lastObjectName;
+            this.lastObjectName = null;
+        }
     }
 
     handleWidgetEvent = (ev: Atomic.UIWidgetEvent): boolean => { // => notation used to bind "this" to the method
@@ -76,7 +111,7 @@ class ExamplePluginService implements Editor.HostExtensions.HostEditorService, E
 
             if (ev.target.id == "example_speak") {
 
-                this.helloLabel.text = "Hello "+this.nameField.text;
+                this.helloLabel.text = "Hello " + this.nameField.text;
 
                 return true;
             }

+ 8 - 1
EditorPluginExample/typings/Atomic/EditorWork.d.ts

@@ -7,6 +7,7 @@
 
 /// <reference path="Atomic.d.ts" />
 /// <reference path="Editor.d.ts" />
+/// <reference path="ToolCore.d.ts" />
 
 declare module Editor.EditorEvents {
 
@@ -254,11 +255,17 @@ declare module Editor.HostExtensions {
     export interface ProjectServicesProvider extends Editor.Extensions.ServicesProvider<ProjectServicesEventListener> { }
 
     export interface UIServicesEventListener extends Editor.Extensions.ServiceEventListener {
-        menuItemClicked?(refId: string): boolean;
+        menuItemClicked?(refid: string): boolean;
+        projectContextItemClicked?(asset: ToolCore.Asset, refid: string): boolean;
+        hierarchyContextItemClicked?(node: Atomic.Node, refid: string): boolean;
     }
     export interface UIServicesProvider extends Editor.Extensions.ServicesProvider<UIServicesEventListener> {
         createPluginMenuItemSource(id: string, items: any): Atomic.UIMenuItemSource;
         removePluginMenuItemSource(id: string);
+        createHierarchyContextMenuItemSource(id: string, items: any): Atomic.UIMenuItemSource;
+        removeHierarchyContextMenuItemSource(id: string);
+        createProjectContextMenuItemSource(id: string, items: any): Atomic.UIMenuItemSource;
+        removeProjectContextMenuItemSource(id: string);
         showModalWindow(windowText: string, uifilename: string, handleWidgetEventCB: (ev: Atomic.UIWidgetEvent) => void): Editor.Modal.ExtensionWindow;
     }
 }