Browse Source

Added status messages to the typescript compiler and updated the signature for sendEvent in the service locator.

Shaddock Heath 8 years ago
parent
commit
07aadfc85b

+ 8 - 2
Script/AtomicEditor/hostExtensions/ServiceLocator.ts

@@ -71,9 +71,15 @@ export class ServiceLocatorType implements Editor.HostExtensions.HostServiceLoca
      * @param  {string} eventType
      * @param  {any} data
      */
-    sendEvent(eventType: string, data: any) {
+    sendEvent<T extends Atomic.EventCallbackMetaData>(eventCallbackMetaData:T)
+    sendEvent(eventType: string, data: any)
+    sendEvent(eventTypeOrMetaData: any, data?: any) {
         if (this.eventDispatcher) {
-            this.eventDispatcher.sendEvent(eventType, data);
+            if  (data) {
+                this.eventDispatcher.sendEvent(eventTypeOrMetaData, data);
+            } else {
+                this.eventDispatcher.sendEvent(eventTypeOrMetaData);
+            }
         }
     }
 

+ 22 - 0
Script/AtomicEditor/hostExtensions/languageExtensions/TypescriptLanguageExtension.ts

@@ -408,6 +408,12 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
     doFullCompile() {
         const editor = this.serviceRegistry.uiServices.getCurrentResourceEditor();
         if (editor && editor.typeName == "JSResourceEditor" && this.isValidFiletype(editor.fullPath)) {
+            this.serviceRegistry.sendEvent(Editor.EditorModalEventData({
+              type: Editor.EDITOR_MODALINFO,
+              title: "Compiling TypeScript",
+              message: "Compiling TypeScript..."
+            }));
+
             const jsEditor = <Editor.JSResourceEditor>editor;
             jsEditor.webView.webClient.executeJavaScript(`TypeScript_DoFullCompile('${JSON.stringify(this.buildTsConfig())}');`);
         } else {
@@ -464,6 +470,7 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
             infoColor = "#333333";
         }
 
+        let errors = false;
         let messageArray = results.annotations.filter(result => {
             // If we are compiling the lib.d.ts or some other built-in library and it was successful, then
             // we really don't need to display that result since it's just noise.  Only display it if it fails
@@ -482,6 +489,7 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
                 message += `<color ${errorColor}>${result.text} at line ${result.row + 1} col ${result.column}</color> <widget TBSkinImage: skin: MagnifierBitmap, text:"..." id: link${linkId}>`;
                 links["link" + linkId] = result;
                 linkId++;
+                errors = true;
             }
             return message;
         }).join("\n");
@@ -490,6 +498,20 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
             messageArray = "Success";
         }
 
+        if (errors) {
+            this.serviceRegistry.sendEvent(Editor.EditorModalEventData({
+              type: Editor.EDITOR_MODALINFO,
+              title: "Compiling TypeScript",
+              message: "Errors detected while compiling TypeScript."
+            }));
+        } else {
+            this.serviceRegistry.sendEvent(Editor.EditorModalEventData({
+              type: Editor.EDITOR_MODALINFO,
+              title: "Compiling TypeScript",
+              message: "Successfully compiled TypeScript."
+            }));
+        }
+
         let message = [
             "Compiler Options: ",
             JSON.stringify(results.compilerOptions, null, 2),

+ 15 - 2
Script/AtomicWebViewEditor/clientExtensions/ClientExtensionServices.ts

@@ -35,10 +35,23 @@ interface EventSubscription {
 export class EventDispatcher implements Editor.Extensions.EventDispatcher {
     private subscriptions: EventSubscription[] = [];
 
-    sendEvent(eventType: string, data: any) {
+    sendEvent<T extends Atomic.EventCallbackMetaData>(eventCallbackMetaData:T)
+    sendEvent(eventType: string, data: any)
+    sendEvent(eventTypeOrWrapped: any, data?: any) {
+        let eventType: string;
+        let eventData: any;
+        if (typeof(eventTypeOrWrapped) == "string") {
+            eventType = eventTypeOrWrapped;
+            eventData = data;
+        } else {
+            const metaData = eventTypeOrWrapped as Atomic.EventCallbackMetaData;
+            eventType = metaData._eventType;
+            eventData = metaData._callbackData;
+        }
+
         this.subscriptions.forEach(sub => {
             if (sub.eventName == eventType) {
-                sub.callback(data);
+                sub.callback(eventData);
             }
         });
     }

+ 8 - 2
Script/AtomicWebViewEditor/clientExtensions/ServiceLocator.ts

@@ -53,9 +53,15 @@ export class ClientServiceLocatorType implements Editor.ClientExtensions.ClientS
      * @param  {string} eventType
      * @param  {any} data
      */
-    sendEvent(eventType: string, data: any) {
+    sendEvent<T extends Atomic.EventCallbackMetaData>(eventCallbackMetaData:T)
+    sendEvent(eventType: string, data: any)
+    sendEvent(eventTypeOrWrapped: any, data?: any) {
         if (this.eventDispatcher) {
-            this.eventDispatcher.sendEvent(eventType, data);
+            if (data) {
+                this.eventDispatcher.sendEvent(eventTypeOrWrapped, data);
+            } else {
+                this.eventDispatcher.sendEvent(eventTypeOrWrapped);
+            }
         }
     }
 

+ 1 - 0
Script/TypeScript/EditorWork.d.ts

@@ -64,6 +64,7 @@ declare module Editor.Extensions {
          */
         sendEvent(eventType: string, data: any);
         sendEvent<T extends Atomic.EventMetaData>(eventType:string, data?:T);
+        sendEvent<T extends Atomic.EventCallbackMetaData>(eventCallbackMetaData:T);
 
         /**
          * Subscribe to an event and provide a callback.  This can be used by services to subscribe to custom events