/***************************************************************************** * Copyright (c) 2006, 2008 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Christof Klausecker GUP, JKU - initial API and implementation *****************************************************************************/ package eu.geclipse.traceview.views.internal; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.IContributionItem; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IViewSite; import eu.geclipse.traceview.ILamportTrace; import eu.geclipse.traceview.IPhysicalTrace; import eu.geclipse.traceview.IStatisticsTrace; import eu.geclipse.traceview.ITrace; import eu.geclipse.traceview.ITraceVisProvider; import eu.geclipse.traceview.TraceVisualization; import eu.geclipse.traceview.views.TraceView; /** * Contains a Trace Visualization */ public class TraceVisPage extends Composite { protected IContributionItem[] items = new IContributionItem[ 0 ]; private TraceVisualization visualization; private ITrace trace; private IViewSite viewSite; private TraceView traceView; private String visualisationID; /** * Creates a new TraceVisPage * * @param cTabFolder - the folder which will contain the Visualization * @param style - the style * @param viewSite - the ViewSite which * @param traceView - the trace view the page is opened in * @param trace - the Trace to display */ public TraceVisPage( final CTabFolder cTabFolder, final int style, final IViewSite viewSite, final TraceView traceView, final ITrace trace ) { super( cTabFolder, style ); this.traceView = traceView; this.viewSite = viewSite; this.trace = trace; GridLayout gridLayout = new GridLayout(); GridData gridData = new GridData(); this.setLayout( gridLayout ); this.setLayoutData( gridData ); CTabItem cTabItem = new CTabItem( cTabFolder, SWT.CLOSE ); cTabItem.setControl( this ); cTabItem.addDisposeListener( new DisposeListener() { public void widgetDisposed( final DisposeEvent e ) { dispose(); } } ); cTabItem.setText( this.trace.getName() ); cTabFolder.setSelection( cTabItem ); // TODO allow for other visualization types if( trace instanceof ILamportTrace ) { changeToVisualisation( "eu.geclipse.traceview.logicalgraph.LogicalGraphProvider" ); //$NON-NLS-1$ } else if( trace instanceof IPhysicalTrace ) { changeToVisualisation( "eu.geclipse.traceview.physicalgraph.PhysicalGraphProvider" ); //$NON-NLS-1$ } else if( trace instanceof IStatisticsTrace ) { changeToVisualisation( "eu.geclipse.traceview.statistics.StatisticsVisProvider" ); //$NON-NLS-1$ } } /** * Returns the visualization id * * @return id */ public String getVisualisationID() { return this.visualisationID; } /** * Changes to the specified visualization * * @param id */ public void changeToVisualisation( final String id ) { if( id != null ) { this.visualisationID = id; for( IConfigurationElement configurationElement : Platform.getExtensionRegistry().getConfigurationElementsFor( "eu.geclipse.traceview.TraceVisualization" ) ) { //$NON-NLS-1$^ if( id.equals( configurationElement.getAttribute( "id" ) ) ) { //$NON-NLS-1$ // remove items from action bar this.traceView.getViewSite().getActionBars().getToolBarManager().removeAll(); this.traceView.getViewSite().getActionBars().getToolBarManager().update( true ); // dispose visualization if( this.visualization != null && !this.visualization.isDisposed() ) { this.visualization.dispose(); } // create new visualization try { ITraceVisProvider provider = null; // if( ! (this.trace instanceof ILamportTrace)){ // configurationElement = Platform.getExtensionRegistry() // .getConfigurationElementsFor( "eu.geclipse.traceview.TraceVisualization" )[0]; // bad hack // provider = ( ITraceVisProvider )configurationElement.createExecutableExtension( "class" ); //$NON-NLS-1$ // } // else{ provider = ( ITraceVisProvider )configurationElement.createExecutableExtension( "class" ); //$NON-NLS-1$ // } this.visualization = provider.getTraceVis( this, SWT.NONE, this.viewSite, this.trace ); this.items = this.visualization.getToolBarItems(); } catch( CoreException coreException ) { // nothing } // add visualization specific items to bar if( this.items != null ) { for( IContributionItem item : this.items ) { this.traceView.getViewSite().getActionBars().getToolBarManager().add( item ); } } // add standard bar this.traceView.createToolbar( id ); this.viewSite.getActionBars().getToolBarManager().update( true ); this.layout( true ); } } } } /** * Returns the items for that will contribute to the Menubar * * @return Menubar Items */ public IContributionItem[] getItems() { return this.items; } @Override public void dispose() { for( IContributionItem item : this.items ) { this.viewSite.getActionBars().getToolBarManager().remove( item ); } this.viewSite.getActionBars().getToolBarManager().update( true ); this.layout( true ); super.dispose(); } /** * Returns the Trace * * @return trace */ public ITrace getTrace() { return this.trace; } /** * Redraws the visualisation */ public void redrawVisualisation() { if( this.visualization != null && !this.visualization.isDisposed() ) { this.visualization.redraw(); } } public void printTrace( final GC gc ) { this.visualization.printTrace( gc ); } public TraceVisualization getVisualization() { return this.visualization; } }