Guest User

Untitled

a guest
Jun 21st, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.63 KB | None | 0 0
  1. package edu.gatech.hava.hdt.views.solution;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import org.eclipse.core.resources.IMarker;
  6. import org.eclipse.core.runtime.CoreException;
  7. import org.eclipse.jface.action.Action;
  8. import org.eclipse.jface.action.IMenuListener;
  9. import org.eclipse.jface.action.IMenuManager;
  10. import org.eclipse.jface.action.IToolBarManager;
  11. import org.eclipse.jface.action.MenuManager;
  12. import org.eclipse.jface.action.Separator;
  13. import org.eclipse.jface.dialogs.MessageDialog;
  14. import org.eclipse.jface.text.BadLocationException;
  15. import org.eclipse.jface.text.IDocument;
  16. import org.eclipse.jface.viewers.DoubleClickEvent;
  17. import org.eclipse.jface.viewers.IDoubleClickListener;
  18. import org.eclipse.jface.viewers.ISelection;
  19. import org.eclipse.jface.viewers.IStructuredSelection;
  20. import org.eclipse.jface.viewers.TreeViewer;
  21. import org.eclipse.swt.layout.GridData;
  22. import org.eclipse.swt.widgets.Composite;
  23. import org.eclipse.swt.widgets.Menu;
  24. import org.eclipse.swt.widgets.Tree;
  25. import org.eclipse.ui.IActionBars;
  26. import org.eclipse.ui.IFileEditorInput;
  27. import org.eclipse.ui.ISharedImages;
  28. import org.eclipse.ui.IWorkbench;
  29. import org.eclipse.ui.IWorkbenchActionConstants;
  30. import org.eclipse.ui.IWorkbenchPage;
  31. import org.eclipse.ui.IWorkbenchWindow;
  32. import org.eclipse.ui.PlatformUI;
  33. import org.eclipse.ui.ide.IDE;
  34. import org.eclipse.ui.part.ViewPart;
  35. import org.eclipse.ui.texteditor.AbstractTextEditor;
  36.  
  37. import edu.gatech.hava.engine.HEngine;
  38. import edu.gatech.hava.engine.HReference;
  39. import edu.gatech.hava.engine.HReferenceToken;
  40. import edu.gatech.hava.hdt.views.HavaViewPlugin;
  41. import edu.gatech.hava.hdt.views.IHavaSolutionView;
  42. import edu.gatech.hava.hdt.views.solution.tree.RefNode;
  43.  
  44. public class HavaSolutionView extends ViewPart implements IHavaSolutionView {
  45.  
  46. private TreeViewer viewer;
  47. private Action openReferenceAction;
  48. private Action hideCommentsAction;
  49. private Action hideIndexedVariablesAction;
  50. private Action hideStructuresAction;
  51. private Action hideIntegersAction;
  52. private Action hideRealNumbersAction;
  53. private Action hideBooleansAction;
  54. private SolutionViewerFilter treeFilter;
  55.  
  56. private IFileEditorInput input;
  57. private ReportContentProvider contentProvider;
  58.  
  59. /**
  60. * The constructor.
  61. */
  62. public HavaSolutionView() {
  63. }
  64.  
  65. public void setHavaEngine(final IFileEditorInput input, final HEngine engine) {
  66.  
  67. this.input = input;
  68. contentProvider.setHavaEngine(engine);
  69.  
  70. viewer.refresh();
  71.  
  72. }
  73.  
  74. /**
  75. * This is a callback that will allow us
  76. * to create the viewer and initialize it.
  77. */
  78. public void createPartControl(final Composite parent) {
  79.  
  80. contentProvider = new ReportContentProvider();
  81.  
  82. final Tree tree = new Tree(parent, 0);
  83. tree.setLayoutData(new GridData(GridData.FILL_BOTH));
  84.  
  85. viewer = new TreeViewer(tree);
  86.  
  87. treeFilter = new SolutionViewerFilter();
  88. viewer.addFilter(treeFilter);
  89.  
  90. viewer.setContentProvider(contentProvider);
  91. viewer.setLabelProvider(new ReportLabelProvider());
  92. viewer.setInput(getViewSite());
  93.  
  94. viewer.expandAll();
  95.  
  96. // Create the help context id for the viewer's control
  97. PlatformUI.getWorkbench().getHelpSystem().setHelp(
  98. viewer.getControl(), "hava_dev_toolkit.viewer");
  99. makeActions();
  100. hookContextMenu();
  101. hookDoubleClickAction();
  102. contributeToActionBars();
  103.  
  104. }
  105.  
  106.  
  107.  
  108. private void hookContextMenu() {
  109. MenuManager menuMgr = new MenuManager("#PopupMenu");
  110. menuMgr.setRemoveAllWhenShown(true);
  111. menuMgr.addMenuListener(new IMenuListener() {
  112. @Override
  113. public void menuAboutToShow(final IMenuManager manager) {
  114. HavaSolutionView.this.fillContextMenu(manager);
  115. }
  116. });
  117. Menu menu = menuMgr.createContextMenu(viewer.getControl());
  118. viewer.getControl().setMenu(menu);
  119. getSite().registerContextMenu(menuMgr, viewer);
  120. }
  121.  
  122. private void contributeToActionBars() {
  123.  
  124. IActionBars bars = getViewSite().getActionBars();
  125. fillLocalPullDown(bars.getMenuManager());
  126. fillLocalToolBar(bars.getToolBarManager());
  127.  
  128. }
  129.  
  130. private void fillLocalPullDown(final IMenuManager manager) {
  131.  
  132. //manager.add(openReferenceAction);
  133. //manager.add(new Separator());
  134.  
  135. }
  136.  
  137. private void fillContextMenu(final IMenuManager manager) {
  138.  
  139. manager.add(openReferenceAction);
  140. // Other plug-ins can contribute there actions here
  141. manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
  142.  
  143. }
  144.  
  145. private void fillLocalToolBar(final IToolBarManager manager) {
  146.  
  147. manager.add(hideCommentsAction);
  148. manager.add(hideIndexedVariablesAction);
  149. manager.add(hideStructuresAction);
  150. manager.add(hideIntegersAction);
  151. manager.add(hideRealNumbersAction);
  152. manager.add(hideBooleansAction);
  153.  
  154. }
  155.  
  156. private void makeActions() {
  157.  
  158. HavaViewPlugin viewPlugin = HavaViewPlugin.getDefault();
  159.  
  160. /*
  161. * Should eventually be refactored to it's own class.
  162. *
  163. * Provides a basic code-find-highlight action that works
  164. * fairly well.
  165. */
  166. openReferenceAction = new Action() {
  167. private HReference reference;
  168. private IFileEditorInput source;
  169.  
  170. @Override
  171. public void run() {
  172. ISelection selection = viewer.getSelection();
  173. Object obj = ((IStructuredSelection) selection).
  174. getFirstElement();
  175. if (obj instanceof RefNode) {
  176. reference = ((RefNode) obj).ref;
  177. }
  178.  
  179. source = input;
  180.  
  181. if (source != null && reference != null) {
  182. HReferenceToken token = reference.getReferenceToken();
  183.  
  184. final IWorkbench workbench = PlatformUI.getWorkbench();
  185. final IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
  186. final IWorkbenchPage workbenchPage = workbenchWindow.getActivePage();
  187.  
  188. //add a marker to the input then use openEditor on it
  189. HashMap < String, Integer > map =
  190. new HashMap <String, Integer>();
  191. map.put(IMarker.LINE_NUMBER,
  192. new Integer(token.getBeginLine()));
  193. IMarker marker;
  194. try {
  195. marker = source.getFile().createMarker(IMarker.TEXT);
  196. marker.setAttributes(map);
  197. AbstractTextEditor editor = (AbstractTextEditor)
  198. IDE.openEditor(workbenchPage, marker);
  199. //editor.selectAndReveal(start, length)
  200. selectAndRevealLine(editor, token.getBeginLine());
  201. marker.delete();
  202. workbenchPage.activate(editor);
  203. } catch (final CoreException e) {
  204. ;
  205. }
  206. }
  207. }
  208. };
  209. openReferenceAction.setText("Jump to Reference");
  210. openReferenceAction.setToolTipText(
  211. "Opens the Hava reference in a new editor.");
  212. openReferenceAction.setImageDescriptor(
  213. PlatformUI.getWorkbench().getSharedImages().
  214. getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
  215.  
  216. hideCommentsAction = new Action("HideComments", viewPlugin.getImageDescriptor("comment.hide")) {
  217. public void run() {
  218. treeFilter.HideComments = !treeFilter.HideComments;
  219. viewer.refresh();
  220. }
  221. };
  222. hideCommentsAction.setToolTipText("Hide Comments");
  223.  
  224. hideIndexedVariablesAction = new Action("HideIndexedVariables", viewPlugin.getImageDescriptor("indexed.hide")) {
  225. public void run() {
  226. treeFilter.HideIndexedVariables = !treeFilter.HideIndexedVariables;
  227. viewer.refresh();
  228. }
  229. };
  230. hideIndexedVariablesAction.setToolTipText("Hide Indexed Variables");
  231.  
  232. hideStructuresAction = new Action("HideStructures", viewPlugin.getImageDescriptor("structure.hide")) {
  233. public void run() {
  234. treeFilter.HideStructures = !treeFilter.HideStructures;
  235. viewer.refresh();
  236. }
  237. };
  238. hideStructuresAction.setToolTipText("Hide Structures");
  239.  
  240. hideIntegersAction = new Action("HideIntegers", viewPlugin.getImageDescriptor("integer.hide")) {
  241. public void run() {
  242. treeFilter.HideIntegers = !treeFilter.HideIntegers;
  243. viewer.refresh();
  244. }
  245. };
  246. hideIntegersAction.setToolTipText("Hide Integers");
  247.  
  248. hideRealNumbersAction = new Action("HideRealNumbers", viewPlugin.getImageDescriptor("real.hide")) {
  249. public void run() {
  250. treeFilter.HideRealNumbers = !treeFilter.HideRealNumbers;
  251. viewer.refresh();
  252. }
  253. };
  254. hideRealNumbersAction.setToolTipText("Hide Real Numbers");
  255.  
  256. hideBooleansAction = new Action("HideBooleans", viewPlugin.getImageDescriptor("boolean.hide")) {
  257. public void run() {
  258. treeFilter.HideBooleans = !treeFilter.HideBooleans;
  259. viewer.refresh();
  260. }
  261. };
  262. hideBooleansAction.setToolTipText("Hide Booleans");
  263. }
  264.  
  265. private void hookDoubleClickAction() {
  266.  
  267. viewer.addDoubleClickListener(new IDoubleClickListener() {
  268. public void doubleClick(final DoubleClickEvent event) {
  269. openReferenceAction.run();
  270. }
  271. });
  272.  
  273. }
  274.  
  275. private void selectAndRevealLine(final AbstractTextEditor editor, final int line) {
  276. IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
  277. try {
  278. editor.selectAndReveal(doc.getLineOffset(line - 1),
  279. doc.getLineLength(line - 1) - 1);
  280. } catch (final BadLocationException e) {
  281. ;
  282. }
  283. }
  284.  
  285. private void showMessage(final String message) {
  286.  
  287. MessageDialog.openInformation(
  288. viewer.getControl().getShell(),
  289. "Hava Output",
  290. message);
  291.  
  292. }
  293.  
  294. /**
  295. * Passing the focus request to the viewer's control.
  296. */
  297. public void setFocus() {
  298.  
  299. viewer.getControl().setFocus();
  300.  
  301. }
  302.  
  303. }
Add Comment
Please, Sign In to add comment