/******************************************************************************* * 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.testcaseselection; 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 TestCaseSelectionDialog extends ElementListSelectionDialog { private final ITestCaseLister testCaseLister; private final ITestCaseFilter filter; private boolean sourceOnly = true; public TestCaseSelectionDialog(Shell parentShell, ITestCaseLister testCaseLister, ITestCaseFilter filter, String message) { super(parentShell, new TestCaseLabelProvider()); this.testCaseLister = testCaseLister; this.filter = filter; setTitle(Messages.TestCaseSelectionDialog_title_select_tests); setMessage(message); setMultipleSelection(true); } public boolean isSourceOnly() { return sourceOnly; } public void setSourceOnly(boolean sourceOnly) { this.sourceOnly = sourceOnly; } @Override public int open() { try { setElements(testCaseLister.getTestCases(!sourceOnly, filter)); return super.open(); } catch (TestCaseListException 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(Messages.TestCaseSelectionDialog_btnSourceOnly); btnSourceOnly.setSelection(sourceOnly); btnSourceOnly.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { sourceOnly = btnSourceOnly.getSelection(); try { setListElements(testCaseLister.getTestCases(!sourceOnly, filter)); } catch (TestCaseListException 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(); } }