/******************************************************************************* * Copyright (c) 2009, 2014 Ericsson * * 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 * * Contributors: * Francois Chouinard - Initial API and implementation * Bernd Hufmann - Added possibility to pin view *******************************************************************************/ package fr.inria.linuxtools.tmf.ui.views; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.part.ViewPart; import fr.inria.linuxtools.tmf.core.component.ITmfComponent; import fr.inria.linuxtools.tmf.core.signal.TmfSignal; import fr.inria.linuxtools.tmf.core.signal.TmfSignalManager; import fr.inria.linuxtools.tmf.core.trace.ITmfTrace; import fr.inria.linuxtools.tmf.core.trace.TmfTraceManager; import fr.inria.linuxtools.tmf.ui.editors.ITmfTraceEditor; /** * Basic abstract TMF view class implementation. * * It registers any sub class to the signal manager for receiving and sending * TMF signals. * * @version 1.2 * @author Francois Chouinard */ public abstract class TmfView extends ViewPart implements ITmfComponent { private final String fName; /** * Action class for pinning of TmfView. * @since 2.0 */ protected PinTmfViewAction fPinAction; /** * Reference to the trace manager * @since 2.0 */ protected final TmfTraceManager fTraceManager; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ /** * Constructor. Creates a TMF view and registers to the signal manager. * * @param viewName * A view name */ public TmfView(String viewName) { super(); fName = viewName; fTraceManager = TmfTraceManager.getInstance(); TmfSignalManager.register(this); } /** * Disposes this view and de-registers itself from the signal manager */ @Override public void dispose() { TmfSignalManager.deregister(this); super.dispose(); } // ------------------------------------------------------------------------ // ITmfComponent // ------------------------------------------------------------------------ @Override public String getName() { return fName; } @Override public void broadcast(TmfSignal signal) { TmfSignalManager.dispatchSignal(signal); } /** * @since 3.0 */ @Override public void broadcastAsync(TmfSignal signal) { TmfSignalManager.dispatchSignalAsync(signal); } // ------------------------------------------------------------------------ // View pinning support // ------------------------------------------------------------------------ /** * Returns whether the pin flag is set. * For example, this flag can be used to ignore time synchronization signals from other TmfViews. * * @return pin flag * @since 2.0 */ public boolean isPinned() { return ((fPinAction != null) && (fPinAction.isChecked())); } /** * Method adds a pin action to the TmfView. The pin action allows to toggle the <code>fIsPinned</code> flag. * For example, this flag can be used to ignore time synchronization signals from other TmfViews. * * @since 2.0 */ protected void contributePinActionToToolBar() { if (fPinAction == null) { fPinAction = new PinTmfViewAction(); IToolBarManager toolBarManager = getViewSite().getActionBars() .getToolBarManager(); toolBarManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); toolBarManager.add(fPinAction); } } /** * Get the currently selected trace, or 'null' if the active editor is not a * TMF trace. * * @return The active trace, or 'null' if not a trace * @since 2.0 */ public ITmfTrace getActiveTrace() { IEditorPart editor = getSite().getPage().getActiveEditor(); if (editor instanceof ITmfTraceEditor) { ITmfTrace trace = ((ITmfTraceEditor) editor).getTrace(); return trace; } return null; } }