trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/ComponentSelectionDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/ComponentSelectionDialog.java Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,325 @@
+/*
+ * 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:
+ *
+ * Component / Group selection dialog
+ *
+ */
+package com.nokia.traceviewer.dialog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.PlatformUI;
+
+import com.nokia.traceviewer.engine.TraceViewerGlobals;
+import com.nokia.traceviewer.engine.activation.TraceActivationComponentItem;
+import com.nokia.traceviewer.engine.activation.TraceActivationGroupItem;
+
+/**
+ * Component / Group selection dialog
+ *
+ */
+public final class ComponentSelectionDialog extends BaseDialog {
+
+ /**
+ * Hex prefix
+ */
+ private static final String HEX_PREFIX = "0x"; //$NON-NLS-1$
+
+ /**
+ * Group column text
+ */
+ private static final String GROUP_COLUMN_TEXT = Messages
+ .getString("ComponentSelectionDialog.GroupColumnText"); //$NON-NLS-1$
+
+ /**
+ * Component column text
+ */
+ private static final String COMPONENT_COLUMN_TEXT = Messages
+ .getString("ComponentSelectionDialog.ComponentColumnText"); //$NON-NLS-1$
+
+ /**
+ * Group shell text
+ */
+ private static final String GROUP_SHELL_TEXT = Messages
+ .getString("ComponentSelectionDialog.GroupShellText"); //$NON-NLS-1$
+
+ /**
+ * Component shell text
+ */
+ private static final String COMPONENT_SHELL_TEXT = Messages
+ .getString("ComponentSelectionDialog.ComponentShellText"); //$NON-NLS-1$
+
+ /**
+ * Table where components / groups are shown
+ */
+ private Table table;
+
+ /**
+ * Name column for table
+ */
+ private TableColumn nameColumn;
+
+ /**
+ * ID column for table
+ */
+ private TableColumn idColumn;
+
+ /**
+ * Indicates that should dialog show components or groups
+ */
+ private boolean isShowingComponents = true;
+
+ /**
+ * If dialog is showing groups, show them from this component ID
+ */
+ private int componentId;
+
+ /**
+ * Selected item ID that can be asked after dialog is closed
+ */
+ private String selectedItemId;
+
+ /**
+ * Selected item name that can be asked after dialog is closed
+ */
+ private String selectedItemName;
+
+ /**
+ * Constructor
+ */
+ public ComponentSelectionDialog() {
+ // Pass the default styles here
+ super(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
+ SWT.DIALOG_TRIM | SWT.RESIZE | SWT.SYSTEM_MODAL);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.traceviewer.dialog.BaseDialog#createDialogContents()
+ */
+ @Override
+ protected void createDialogContents() {
+
+ // Shell
+ GridLayout shellGridLayout = new GridLayout();
+ shellGridLayout.numColumns = 3;
+ if (isShowingComponents) {
+ getShell().setText(COMPONENT_SHELL_TEXT);
+ } else {
+ getShell().setText(GROUP_SHELL_TEXT);
+ }
+ composite.setLayout(shellGridLayout);
+
+ // Table
+ GridData listGridData = new GridData();
+ listGridData.horizontalAlignment = GridData.FILL;
+ listGridData.grabExcessHorizontalSpace = true;
+ listGridData.grabExcessVerticalSpace = true;
+ listGridData.horizontalSpan = 3;
+ listGridData.verticalAlignment = GridData.FILL;
+ listGridData.heightHint = 400;
+ listGridData.widthHint = 300;
+ table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION);
+ table.setHeaderVisible(true);
+ table.setLayoutData(listGridData);
+
+ // Table columns
+ nameColumn = new TableColumn(table, SWT.NONE);
+ if (isShowingComponents) {
+ nameColumn.setText(COMPONENT_COLUMN_TEXT);
+ } else {
+ nameColumn.setText(GROUP_COLUMN_TEXT);
+ }
+ idColumn = new TableColumn(table, SWT.NONE);
+ idColumn.setText("ID"); //$NON-NLS-1$
+
+ // Spacer
+ GridData spacerGridData = new GridData();
+ spacerGridData.horizontalAlignment = GridData.BEGINNING;
+ spacerGridData.grabExcessHorizontalSpace = true;
+ spacerGridData.verticalAlignment = GridData.CENTER;
+ Label spacerLabel = new Label(composite, SWT.NONE);
+ spacerLabel.setText(""); //$NON-NLS-1$
+ spacerLabel.setLayoutData(spacerGridData);
+
+ // Fill table
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ fillTable();
+ }
+ }
+
+ /**
+ * Fills table from decode provider
+ */
+ private void fillTable() {
+ List<TraceActivationComponentItem> components = TraceViewerGlobals
+ .getDecodeProvider().getActivationInformation(false);
+ // Show components
+ if (isShowingComponents) {
+ for (int i = 0; i < components.size(); i++) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ String id = HEX_PREFIX
+ + Integer.toHexString(components.get(i).getId());
+ item.setText(new String[] { components.get(i).getName(), id });
+ }
+
+ // Show groups
+ } else {
+ // Component is defined, show groups from that component only
+ if (componentId != NOT_DEFINED) {
+ TraceActivationComponentItem component = null;
+
+ // Find the right component
+ for (int i = 0; i < components.size(); i++) {
+ if (components.get(i).getId() == componentId) {
+ component = components.get(i);
+ break;
+ }
+ }
+
+ if (component != null) {
+
+ // Print the groups from the component
+ for (int i = 0; i < component.getGroups().size(); i++) {
+ TraceActivationGroupItem group = component.getGroups()
+ .get(i);
+ TableItem item = new TableItem(table, SWT.NONE);
+ String id = HEX_PREFIX
+ + Integer.toHexString(group.getId());
+ item.setText(new String[] { group.getName(), id });
+ }
+ }
+
+ // Component is not defined, show all groups
+ } else {
+ // Put all groups to one arraylist
+ ArrayList<TraceActivationGroupItem> allGroups = new ArrayList<TraceActivationGroupItem>();
+
+ // Loop through components
+ for (int i = 0; i < components.size(); i++) {
+ allGroups.addAll(components.get(i).getGroups());
+ }
+ // Create listitems from the list
+ for (int i = 0; i < allGroups.size(); i++) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ String id = HEX_PREFIX
+ + Integer.toHexString(allGroups.get(i).getId());
+ item
+ .setText(new String[] { allGroups.get(i).getName(),
+ id });
+ }
+ }
+ }
+
+ nameColumn.pack();
+ idColumn.pack();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ TableItem[] selection = table.getSelection();
+ if (selection.length > 0) {
+ try {
+ // Get the ID
+ selectedItemId = selection[0].getText(1);
+ } catch (NumberFormatException e) {
+ selectedItemId = ""; //$NON-NLS-1$
+ }
+ // Get the name
+ selectedItemName = selection[0].getText(0);
+ } else {
+ selectedItemId = ""; //$NON-NLS-1$
+ selectedItemName = ""; //$NON-NLS-1$
+ }
+ super.okPressed();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+ */
+ @Override
+ protected void cancelPressed() {
+ selectedItemId = ""; //$NON-NLS-1$
+ selectedItemName = ""; //$NON-NLS-1$
+ super.cancelPressed();
+ }
+
+ /**
+ * Gets the selected item ID as a hex String
+ *
+ * @return the selectedItemId
+ */
+ public String getSelectedItemId() {
+ return selectedItemId;
+ }
+
+ /**
+ * Gets selected item name
+ *
+ * @return the selectedItemName
+ */
+ public String getSelectedItemName() {
+ return selectedItemName;
+ }
+
+ /**
+ * Sets dialog to show either components or groups
+ *
+ * @param showComponents
+ * if true, dialog shows components
+ * @param componentId
+ * if showing groups, show them only from this component
+ */
+ public void setDialogToShowComponents(boolean showComponents,
+ int componentId) {
+ // Remove old items
+ if (table != null && !table.isDisposed()) {
+ table.removeAll();
+ }
+ isShowingComponents = showComponents;
+ if (!showComponents) {
+ this.componentId = componentId;
+ } else {
+ this.componentId = NOT_DEFINED;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.traceviewer.dialog.BaseDialog#createActionListeners()
+ */
+ @Override
+ protected void createActionListeners() {
+ // No need for action listeners in this dialog
+ }
+
+}