/******************************************************************************* * 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.debug.model.AntlrDebugTarget; import org.deved.antlride.debug.model.event.AntlrDebugEvent; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; public class AntlrDebugEventsView extends AntlrDebugView { private IBaseLabelProvider labelProvider = new LabelProvider(); private int fMaxEvents = 25; private class AntlrDebugEventSorter extends ViewerSorter { @Override public int compare(Viewer viewer, Object o1, Object o2) { AntlrDebugEvent e1 = (AntlrDebugEvent) o1; AntlrDebugEvent e2 = (AntlrDebugEvent) o2; return e1.compareTo(e2) * -1; } } private class AntlrEventContentProvider implements IStructuredContentProvider { public Object[] getElements(Object object) { return (Object[]) object; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } @Override protected void fillContextMenu(IMenuManager menu) { super.fillContextMenu(menu); } @Override protected void onTerminate(AntlrDebugTarget debugTarget) { super.onTerminate(debugTarget); } @Override protected void onDebugEvents(AntlrDebugEvent[] events) { int eventCount = events.length; if (eventCount > 0) { int size = Math.min(fMaxEvents, eventCount); AntlrDebugEvent[] maxevents = new AntlrDebugEvent[size]; int j = 0; for (int i = eventCount - 1; i >= 0 && j < size; i--) { maxevents[j++] = events[i]; } getViewer().setInput(maxevents); if (events.length > 0) { getViewer().setSelection(new StructuredSelection(events[0])); } } } @Override public void dispose() { labelProvider.dispose(); labelProvider = null; super.dispose(); } @Override protected Viewer internalCreateViewer(Composite parent) { TableViewer viewer = new TableViewer(parent); Table table = viewer.getTable(); // TableColumn column = new TableColumn(table, SWT.BORDER); // column.setText("Events"); table.setLinesVisible(true); viewer.setSorter(new AntlrDebugEventSorter()); // viewer.setComparator(new ViewerComparator(new // InverseOrderCompartor())); viewer.setLabelProvider(labelProvider); viewer.setContentProvider(new AntlrEventContentProvider()); return viewer; } }