trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/TraceView.java
changeset 10 ed1c9f64298a
--- /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