Browse Source

Updated signature of getting a edit resource to allow passing a line number so that once the editor loads, it auto navigates to that line.

Shaddock Heath 8 years ago
parent
commit
cbbafcaec3

+ 4 - 2
Script/AtomicEditor/hostExtensions/HostExtensionServices.ts

@@ -392,10 +392,12 @@ export class UIServicesProvider extends ServicesProvider<Editor.HostExtensions.U
 
     /**
      * Will load a resource editor or navigate to an already loaded resource editor by path
+     * @param resourcePath full path to resource to load 
+     * @param lineNumber optional line number to navigate to
      * @return {Editor.ResourceEditor}
      */
-    loadResourceEditor(resourcePath: string): Editor.ResourceEditor {
-        this.mainFrame.resourceframe.sendEvent(Editor.EditorEditResourceEventData({path: resourcePath}));
+    loadResourceEditor(resourcePath: string, lineNumber?: number): Editor.ResourceEditor {
+        this.mainFrame.resourceframe.sendEvent(Editor.EditorEditResourceEventData({path: resourcePath, lineNumber: lineNumber}));
         return this.mainFrame.resourceframe.currentResourceEditor;
     }
 

+ 1 - 20
Script/AtomicEditor/hostExtensions/languageExtensions/TypescriptLanguageExtension.ts

@@ -479,7 +479,6 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
             `Compilation Completed in ${results.duration}ms`
         ].join("\n");
 
-        //let window = this.serviceRegistry.uiServices.showModalError("TypeScript Compilation Results", message);
         let window = this.serviceRegistry.uiServices.showNonModalWindow("TypeScript Compilation Results", "AtomicEditor/editor/ui/typescriptresults.tb.txt", (ev:Atomic.UIWidgetEvent) => {
             if (ev.type == Atomic.UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
                 if (ev.target.id == "close") {
@@ -487,10 +486,7 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
                 } else {
                     let diag = links[ev.target.id];
                     if (diag) {
-                        const editor = this.serviceRegistry.uiServices.loadResourceEditor(diag.file) as Editor.JSResourceEditor;
-
-                        // TODO: need something here to wait for editor to fully load
-                        editor.gotoLineNumber(diag.row + 1);
+                        this.serviceRegistry.uiServices.loadResourceEditor(diag.file, diag.row + 1);
                     }
                 }
             }
@@ -499,20 +495,5 @@ export default class TypescriptLanguageExtension implements Editor.HostExtension
         let textField = window.getWidget<Atomic.UIEditField>("msg");
         textField.setText(message);
         textField.reformat(true);
-
-        /*
-        window.subscribeToEvent(Atomic.UIWidgetEvent(ev => {
-            if (ev.type == Atomic.UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
-                let diag = links[ev.target.id];
-                if (diag) {
-                    const editor = this.serviceRegistry.uiServices.loadResourceEditor(diag.file) as Editor.JSResourceEditor;
-
-                    // TODO: need something here to wait for editor to fully load
-                    editor.gotoLineNumber(diag.row + 1);
-                }
-            }
-        }));
-        */
-
     }
 }

+ 1 - 1
Script/AtomicEditor/resources/ResourceOps.ts

@@ -326,7 +326,7 @@ export function CreateNewAnimationPreviewScene(reportError: boolean = true): boo
     //Reset the animation viewer scene to a blank scene
     animFile = templateFile;
 
-    resourceOps.sendEvent(Editor.EditorEditResourceEventData({ path: animFilename }));
+    resourceOps.sendEvent(Editor.EditorEditResourceEventData({ path: animFilename, lineNumber: 0 }));
 
     return true;
 

+ 2 - 2
Script/AtomicEditor/ui/ResourceEditorProvider.ts

@@ -69,7 +69,7 @@ export default class ResourceEditorProvider {
     /**
      * Returns an editor for the provided resource type or null
      */
-    getEditor(resourcePath: string, tabContainer) {
+    getEditor(resourcePath: string, tabContainer, lineNumber: number) {
         let editorBuilder: Editor.Extensions.ResourceEditorBuilder;
         this.customEditorRegistry.forEach((builder) => {
             if (builder.canHandleResource(resourcePath)) {
@@ -88,7 +88,7 @@ export default class ResourceEditorProvider {
         }
 
         if (editorBuilder) {
-            return editorBuilder.getEditor(this.resourceFrame, resourcePath, tabContainer);
+            return editorBuilder.getEditor(this.resourceFrame, resourcePath, tabContainer, lineNumber);
         } else {
             return null;
         }

+ 1 - 1
Script/AtomicEditor/ui/frames/ProjectFrame.ts

@@ -259,7 +259,7 @@ class ProjectFrame extends ScriptWidget {
 
                     } else {
 
-                        this.sendEvent(Editor.EditorEditResourceEventData({ "path": asset.path }));
+                        this.sendEvent(Editor.EditorEditResourceEventData({ "path": asset.path, lineNumber: 0 }));
                     }
 
                 }

+ 1 - 1
Script/AtomicEditor/ui/frames/ResourceFrame.ts

@@ -94,7 +94,7 @@ class ResourceFrame extends ScriptWidget {
 
         }
 
-        var editor = this.resourceEditorProvider.getEditor(ev.path, this.tabcontainer);
+        var editor = this.resourceEditorProvider.getEditor(ev.path, this.tabcontainer, ev.lineNumber);
         if (editor) {
 
             // cast and add editor lookup on widget itself

+ 4 - 4
Script/AtomicEditor/ui/modal/UIResourceOps.ts

@@ -186,7 +186,7 @@ export class CreateComponent extends ModalWindow {
 
                         this.hide();
 
-                        this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile }));
+                        this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile, lineNumber: 0 }));
 
                     }
 
