Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package edu.gatech.hava.hdt.views.solution;
- import java.util.HashMap;
- import org.eclipse.core.resources.IMarker;
- import org.eclipse.core.runtime.CoreException;
- import org.eclipse.jface.action.Action;
- import org.eclipse.jface.action.IMenuListener;
- import org.eclipse.jface.action.IMenuManager;
- import org.eclipse.jface.action.IToolBarManager;
- import org.eclipse.jface.action.MenuManager;
- import org.eclipse.jface.action.Separator;
- import org.eclipse.jface.dialogs.MessageDialog;
- import org.eclipse.jface.text.BadLocationException;
- import org.eclipse.jface.text.IDocument;
- import org.eclipse.jface.viewers.DoubleClickEvent;
- import org.eclipse.jface.viewers.IDoubleClickListener;
- import org.eclipse.jface.viewers.ISelection;
- import org.eclipse.jface.viewers.IStructuredSelection;
- import org.eclipse.jface.viewers.TreeViewer;
- import org.eclipse.swt.layout.GridData;
- import org.eclipse.swt.widgets.Composite;
- import org.eclipse.swt.widgets.Menu;
- import org.eclipse.swt.widgets.Tree;
- import org.eclipse.ui.IActionBars;
- import org.eclipse.ui.IFileEditorInput;
- import org.eclipse.ui.ISharedImages;
- import org.eclipse.ui.IWorkbench;
- import org.eclipse.ui.IWorkbenchActionConstants;
- import org.eclipse.ui.IWorkbenchPage;
- import org.eclipse.ui.IWorkbenchWindow;
- import org.eclipse.ui.PlatformUI;
- import org.eclipse.ui.ide.IDE;
- import org.eclipse.ui.part.ViewPart;
- import org.eclipse.ui.texteditor.AbstractTextEditor;
- import edu.gatech.hava.engine.HEngine;
- import edu.gatech.hava.engine.HReference;
- import edu.gatech.hava.engine.HReferenceToken;
- import edu.gatech.hava.hdt.views.HavaViewPlugin;
- import edu.gatech.hava.hdt.views.IHavaSolutionView;
- import edu.gatech.hava.hdt.views.solution.tree.RefNode;
- public class HavaSolutionView extends ViewPart implements IHavaSolutionView {
- private TreeViewer viewer;
- private Action openReferenceAction;
- private Action hideCommentsAction;
- private Action hideIndexedVariablesAction;
- private Action hideStructuresAction;
- private Action hideIntegersAction;
- private Action hideRealNumbersAction;
- private Action hideBooleansAction;
- private SolutionViewerFilter treeFilter;
- private IFileEditorInput input;
- private ReportContentProvider contentProvider;
- /**
- * The constructor.
- */
- public HavaSolutionView() {
- }
- public void setHavaEngine(final IFileEditorInput input, final HEngine engine) {
- this.input = input;
- contentProvider.setHavaEngine(engine);
- viewer.refresh();
- }
- /**
- * This is a callback that will allow us
- * to create the viewer and initialize it.
- */
- public void createPartControl(final Composite parent) {
- contentProvider = new ReportContentProvider();
- final Tree tree = new Tree(parent, 0);
- tree.setLayoutData(new GridData(GridData.FILL_BOTH));
- viewer = new TreeViewer(tree);
- treeFilter = new SolutionViewerFilter();
- viewer.addFilter(treeFilter);
- viewer.setContentProvider(contentProvider);
- viewer.setLabelProvider(new ReportLabelProvider());
- viewer.setInput(getViewSite());
- viewer.expandAll();
- // Create the help context id for the viewer's control
- PlatformUI.getWorkbench().getHelpSystem().setHelp(
- viewer.getControl(), "hava_dev_toolkit.viewer");
- makeActions();
- hookContextMenu();
- hookDoubleClickAction();
- contributeToActionBars();
- }
- private void hookContextMenu() {
- MenuManager menuMgr = new MenuManager("#PopupMenu");
- menuMgr.setRemoveAllWhenShown(true);
- menuMgr.addMenuListener(new IMenuListener() {
- @Override
- public void menuAboutToShow(final IMenuManager manager) {
- HavaSolutionView.this.fillContextMenu(manager);
- }
- });
- Menu menu = menuMgr.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(menuMgr, viewer);
- }
- private void contributeToActionBars() {
- IActionBars bars = getViewSite().getActionBars();
- fillLocalPullDown(bars.getMenuManager());
- fillLocalToolBar(bars.getToolBarManager());
- }
- private void fillLocalPullDown(final IMenuManager manager) {
- //manager.add(openReferenceAction);
- //manager.add(new Separator());
- }
- private void fillContextMenu(final IMenuManager manager) {
- manager.add(openReferenceAction);
- // Other plug-ins can contribute there actions here
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }
- private void fillLocalToolBar(final IToolBarManager manager) {
- manager.add(hideCommentsAction);
- manager.add(hideIndexedVariablesAction);
- manager.add(hideStructuresAction);
- manager.add(hideIntegersAction);
- manager.add(hideRealNumbersAction);
- manager.add(hideBooleansAction);
- }
- private void makeActions() {
- HavaViewPlugin viewPlugin = HavaViewPlugin.getDefault();
- /*
- * Should eventually be refactored to it's own class.
- *
- * Provides a basic code-find-highlight action that works
- * fairly well.
- */
- openReferenceAction = new Action() {
- private HReference reference;
- private IFileEditorInput source;
- @Override
- public void run() {
- ISelection selection = viewer.getSelection();
- Object obj = ((IStructuredSelection) selection).
- getFirstElement();
- if (obj instanceof RefNode) {
- reference = ((RefNode) obj).ref;
- }
- source = input;
- if (source != null && reference != null) {
- HReferenceToken token = reference.getReferenceToken();
- final IWorkbench workbench = PlatformUI.getWorkbench();
- final IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
- final IWorkbenchPage workbenchPage = workbenchWindow.getActivePage();
- //add a marker to the input then use openEditor on it
- HashMap < String, Integer > map =
- new HashMap <String, Integer>();
- map.put(IMarker.LINE_NUMBER,
- new Integer(token.getBeginLine()));
- IMarker marker;
- try {
- marker = source.getFile().createMarker(IMarker.TEXT);
- marker.setAttributes(map);
- AbstractTextEditor editor = (AbstractTextEditor)
- IDE.openEditor(workbenchPage, marker);
- //editor.selectAndReveal(start, length)
- selectAndRevealLine(editor, token.getBeginLine());
- marker.delete();
- workbenchPage.activate(editor);
- } catch (final CoreException e) {
- ;
- }
- }
- }
- };
- openReferenceAction.setText("Jump to Reference");
- openReferenceAction.setToolTipText(
- "Opens the Hava reference in a new editor.");
- openReferenceAction.setImageDescriptor(
- PlatformUI.getWorkbench().getSharedImages().
- getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
- hideCommentsAction = new Action("HideComments", viewPlugin.getImageDescriptor("comment.hide")) {
- public void run() {
- treeFilter.HideComments = !treeFilter.HideComments;
- viewer.refresh();
- }
- };
- hideCommentsAction.setToolTipText("Hide Comments");
- hideIndexedVariablesAction = new Action("HideIndexedVariables", viewPlugin.getImageDescriptor("indexed.hide")) {
- public void run() {
- treeFilter.HideIndexedVariables = !treeFilter.HideIndexedVariables;
- viewer.refresh();
- }
- };
- hideIndexedVariablesAction.setToolTipText("Hide Indexed Variables");
- hideStructuresAction = new Action("HideStructures", viewPlugin.getImageDescriptor("structure.hide")) {
- public void run() {
- treeFilter.HideStructures = !treeFilter.HideStructures;
- viewer.refresh();
- }
- };
- hideStructuresAction.setToolTipText("Hide Structures");
- hideIntegersAction = new Action("HideIntegers", viewPlugin.getImageDescriptor("integer.hide")) {
- public void run() {
- treeFilter.HideIntegers = !treeFilter.HideIntegers;
- viewer.refresh();
- }
- };
- hideIntegersAction.setToolTipText("Hide Integers");
- hideRealNumbersAction = new Action("HideRealNumbers", viewPlugin.getImageDescriptor("real.hide")) {
- public void run() {
- treeFilter.HideRealNumbers = !treeFilter.HideRealNumbers;
- viewer.refresh();
- }
- };
- hideRealNumbersAction.setToolTipText("Hide Real Numbers");
- hideBooleansAction = new Action("HideBooleans", viewPlugin.getImageDescriptor("boolean.hide")) {
- public void run() {
- treeFilter.HideBooleans = !treeFilter.HideBooleans;
- viewer.refresh();
- }
- };
- hideBooleansAction.setToolTipText("Hide Booleans");
- }
- private void hookDoubleClickAction() {
- viewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(final DoubleClickEvent event) {
- openReferenceAction.run();
- }
- });
- }
- private void selectAndRevealLine(final AbstractTextEditor editor, final int line) {
- IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
- try {
- editor.selectAndReveal(doc.getLineOffset(line - 1),
- doc.getLineLength(line - 1) - 1);
- } catch (final BadLocationException e) {
- ;
- }
- }
- private void showMessage(final String message) {
- MessageDialog.openInformation(
- viewer.getControl().getShell(),
- "Hava Output",
- message);
- }
- /**
- * Passing the focus request to the viewer's control.
- */
- public void setFocus() {
- viewer.getControl().setFocus();
- }
- }
Add Comment
Please, Sign In to add comment