--- /dev/null
+package org.simantics.scl.ui.editor2;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
+import org.simantics.scl.compiler.errors.Locations;\r
+import org.simantics.scl.ui.browser.SCLDefinitionSelectionDialog;\r
+\r
+public class OpenSCLDefinition extends AbstractHandler {\r
+\r
+ @Override\r
+ public Object execute(ExecutionEvent event) throws ExecutionException {\r
+ SCLDefinitionSelectionDialog dialog = new SCLDefinitionSelectionDialog(\r
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());\r
+ if(dialog.open() == SCLDefinitionSelectionDialog.OK) {\r
+ SCLValue value = (SCLValue)dialog.getFirstResult();\r
+ if(value != null)\r
+ openDefinition(value);\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ public static void openDefinition(SCLValue value) {\r
+ openDefinition(value.getName().module, value.definitionLocation);\r
+ }\r
+ \r
+ public static void openDefinition(String moduleName, long location) {\r
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();\r
+ if(page == null)\r
+ return;\r
+ SCLModuleEditorInput input = new StandardSCLModuleEditorInput(moduleName);\r
+ try {\r
+ SCLModuleEditor2 editor = (SCLModuleEditor2)page.openEditor(input, "org.simantics.scl.ui.editor2");\r
+ if(location != Locations.NO_LOCATION) {\r
+ int begin = Locations.beginOf(location);\r
+ int end = Locations.endOf(location);\r
+ editor.selectAndReveal(begin, end-begin);\r
+ }\r
+ } catch (PartInitException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+}\r