Java tutorial
/* * 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(); } }