sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/PluginSelectionGroup.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/PluginSelectionGroup.java Wed Jun 23 15:05:09 2010 +0300
@@ -0,0 +1,356 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "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:
+ *
+ */
+package com.nokia.carbide.cpp.internal.pi.wizards.ui;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.layout.TableColumnLayout;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.ToolTip;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+
+import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace;
+
+public class PluginSelectionGroup extends Composite {
+
+ private CheckboxTableViewer viewerTraceSelection;
+ private ProfilerDataPlugins profilerDataPlugins;
+ private Label tableTitleLabel;
+ private boolean profilerActivator;
+ private int[] defaultPlugins;
+
+ /**
+ * Constructor
+ *
+ * @param parent
+ * instance of the parent composite
+ * @param wizardSettings
+ * instance of the INewPIWizardSettings
+ */
+ public PluginSelectionGroup(Composite parent,
+ INewPIWizardSettings wizardSettings, boolean profilerActivator) {
+ super(parent, SWT.NONE);
+ this.profilerActivator = profilerActivator;
+ if(profilerActivator){
+ this.defaultPlugins = NewPIWizardSettings.getInstance().defaultPlugins;
+ }
+
+ createContent();
+ }
+
+
+ @Override
+ protected void checkSubclass() {
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.internal.pi.wizards.ui.AbstractBaseGroup#createContent
+ * ()
+ */
+ public void createContent() {
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 1;
+ gridLayout.marginWidth = 0;
+ gridLayout.marginHeight = 0;
+
+ this.setLayout(gridLayout);
+
+ this.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ tableTitleLabel = new Label(this, SWT.NONE);
+ final Composite tablePanel = new Composite(this, SWT.NONE);
+ final GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ tablePanel.setLayout(gridLayout);
+ tablePanel.setLayoutData(layoutData);
+ if(profilerActivator){
+ tableTitleLabel.setText(Messages.getString("TraceSelectionGroup.profilerActivatorTitle")); //$NON-NLS-1$
+ }else{
+ tableTitleLabel.setText(Messages.getString("TraceSelectionGroup.groupTitle")); //$NON-NLS-1$
+ }
+ viewerTraceSelection = CheckboxTableViewer.newCheckList(tablePanel,
+ SWT.BORDER | SWT.FULL_SELECTION);
+ viewerTraceSelection
+ .setContentProvider(new IStructuredContentProvider() {
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof List<?>) {
+ return ((List<?>) inputElement).toArray();
+ }
+ return new Object[0];
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+ }
+
+ });
+ viewerTraceSelection.setSorter(new ViewerSorter() {
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (profilerDataPlugins == null) {
+ return 0;
+ }
+ ITrace trace1 = (ITrace) e1;
+ ITrace trace2 = (ITrace) e2;
+ int returnCode = 0;
+ if (trace1.isMandatory() == true
+ && trace2.isMandatory() == true) {
+ returnCode = trace1.getTraceTitle().compareTo(
+ trace2.getTraceTitle());
+ } else if (trace1.isMandatory() == true
+ && trace2.isMandatory() == false) {
+ returnCode = -1;
+ } else if (trace1.isMandatory() == false
+ && trace2.isMandatory() == true) {
+ returnCode = 1;
+ } else {
+ returnCode = trace1.getTraceTitle().compareTo(
+ trace2.getTraceTitle());
+ }
+ return returnCode;
+ }
+
+ });
+
+ Table table = viewerTraceSelection.getTable();
+ table.setLinesVisible(true);
+ addActions();
+
+ ColumnViewerToolTipSupport.enableFor(viewerTraceSelection,
+ ToolTip.NO_RECREATE);
+
+ TableViewerColumn column = new TableViewerColumn(viewerTraceSelection,
+ SWT.NONE);
+ column.setLabelProvider(new ColumnLabelProvider() {
+ @Override
+ public String getText(final Object element) {
+ if (element instanceof ITrace) {
+ return ((ITrace) element).getTraceTitle();
+ }
+ return element.toString();
+ }
+
+ @Override
+ public String getToolTipText(Object element) {
+ StringBuilder sb = new StringBuilder(((ITrace) element)
+ .getTraceDescription());
+ if (((ITrace) element).getTraceId() == 1) {
+ sb.append(Messages.getString("TraceSelectionGroup.mandatory")); //$NON-NLS-1$
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public Color getForeground(Object element) {
+ if (((ITrace) element).getTraceId() == 1) {
+ return Display.getCurrent().getSystemColor(
+ SWT.COLOR_DARK_GRAY);
+ }
+ return null;
+ }
+
+ @Override
+ public Point getToolTipShift(Object object) {
+ return new Point(5, 5);
+ }
+
+ @Override
+ public int getToolTipTimeDisplayed(Object object) {
+ return 5000;
+ }
+ });
+
+ if(profilerActivator){
+ column.getColumn().setText(Messages.getString("TraceSelectionGroup.profilerActivatorTableColumn")); //$NON-NLS-1$
+ }else{
+ column.getColumn().setText(Messages.getString("TraceSelectionGroup.piView")); //$NON-NLS-1$
+ }
+
+
+ TableColumnLayout tableColumnLayout = new TableColumnLayout();
+ tablePanel.setLayout(tableColumnLayout);
+ tableColumnLayout.setColumnData(column.getColumn(),
+ new ColumnWeightData(1));// column weight 1 to fill the whole
+ // table width
+
+ viewerTraceSelection.setAllChecked(true);
+ viewerTraceSelection.addCheckStateListener(new ICheckStateListener() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged
+ * (org.eclipse.jface.viewers.CheckStateChangedEvent)
+ */
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ if (event.getChecked() == false
+ && viewerTraceSelection.getGrayed(event.getElement())) {
+ // mandatory view; don't allow to deselect it
+ viewerTraceSelection.setChecked(event.getElement(), true);
+ } else {
+ ITrace plugin = (ITrace) event.getElement();
+ profilerDataPlugins.setChecked(plugin, event.getChecked());
+ }
+ }
+ });
+ }
+
+ /**
+ * Update group's title
+ *
+ * @param fileName for the group title
+ */
+ private void updateTitle(String fileName){
+ if(!profilerActivator){
+ if(fileName == null){
+ tableTitleLabel.setText(Messages.getString("TraceSelectionGroup.groupTitle")); //$NON-NLS-1$
+ }else{
+ tableTitleLabel.setText(MessageFormat.format(Messages.getString("TraceSelectionGroup.groupTitleFor"), fileName)); //$NON-NLS-1$
+ }
+ this.layout();
+ }
+ }
+
+ /**
+ * Add actions
+ */
+ private void addActions() {
+ final MenuManager mgr = new MenuManager();
+ Action checkAllAction = new Action(Messages.getString("TraceSelectionGroup.actionCheckAll")) { //$NON-NLS-1$
+ @Override
+ public void run() {
+ if (profilerDataPlugins != null) {
+ profilerDataPlugins.checkAll();
+ viewerTraceSelection.setAllChecked(true);
+ }
+ }
+ };
+ checkAllAction.setEnabled(true);
+
+ Action uncheckAllAction = new Action(Messages.getString("TraceSelectionGroup.actionUncheckAll")) { //$NON-NLS-1$
+ @Override
+ public void run() {
+ if (profilerDataPlugins != null) {
+ profilerDataPlugins.unCheckAll();
+ for(ITrace trace : profilerDataPlugins.getPlugins()){
+ viewerTraceSelection.setChecked(trace, trace.isMandatory());
+ }
+ }
+ }
+ };
+ uncheckAllAction.setEnabled(true);
+ mgr.add(checkAllAction);
+ mgr.add(uncheckAllAction);
+ viewerTraceSelection.getControl().setMenu(
+ mgr.createContextMenu(viewerTraceSelection.getControl()));
+ }
+
+ /**
+ * Update trace ids
+ *
+ * @param profilerDataPlugins
+ */
+ public void updateTraceIds(ProfilerDataPlugins profilerDataPlugins) {
+ this.profilerDataPlugins = profilerDataPlugins;
+ if(profilerDataPlugins == null || profilerDataPlugins.getPlugins() == null){
+ viewerTraceSelection.setInput(null);
+ updateTitle(null);
+ }else{
+ viewerTraceSelection.setInput(profilerDataPlugins.getPlugins());
+ viewerTraceSelection.setAllChecked(true);
+ for (ITrace trace : profilerDataPlugins.getPlugins()) {
+ if (trace.isMandatory()) {
+ viewerTraceSelection.setGrayed(trace, true);
+ } else {
+ if(profilerActivator){
+ boolean checked = false;
+ if(defaultPlugins != null){
+ for(int id : defaultPlugins){
+ if(trace.getTraceId() == id){
+ profilerDataPlugins.setChecked(trace, true);
+ viewerTraceSelection.setChecked(trace, true);
+ checked = true;
+ break;
+ }
+ }
+ }if(!checked){
+ profilerDataPlugins.setChecked(trace, false);
+ viewerTraceSelection.setChecked(trace, false);
+ }
+ }else{
+ viewerTraceSelection.setChecked(trace, profilerDataPlugins
+ .isChecked(trace));
+ }
+ }
+ }
+ updateTitle(profilerDataPlugins.getProfilerDataPath().lastSegment());
+ }
+
+ }
+
+ /**
+ * Get traceids from the selected plug-ins
+ *
+ * @return array of the traceids
+ */
+ public int[] getSelectedPluginIds(){
+ if(profilerDataPlugins == null){
+ return new int[0];
+ }
+ List<ITrace> plugins = profilerDataPlugins.getSelectedPlugins();
+ Iterator<ITrace> traces = plugins.iterator();
+ int[] traceIds = new int[plugins.size()];
+ int i = 0;
+ while(traces.hasNext()){
+ traceIds[i++] = traces.next().getTraceId();
+ }
+ Arrays.sort(traceIds);
+ NewPIWizardSettings.getInstance().defaultPlugins = traceIds;
+ return traceIds;
+ }
+}