sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.button/src/com/nokia/carbide/cpp/internal/pi/button/ui/BupProfileTreeViewer.java
changeset 2 b9ab3b238396
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.button/src/com/nokia/carbide/cpp/internal/pi/button/ui/BupProfileTreeViewer.java	Thu Feb 11 15:32:31 2010 +0200
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2009 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.button.ui;
+
+import java.util.ArrayList;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+
+import com.nokia.carbide.cpp.pi.button.BupEventMapManager;
+import com.nokia.carbide.cpp.pi.button.IBupEventMapProfile;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+
+public class BupProfileTreeViewer extends TreeViewer {
+	private static final String WORKSPACE_PREF = Messages.getString("BupProfileTreeViewer.0"); //$NON-NLS-1$
+	private static final String CARBIDE_BUILTIN = Messages.getString("BupProfileTreeViewer.1"); //$NON-NLS-1$
+
+	private ISymbianSDK romKit;
+	private Set<ISymbianSDK> appKits;
+	private ISelection lastValidSelection;
+	
+	public class BupProfileTreeData {
+		private ISymbianSDK romSdk;
+		private Set<ISymbianSDK> appSdks;
+		
+		public BupProfileTreeData(ISymbianSDK rom, Set<ISymbianSDK> app) {
+			romSdk = rom;
+			appSdks = app;
+		}
+		
+		public ISymbianSDK getRomSdk() {
+			return romSdk;
+		}
+		
+		public Set<ISymbianSDK> getAppSdk() {
+			return appSdks;
+		}
+	}
+		
+	public class BupProfileTreeContentProvider implements ITreeContentProvider {
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+		 */
+		public Object[] getChildren(Object arg0) {
+			if (arg0 instanceof String) {
+				if (((String)arg0).equals(WORKSPACE_PREF)) {
+					ArrayList<IBupEventMapProfile> workspaceProfiles = BupEventMapManager.getInstance().getProfilesFromWorkspacePref();
+					return workspaceProfiles.toArray();
+				}
+				if (((String)arg0).equals(CARBIDE_BUILTIN)) {
+					ArrayList<IBupEventMapProfile> builtinProfiles = BupEventMapManager.getInstance().getProfilesFromBuiltin();
+					return builtinProfiles.toArray();
+				}
+			}
+			if (arg0 instanceof ISymbianSDK) {
+				ArrayList<IBupEventMapProfile> sdkProfile = BupEventMapManager.getInstance().getProfilesFromSDK((ISymbianSDK)arg0);
+				return sdkProfile.toArray();
+			}
+			return null;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+		 */
+		public Object getParent(Object arg0) {
+			// not implemented
+			return null;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+		 */
+		public boolean hasChildren(Object arg0) {
+			if (arg0 instanceof String) {
+				if (((String)arg0).equals(WORKSPACE_PREF) || ((String)arg0).equals(CARBIDE_BUILTIN)) {
+					return true;
+				}
+			}
+			if (arg0 instanceof ISymbianSDK) {
+				return true;
+			}
+			return false;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(Object arg0) {
+			ArrayList<Object> elements = new ArrayList<Object>();
+			if (romKit != null) {
+				if (getChildren(romKit).length > 0) {
+					elements.add(romKit);
+				}
+			}
+			
+			ISymbianSDK [] appSdks = appKits.toArray(new ISymbianSDK[appKits.size()]);
+			for (ISymbianSDK sdk : appSdks) {
+				if (getChildren(sdk).length > 0) {
+					elements.add(sdk);
+				}
+			}
+			elements.add(WORKSPACE_PREF);
+			elements.add(CARBIDE_BUILTIN);
+			
+			return elements.toArray();
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			if (newInput instanceof BupProfileTreeData) {
+				BupProfileTreeData data = (BupProfileTreeData)newInput;
+				romKit = data.romSdk;
+				appKits = data.appSdks;
+			}
+		}
+		
+	}
+	
+	private class BupProfileTreeLabelProvider extends LabelProvider implements IBaseLabelProvider{
+		public String getText(Object element) {
+			if (element instanceof IBupEventMapProfile) {
+				return ((IBupEventMapProfile)element).getProfileId();
+			}
+			if (element instanceof String) {
+				if (((String)element).equals(WORKSPACE_PREF)) {
+					return (String)element;
+				}
+				if (((String)element).equals(CARBIDE_BUILTIN)) {
+					return (String)element;
+				}
+			}
+			if (element instanceof ISymbianSDK) {
+				return Messages.getString("BupProfileTreeViewer.2") + ((ISymbianSDK)element).getUniqueId(); //$NON-NLS-1$
+			}
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public BupProfileTreeViewer(Composite parent) {
+		super(parent, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+		setContentProvider(new BupProfileTreeContentProvider());
+		setLabelProvider(new BupProfileTreeLabelProvider());
+		final BupProfileTreeViewer viewerSelf = this;
+		this.getTree().addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent arg0) {
+			}
+
+			public void widgetSelected(SelectionEvent arg0) {
+				Object data = arg0.item.getData();
+				if (!(data instanceof IBupEventMapProfile)) {
+					// we are a SWT.SINGLE, so we select last good selection canceling this one,
+					// it behaves like last valid selection stick 
+					viewerSelf.setSelection(lastValidSelection);
+				} else {
+					// remember last valid selection
+					lastValidSelection = viewerSelf.getSelection();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Handy routine for reading selection
+	 * 
+	 * @return
+	 */
+	public IBupEventMapProfile getSelectedProfile() {
+		if (getSelection().isEmpty()) {
+			return null;
+		} else {
+			ISelection selection = getSelection();
+			if (selection instanceof ITreeSelection) {
+				Object firstElement = ((ITreeSelection)selection).getFirstElement();
+				if (firstElement instanceof IBupEventMapProfile) {
+					return (IBupEventMapProfile)firstElement;
+				}
+			}
+		}
+		return null;
+	}
+}