/*******************************************************************************
* Copyright (c) 2010 Neil Bartlett.
* 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
*
* Contributors:
* Neil Bartlett - initial API and implementation
*******************************************************************************/
package bndtools.internal.pkgselection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
public class PackageSelectionDialog extends ElementListSelectionDialog {
private final IPackageLister packageLister;
private final IPackageFilter filter;
private boolean sourceOnly = true;
public PackageSelectionDialog(Shell parentShell, IPackageLister packageLister, IPackageFilter filter, String message) {
super(parentShell, new PackageNameLabelProvider());
this.packageLister = packageLister;
this.filter = filter;
setTitle("Select Packages");
setMessage(message);
setMultipleSelection(true);
}
public boolean isSourceOnly() {
return sourceOnly;
}
public void setSourceOnly(boolean sourceOnly) {
this.sourceOnly = sourceOnly;
}
@Override
public int open() {
try {
setElements(packageLister.getPackages(!sourceOnly, filter));
return super.open();
} catch (PackageListException e) {
return CANCEL;
}
}
@Override
protected Control createDialogArea(Composite parent) {
Composite contents = (Composite) super.createDialogArea(parent);
createSourceOnlyCheckbox(contents);
return contents;
}
protected void createSourceOnlyCheckbox(Composite contents) {
final Button btnSourceOnly = new Button(contents, SWT.CHECK);
btnSourceOnly.setText("Show source packages only");
btnSourceOnly.setSelection(sourceOnly);
btnSourceOnly.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
sourceOnly = btnSourceOnly.getSelection();
try {
setListElements(packageLister.getPackages(!sourceOnly, filter));
} catch (PackageListException e1) {
setListElements(new Object[0]);
}
updateOkState();
}
});
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
btnSourceOnly.setLayoutData(gd);
}
@Override
protected void handleEmptyList() {
// Replace super implemenentation; don't disable the fields when the
// initial list is empty
updateOkState();
}
}