blob: d01a63b597340931b017314591f5d9dfd496e957 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Mylyn project committers and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.ide.wizards;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.IBundleGroup;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.branding.IBundleGroupConstants;
/**
* @author Steffen Pingel
*/
public class SelectFeaturePage extends WizardPage {
private static final int TABLE_HEIGHT = 200;
private IBundleGroup selectedBundleGroup;
private final IBundleGroup[] bundleGroups;
private ImageRegistry imageRegistry;
public SelectFeaturePage(String pageName, IBundleGroup[] bundleGroups) {
super(pageName);
this.bundleGroups = bundleGroups;
setTitle("Select a feature");
}
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout(1, true);
container.setLayout(layout);
imageRegistry = new ImageRegistry(getShell().getDisplay());
for (IBundleGroup bundleGroup : bundleGroups) {
String imageUrl = bundleGroup.getProperty(IBundleGroupConstants.FEATURE_IMAGE);
if (imageUrl != null) {
try {
ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(new URL(imageUrl));
imageRegistry.put(bundleGroup.getIdentifier(), imageDescriptor);
} catch (MalformedURLException e) {
// ignore
}
}
}
TableViewer viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).hint(SWT.DEFAULT, TABLE_HEIGHT).applyTo(viewer.getControl());
viewer.setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
return bundleGroups;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
viewer.setLabelProvider(new LabelProvider() {
@Override
public Image getImage(Object element) {
if (element instanceof IBundleGroup) {
IBundleGroup bundleGroup = (IBundleGroup) element;
return imageRegistry.get(bundleGroup.getIdentifier());
}
return null;
}
@Override
public String getText(Object element) {
if (element instanceof IBundleGroup) {
IBundleGroup bundleGroup = (IBundleGroup) element;
return bundleGroup.getName();
}
return "";
}
});
viewer.setInput(TasksUiPlugin.getRepositoryManager().getRepositoryConnectors());
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
if (selection.getFirstElement() instanceof IBundleGroup) {
selectedBundleGroup = (IBundleGroup) selection.getFirstElement();
setMessage(selectedBundleGroup.getDescription());
setPageComplete(true);
} else {
setMessage(null);
setPageComplete(false);
}
}
});
viewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
if (getWizard().performFinish()) {
((WizardDialog) getContainer()).close();
}
}
});
viewer.getTable().showSelection();
viewer.getTable().setFocus();
viewer.setSorter(new ViewerSorter());
setControl(container);
}
@Override
public void dispose() {
if (imageRegistry != null) {
imageRegistry.dispose();
}
super.dispose();
}
public IBundleGroup[] getSelectedBundleGroups() {
return new IBundleGroup[] { selectedBundleGroup };
}
}