diff -r 14dc2103a631 -r ed1c9f64298a trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/TraceView.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/TraceView.java Wed Jun 23 14:35:40 2010 +0300 @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + * Trace Builder view implementation + * + */ +package com.nokia.tracebuilder.view; + +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.viewers.TreeViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.part.ViewPart; + +import com.nokia.carbide.cpp.internal.featureTracker.FeatureUseTrackerConsts; +import com.nokia.carbide.cpp.internal.featureTracker.FeatureUseTrackerPlugin; +import com.nokia.tracebuilder.action.ActionFactory; +import com.nokia.tracebuilder.action.TraceViewActions; +import com.nokia.tracebuilder.engine.TraceBuilderActions; +import com.nokia.tracebuilder.engine.TraceBuilderConfiguration; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs; +import com.nokia.tracebuilder.engine.TraceBuilderGlobals; +import com.nokia.tracebuilder.engine.TraceBuilderView; +import com.nokia.tracebuilder.engine.TraceLocation; +import com.nokia.tracebuilder.engine.TraceObjectPropertyDialog; +import com.nokia.tracebuilder.model.TraceObject; +import com.nokia.tracebuilder.preferences.ConfigurationImpl; + +/** + * Trace Builder view implementation + * + */ +public final class TraceView extends ViewPart implements TraceBuilderView { + + /** + * Trace Groups branch text + */ + private static final String TRACE_GROUPS_BRANCH_TEXT = "Trace Groups"; //$NON-NLS-1$ + + /** + * Tree viewer widget + */ + private TreeViewer viewer; + + /** + * Tree view selection listener + */ + private TraceViewSelectionListener selectionListener; + + /** + * Tree view expansion listener + */ + private TraceViewTreeListener treeListener; + + /** + * Dialog interface implementation + */ + private TraceViewDialogs dialogs; + + /** + * Action factory + */ + private TraceViewActions actions; + + /** + * Configuration + */ + private TraceBuilderConfiguration configuration; + + /** + * Help listener + */ + private TraceViewHelpListener helpListener; + + /** + * Property dialog properties + */ + private PropertyDialogProperties propertyDialog; + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets + * .Composite) + */ + @Override + public void createPartControl(Composite parent) { + actions = new ActionFactory(); + configuration = new ConfigurationImpl(); + selectionListener = new TraceViewSelectionListener(actions); + // Creates the tree viewer + viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL + | SWT.V_SCROLL); + TraceContentProvider contentProvider = new TraceContentProvider(); + TraceLabelProvider labelProvider = new TraceLabelProvider(); + TraceNameSorter nameSorter = new TraceNameSorter(); + viewer.setContentProvider(contentProvider); + viewer.setLabelProvider(labelProvider); + viewer.setSorter(nameSorter); + // Content provider creates the viewer updater. The updater needs the + // display reference in order to create asynchronous callbacks to the UI + // thread. + viewer.setInput(getViewSite().getShell().getDisplay()); + treeListener = new TraceViewTreeListener(viewer); + helpListener = new TraceViewHelpListener(); + viewer.addSelectionChangedListener(selectionListener); + viewer.addDoubleClickListener(selectionListener); + viewer.addHelpListener(helpListener); + viewer.addTreeListener(treeListener); + + // Hooks actions to menus + hookContextMenu(); + fillMenuAndToolBar(); + + // Start using feature + FeatureUseTrackerPlugin.getFeatureUseProxy().startUsingFeature( + FeatureUseTrackerConsts.CARBIDE_OST_TRACE); + + // Sets the view reference to trace builder engine + TraceBuilderGlobals.setView(this); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#dispose() + */ + @Override + public void dispose() { + TraceBuilderGlobals.setView(null); + viewer.removeTreeListener(treeListener); + viewer.removeSelectionChangedListener(selectionListener); + viewer.removeHelpListener(helpListener); + + // Stop using feature + FeatureUseTrackerPlugin.getFeatureUseProxy().stopUsingFeature( + FeatureUseTrackerConsts.CARBIDE_OST_TRACE); + + super.dispose(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWorkbenchPart#setFocus() + */ + @Override + public void setFocus() { + viewer.getControl().setFocus(); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView#hasFocus() + */ + public boolean hasFocus() { + return viewer.getControl().isFocusControl(); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView# + * selectObject(com.nokia.tracebuilder.model.TraceObject) + */ + public void selectObject(TraceObject object) { + TraceObjectWrapper wrapper = object + .getExtension(TraceObjectWrapper.class); + // Wrapper is null if user makes a selection before view is updated + if (wrapper != null) { + revealSelectedObject(wrapper); + actions.enableActions(object); + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView# + * selectLocation(com.nokia.tracebuilder.engine.TraceLocation) + */ + public void selectLocation(TraceLocation location) { + TraceLocationWrapper wrapper = (TraceLocationWrapper) location + .getProperties().getViewReference(); + // Wrapper is null if user makes a selection before view is updated + if (wrapper != null) { + revealSelectedObject(wrapper); + actions.enableActions(location); + } + } + + /** + * Reveals the given wrapper + * + * @param wrapper + * the wrapper to be revealed + */ + private void revealSelectedObject(WrapperBase wrapper) { + ListWrapper parent = (ListWrapper) wrapper.getParent(); + WrapperBase updated = parent.moveChildToView(wrapper); + if (updated != null) { + viewer.removeSelectionChangedListener(selectionListener); + updated.getUpdater().update(updated); + viewer.addSelectionChangedListener(selectionListener); + } + wrapper.getUpdater().queueSelection(wrapper); + } + + /** + * Gets the view shell + * + * @return the shell of the tree viewer + */ + Shell getShell() { + Shell retval = null; + if (viewer != null) { + retval = viewer.getControl().getShell(); + if (retval != null && retval.isDisposed()) { + retval = null; + } + } + return retval; + } + + /** + * Adds menu listener to popup menu + */ + private void hookContextMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + fillContextMenu(manager); + } + }); + Menu menu = menuMgr.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, viewer); + } + + /** + * Adds action items to menu and toolbar + */ + private void fillMenuAndToolBar() { + IActionBars bars = getViewSite().getActionBars(); + fillMenu(bars.getMenuManager()); + fillToolBar(bars.getToolBarManager()); + } + + /** + * Adds menu items to view pull-down menu + * + * @param manager + * the menu to be filled + */ + private void fillMenu(IMenuManager manager) { + actions.fillMenu(manager); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + + /** + * Adds actions to tool bar + * + * @param manager + * the tool bar + */ + private void fillToolBar(IToolBarManager manager) { + actions.fillToolBar(manager); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + + /** + * Called prior to showing the context menu + * + * @param manager + * the menu to be filled + */ + private void fillContextMenu(IMenuManager manager) { + actions.fillContextMenu(manager); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView#getDialogs() + */ + public TraceBuilderDialogs getDialogs() { + if (dialogs == null) { + dialogs = new TraceViewDialogs(this); + } + return dialogs; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView#getPropertyDialog() + */ + public TraceObjectPropertyDialog getPropertyDialog() { + if (propertyDialog == null) { + propertyDialog = new PropertyDialogProperties(this); + } + return propertyDialog; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView#getActions() + */ + public TraceBuilderActions getActions() { + return actions; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView#getConfiguration() + */ + public TraceBuilderConfiguration getConfiguration() { + return configuration; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView# + * runAsyncOperation(java.lang.Runnable) + */ + public void runAsyncOperation(Runnable runnable) { + Shell shell = getShell(); + if (shell != null) { + shell.getDisplay().asyncExec(runnable); + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.TraceBuilderView# refresh() + */ + public void refresh() { + viewer.refresh(); + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.tracebuilder.engine.TraceBuilderView#expandTraceGroupsBranch() + */ + public void expandTraceGroupsBranch() { + TreeItem[] items = viewer.getTree().getItems(); + if (items != null) { + for (TreeItem item : items) { + if (item.getText().equals(TRACE_GROUPS_BRANCH_TEXT)) { + item.setExpanded(true); + break; + } + } + } + } +} \ No newline at end of file