trace/traceviewer/com.nokia.trace.eventview/src/com/nokia/trace/eventview/TraceEventView.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.trace.eventview/src/com/nokia/trace/eventview/TraceEventView.java Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,451 @@
+/*
+ * Copyright (c) 2007-2010 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:
+ *
+ * Event view
+ *
+ */
+package com.nokia.trace.eventview;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
+
+/**
+ * Event view. {@link #getEventList() getEventList} method is the access point
+ * for view extensions.
+ */
+public class TraceEventView extends ViewPart implements ContentChangeListener {
+
+ /**
+ * Type column title
+ */
+ private static final String TYPE_TITLE = Messages
+ .getString("TraceEventView.TypeColumnTitle"); //$NON-NLS-1$
+
+ /**
+ * Category column title
+ */
+ private static final String CATEGORY_TITLE = Messages
+ .getString("TraceEventView.CategoryColumnTitle"); //$NON-NLS-1$
+
+ /**
+ * Source column title
+ */
+ private static final String SOURCE_TITLE = Messages
+ .getString("TraceEventView.SourceColumnTitle"); //$NON-NLS-1$
+
+ /**
+ * Description column title
+ */
+ private static final String DESCRIPTION_TITLE = Messages
+ .getString("TraceEventView.DescriptionColumnTitle"); //$NON-NLS-1$
+
+ /**
+ * Type width configuration entry
+ */
+ private static final String TYPE_WIDTH_CONFIGURATION = "TraceEventView.TypeWidth"; //$NON-NLS-1$
+
+ /**
+ * Category width configuration entry
+ */
+ private static final String CATEGORY_WIDTH_CONFIGURATION = "TraceEventView.CategoryWidth"; //$NON-NLS-1$
+
+ /**
+ * Source width configuration entry
+ */
+ private static final String SOURCE_WIDTH_CONFIGURATION = "TraceEventView.SourceWidth"; //$NON-NLS-1$
+
+ /**
+ * Description width configuration entry
+ */
+ private static final String DESCRIPTION_WIDTH_CONFIGURATION = "TraceEventView.DescriptionsWidth"; //$NON-NLS-1$
+
+ /**
+ * Default width for type column
+ */
+ private static final int DEFAULT_TYPE_WIDTH = 75;
+
+ /**
+ * Default width for category column
+ */
+ private static final int DEFAULT_CATEGORY_WIDTH = 150;
+
+ /**
+ * Default width for source column
+ */
+ private static final int DEFAULT_SOURCE_WIDTH = 150;
+
+ /**
+ * Default width for description column
+ */
+ private static final int DEFAULT_DESCRIPTION_WIDTH = 800;
+
+ /**
+ * Type column index
+ */
+ static final int TYPE_COLUM_INDEX = 0;
+
+ /**
+ * Category column index
+ */
+ static final int CATEGORY_COLUM_INDEX = 1;
+
+ /**
+ * Source column index
+ */
+ static final int SOURCE_COLUM_INDEX = 2;
+
+ /**
+ * Description column index
+ */
+ static final int DESCRIPTION_COLUM_INDEX = 3;
+
+ /**
+ * Message list
+ */
+ private TableViewer table;
+
+ /**
+ * Remove event action
+ */
+ private RemoveEventAction removeEventAction;
+
+ /**
+ * Remove event action
+ */
+ private RemoveAllEventsAction removeAllEventsAction;
+
+ /**
+ * Descriptions column
+ */
+ private TableColumn descriptionColumn;
+
+ /**
+ * Descriptions column
+ */
+ private TableColumn categoryColumn;
+
+ /**
+ * Source column
+ */
+ private TableColumn sourceColumn;
+
+ /**
+ * Type column
+ */
+ private TableColumn typeColumn;
+
+ /**
+ * Content change listener
+ */
+ public static ContentChangeListener contentChangeListener;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ table = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.FULL_SELECTION);
+ EventListContentProvider contentProvider = (EventListContentProvider) getEventList();
+ EventListLabelProvider labelProvider = new EventListLabelProvider();
+ removeEventAction = new RemoveEventAction(contentProvider);
+ removeAllEventsAction = new RemoveAllEventsAction(contentProvider);
+ table.setContentProvider(contentProvider);
+ table.setLabelProvider(labelProvider);
+
+ // Content provider creates the viewer updater. The updater needs the
+ // display reference in order to create asynchronous callbacks to the UI
+ // thread.
+ Table tableWidget = table.getTable();
+ createTypeColumn(tableWidget);
+ createCategoryColumn(tableWidget);
+ createSourceColumn(tableWidget);
+ createDescriptionColumn(tableWidget);
+ configureWidgets();
+ tableWidget.setHeaderVisible(true);
+ tableWidget.setLinesVisible(true);
+ hookContextMenu();
+ table.setInput(getViewSite().getShell().getDisplay());
+ setContentListener(this);
+ }
+
+ /**
+ * Sets content listener
+ *
+ * @param listener
+ * new content listener
+ */
+ private void setContentListener(ContentChangeListener listener) {
+ contentChangeListener = listener;
+ }
+
+ /**
+ * Configures the widgets
+ */
+ void configureWidgets() {
+
+ // Get preference store from the plugin
+ IPreferenceStore preferences = Activator.getDefault()
+ .getPreferenceStore();
+
+ // Set description column width
+ int value = preferences.getInt(DESCRIPTION_WIDTH_CONFIGURATION);
+ if (value > 0) {
+ descriptionColumn.setWidth(value);
+ } else {
+ descriptionColumn.setWidth(DEFAULT_DESCRIPTION_WIDTH);
+ }
+
+ // Set category column width
+ value = preferences.getInt(CATEGORY_WIDTH_CONFIGURATION);
+ if (value > 0) {
+ categoryColumn.setWidth(value);
+ } else {
+ categoryColumn.setWidth(DEFAULT_CATEGORY_WIDTH);
+ }
+
+ // Set source column width
+ value = preferences.getInt(SOURCE_WIDTH_CONFIGURATION);
+ if (value > 0) {
+ sourceColumn.setWidth(value);
+ } else {
+ sourceColumn.setWidth(DEFAULT_SOURCE_WIDTH);
+ }
+
+ // Set type column width
+ value = preferences.getInt(TYPE_WIDTH_CONFIGURATION);
+ if (value > 0) {
+ typeColumn.setWidth(value);
+ } else {
+ typeColumn.setWidth(DEFAULT_TYPE_WIDTH);
+ }
+ }
+
+ /**
+ * Creates the descriptions column
+ *
+ * @param tableWidget
+ * the table widget
+ */
+ private void createDescriptionColumn(Table tableWidget) {
+ descriptionColumn = new TableColumn(tableWidget, SWT.NONE);
+ descriptionColumn.setText(DESCRIPTION_TITLE);
+ descriptionColumn.addControlListener(new ControlListener() {
+
+ public void controlMoved(ControlEvent e) {
+ }
+
+ public void controlResized(ControlEvent e) {
+ Activator.getDefault().getPreferenceStore().setValue(
+ DESCRIPTION_WIDTH_CONFIGURATION,
+ descriptionColumn.getWidth());
+ }
+
+ });
+ createColumnSorter(tableWidget, descriptionColumn,
+ DESCRIPTION_COLUM_INDEX);
+ }
+
+ /**
+ * Creates the category column
+ *
+ * @param tableWidget
+ * the table widget
+ */
+ private void createCategoryColumn(Table tableWidget) {
+ categoryColumn = new TableColumn(tableWidget, SWT.NONE);
+ categoryColumn.setText(CATEGORY_TITLE);
+ categoryColumn.addControlListener(new ControlListener() {
+
+ public void controlMoved(ControlEvent e) {
+ }
+
+ public void controlResized(ControlEvent e) {
+ Activator.getDefault().getPreferenceStore()
+ .setValue(CATEGORY_WIDTH_CONFIGURATION,
+ categoryColumn.getWidth());
+ }
+
+ });
+ createColumnSorter(tableWidget, categoryColumn, CATEGORY_COLUM_INDEX);
+ }
+
+ /**
+ * Creates the sources column
+ *
+ * @param tableWidget
+ * the table widget
+ */
+ private void createSourceColumn(Table tableWidget) {
+ sourceColumn = new TableColumn(tableWidget, SWT.NONE);
+ sourceColumn.setText(SOURCE_TITLE);
+ sourceColumn.addControlListener(new ControlListener() {
+
+ public void controlMoved(ControlEvent e) {
+ }
+
+ public void controlResized(ControlEvent e) {
+ Activator.getDefault().getPreferenceStore().setValue(
+ SOURCE_WIDTH_CONFIGURATION, sourceColumn.getWidth());
+ }
+
+ });
+ createColumnSorter(tableWidget, sourceColumn, SOURCE_COLUM_INDEX);
+ }
+
+ /**
+ * Creates the type column
+ *
+ * @param tableWidget
+ * the table widget
+ */
+ private void createTypeColumn(final Table tableWidget) {
+ typeColumn = new TableColumn(tableWidget, SWT.NONE);
+ typeColumn.setText(TYPE_TITLE);
+ typeColumn.addControlListener(new ControlListener() {
+
+ public void controlMoved(ControlEvent e) {
+ }
+
+ public void controlResized(ControlEvent e) {
+ Activator.getDefault().getPreferenceStore().setValue(
+ TYPE_WIDTH_CONFIGURATION, typeColumn.getWidth());
+ }
+
+ });
+ createColumnSorter(tableWidget, typeColumn, TYPE_COLUM_INDEX);
+ }
+
+ /**
+ * Creates sort listener
+ *
+ * @param tableWidget
+ * table widget
+ * @param column
+ * column to create sort listener for
+ * @param index
+ * column index
+ */
+ private void createColumnSorter(final Table tableWidget,
+ final TableColumn column, final int index) {
+
+ TableColumnSorter cSorter = new TableColumnSorter(table, column) {
+
+ @Override
+ protected int doCompare(Viewer v, Object o1, Object o2) {
+ ITableLabelProvider lp = ((ITableLabelProvider) table
+ .getLabelProvider());
+ String t1 = lp.getColumnText(o1, index);
+ String t2 = lp.getColumnText(o2, index);
+ return t1.compareTo(t2);
+ }
+ };
+
+ // Set no sorter as initial state
+ cSorter.setSorter(cSorter, TableColumnSorter.NONE);
+ }
+
+ /**
+ * Adds menu listener to popup menu
+ */
+ private void hookContextMenu() {
+
+ // Create menumanager
+ MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+ menuMgr.setRemoveAllWhenShown(true);
+
+ // Create the menu when event is received
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ IStructuredSelection selection = (IStructuredSelection) table
+ .getSelection();
+ if (!selection.isEmpty()) {
+ EventListEntry entry = (EventListEntry) selection
+ .getFirstElement();
+ removeEventAction.setEntry(entry);
+ manager.add(removeAllEventsAction);
+ manager.add(removeEventAction);
+ if (entry.hasSourceActions()) {
+ manager.add(new Separator());
+ entry.addSourceActions(manager);
+ }
+ manager.add(new Separator(
+ IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+ }
+ });
+
+ // Set the menu in to the table
+ Menu menu = menuMgr.createContextMenu(table.getControl());
+ table.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, table);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ table.getControl().setFocus();
+ }
+
+ /**
+ * Gets the event list interface
+ *
+ * @return the event list
+ */
+ public static TraceEventList getEventList() {
+ TraceEventList list = Activator.getDefault().eventList;
+ if (list == null) {
+ list = new EventListContentProvider();
+ Activator.getDefault().eventList = list;
+ }
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.trace.eventview.ContentChangeListener#contentChanged()
+ */
+ public void contentChanged() {
+ IWorkbenchSiteProgressService progressService = (IWorkbenchSiteProgressService) getSite()
+ .getAdapter(IWorkbenchSiteProgressService.class);
+ progressService.warnOfContentChange();
+ }
+}