@@ -272,7 +272,7 @@ export class CreateScript extends ModalWindow {
 
                         this.hide();
 
-                        this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile }));
+                        this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile, lineNumber: 0 }));
 
                     }
 
@@ -330,7 +330,7 @@ export class CreateScene extends ModalWindow {
 
                     this.hide();
 
-                    this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile }));
+                    this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile, lineNumber: 0 }));
 
                 }
 
@@ -382,7 +382,7 @@ export class CreateMaterial extends ModalWindow {
 
                     this.hide();
 
-                    this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile }));
+                    this.sendEvent(Editor.EditorEditResourceEventData({ path: outputFile, lineNumber: 0 }));
 
                 }
 

+ 4 - 1
Script/AtomicEditor/ui/resourceEditors/AbstractTextResourceEditorBuilder.ts

@@ -42,7 +42,7 @@ export abstract class AbstractTextResourceEditorBuilder implements Editor.Extens
         return `atomic://${ToolCore.toolEnvironment.toolDataDir}CodeEditor/MonacoEditor.html`;
     }
 
-    getEditor(resourceFrame: Atomic.UIWidget, resourcePath: string, tabContainer: Atomic.UITabContainer): Editor.ResourceEditor {
+    getEditor(resourceFrame: Atomic.UIWidget, resourcePath: string, tabContainer: Atomic.UITabContainer, lineNumber: number): Editor.ResourceEditor {
         const editor = new Editor.JSResourceEditor(resourcePath, tabContainer, this.getEditorUrl());
 
         // one time subscriptions waiting for the web view to finish loading.  This event
@@ -51,6 +51,9 @@ export abstract class AbstractTextResourceEditorBuilder implements Editor.Extens
         editor.subscribeToEvent(WebView.WebViewLoadEndEvent((data) => {
             editor.unsubscribeFromEvent(WebView.WebViewLoadEndEventType);
             this.loadCode(<Editor.JSResourceEditor>editor, resourcePath);
+            if (lineNumber > 0) {
+                (<Editor.JSResourceEditor>editor).gotoLineNumber(lineNumber);
+            }
         }));
 
         // Cannot subscribe to WebMessage until the .ts side can return a Handler.Success() message

+ 6 - 2
Script/TypeScript/EditorWork.d.ts

@@ -119,10 +119,12 @@ declare module Editor.Extensions {
         canHandleResource(resourcePath: string) : boolean;
         /**
          * Generates a resource editor for the provided resource type
+         * @param  resourceFrame 
          * @param  resourcePath
          * @param  tabContainer
+         * @param  lineNumber
          */
-        getEditor(resourceFrame: Atomic.UIWidget, resourcePath: string, tabContainer: Atomic.UITabContainer) : Editor.ResourceEditor;
+        getEditor(resourceFrame: Atomic.UIWidget, resourcePath: string, tabContainer: Atomic.UITabContainer, lineNumber: number) : Editor.ResourceEditor;
     }
 }
 
@@ -264,9 +266,11 @@ declare module Editor.HostExtensions {
         
         /**
          * Will load a resource editor or navigate to an already loaded resource editor by path
+         * @param path The path to the resource to load
+         * @param lineNumber optional line number to navigate to
          * @return {Editor.ResourceEditor}
          */
-        loadResourceEditor(path: string): Editor.ResourceEditor;
+        loadResourceEditor(path: string, lineNumber?: number): Editor.ResourceEditor;
 
         /**
          * Register a custom editor.  These editors will override editors in the standard editor list if

+ 1 - 0
Source/AtomicEditor/EditorMode/AEEditorEvents.h

@@ -165,6 +165,7 @@ ATOMIC_EVENT(E_EDITORSAVERESOURCENOTIFICATION, EditorSaveResourceNotification)
 ATOMIC_EVENT(E_EDITOREDITRESOURCE, EditorEditResource)
 {
     ATOMIC_PARAM(P_PATH, Path);     // string
+    ATOMIC_PARAM(P_LINENUMBER, LineNumber); // int optional
 }
 
 // command to delete a resource