sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.button/src/com/nokia/carbide/cpp/internal/pi/button/ui/BupProfileTreeViewer.java
/*
* 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;
}
}