]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenSCLDefinition.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / OpenSCLDefinition.java
1 package org.simantics.scl.ui.editor2;\r
2 \r
3 import org.eclipse.core.commands.AbstractHandler;\r
4 import org.eclipse.core.commands.ExecutionEvent;\r
5 import org.eclipse.core.commands.ExecutionException;\r
6 import org.eclipse.ui.IWorkbenchPage;\r
7 import org.eclipse.ui.PartInitException;\r
8 import org.eclipse.ui.PlatformUI;\r
9 import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
10 import org.simantics.scl.compiler.errors.Locations;\r
11 import org.simantics.scl.ui.browser.SCLDefinitionSelectionDialog;\r
12 \r
13 public class OpenSCLDefinition extends AbstractHandler {\r
14 \r
15     @Override\r
16     public Object execute(ExecutionEvent event) throws ExecutionException {\r
17         SCLDefinitionSelectionDialog dialog = new SCLDefinitionSelectionDialog(\r
18                 PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());\r
19         if(dialog.open() == SCLDefinitionSelectionDialog.OK) {\r
20             SCLValue value = (SCLValue)dialog.getFirstResult();\r
21             if(value != null)\r
22                 openDefinition(value);\r
23         }\r
24         return null;\r
25     }\r
26     \r
27     public static void openDefinition(SCLValue value) {\r
28         openDefinition(value.getName().module, value.definitionLocation);\r
29     }\r
30     \r
31     public static void openDefinition(String moduleName, long location) {\r
32         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();\r
33         if(page == null)\r
34             return;\r
35         SCLModuleEditorInput input = new StandardSCLModuleEditorInput(moduleName);\r
36         try {\r
37             SCLModuleEditor2 editor = (SCLModuleEditor2)page.openEditor(input, "org.simantics.scl.ui.editor2");\r
38             if(location != Locations.NO_LOCATION) {\r
39                 int begin = Locations.beginOf(location);\r
40                 int end = Locations.endOf(location);\r
41                 editor.selectAndReveal(begin, end-begin);\r
42             }\r
43         } catch (PartInitException e) {\r
44             e.printStackTrace();\r
45         }\r
46     }\r
47 \r
48 }\r