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