/****************************************************************************** * Copyright (c) 2007, 2008 Edgar Espina. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.deved.antlride.internal.debug.ui; import org.deved.antlride.core.model.evaluation.IEvalElement; import org.deved.antlride.debug.model.AntlrDebugTarget; import org.deved.antlride.debug.model.event.AntlrDebugEvent; import org.deved.antlride.debug.model.event.AntlrDebugEventKind; import org.deved.antlride.debug.ui.AntlrDebugParser; import org.deved.antlride.ui.views.interpreter.EvalElementViewer; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IViewPart; public class AntlrDebugTreeView extends AntlrDebugView { private EvalElementViewer viewer; @Override protected boolean accept(AntlrDebugEvent e) { AntlrDebugEventKind kind = e.getEventKind(); return !isInDecision() && (kind == AntlrDebugEventKind.CONSUME_TOKEN || kind == AntlrDebugEventKind.ENTER_RULE || kind == AntlrDebugEventKind.EXIT_RULE || kind == AntlrDebugEventKind.EXCEPTION); } @Override protected void onStart(AntlrDebugTarget debugTarget) { viewer.clear(); super.onStart(debugTarget); } @Override protected void fillToolBar(IToolBarManager toolBar) { toolBar.add(viewer.getAction(EvalElementViewer.CLEAR_DIAGRAM_ACTION)); toolBar.add(viewer.getAction(EvalElementViewer.ZOOM_IN_ACTION)); toolBar.add(viewer.getAction(EvalElementViewer.ZOOM_OUT_ACTION)); super.fillToolBar(toolBar); } @Override protected void fillContextMenu(IMenuManager menu) { menu.add(viewer.getAction(EvalElementViewer.CLEAR_DIAGRAM_ACTION)); menu.add(viewer.getAction(EvalElementViewer.ZOOM_IN_ACTION)); menu.add(viewer.getAction(EvalElementViewer.ZOOM_OUT_ACTION)); super.fillContextMenu(menu); } @Override protected void onDebugEvents(AntlrDebugEvent[] events) { IEvalElement element = AntlrDebugParser.evaluate(debugTarget.getGrammar(), events); viewer.setInput(element); } @Override protected Viewer internalCreateViewer(Composite parent) { viewer = new EvalElementViewer(parent); viewer.addSelectionChangedListener(new EvalElementSelectionListener()); return viewer; } @Override public void dispose() { viewer.dispose(); super.dispose(); } private class EvalElementSelectionListener implements ISelectionChangedListener { public void selectionChanged(SelectionChangedEvent event) { IViewPart view = findView(AntlrDebugInputView.ID); if (view != null) { ((AntlrDebugInputView) view).setSelection(event.getSelection()); } } } }