diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/WorkingSetGroup.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/WorkingSetGroup.java | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/WorkingSetGroup.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/WorkingSetGroup.java new file mode 100644 index 000000000..fb33a08b4 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/WorkingSetGroup.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation 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 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package com.android.ide.eclipse.adt.internal.wizards.newproject; + +import org.eclipse.jdt.internal.ui.JavaPlugin; +import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages; +import org.eclipse.jdt.internal.ui.workingsets.IWorkingSetIDs; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkingSet; +import org.eclipse.ui.dialogs.WorkingSetConfigurationBlock; + +/** + * Copied from + * org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPageOne$WorkingSetGroup + * + * Creates the working set group with controls that allow + * the selection of working sets + */ +@SuppressWarnings("restriction") +public class WorkingSetGroup { + + private WorkingSetConfigurationBlock fWorkingSetBlock; + private Button mEnableButton; + + public WorkingSetGroup() { + String[] workingSetIds = new String[] { + IWorkingSetIDs.JAVA, IWorkingSetIDs.RESOURCE + }; + fWorkingSetBlock = new WorkingSetConfigurationBlock(workingSetIds, JavaPlugin.getDefault() + .getDialogSettings()); + } + + public Composite createControl(Composite composite) { + Group workingSetGroup = new Group(composite, SWT.NONE); + workingSetGroup.setFont(composite.getFont()); + workingSetGroup.setText(NewWizardMessages.NewJavaProjectWizardPageOne_WorkingSets_group); + workingSetGroup.setLayout(new GridLayout(1, false)); + + fWorkingSetBlock.createContent(workingSetGroup); + + // WorkingSetGroup is implemented in such a way that the checkbox it contains + // can only be programmatically set if there's an existing working set associated + // *before* we construct the control. However the control is created when the + // wizard is opened, not when the page is first shown. + // + // One choice is to duplicate the class in our project. + // Or find the checkbox we want and trigger it manually. + mEnableButton = findCheckbox(workingSetGroup); + + return workingSetGroup; + } + + public void setWorkingSets(IWorkingSet[] workingSets) { + fWorkingSetBlock.setWorkingSets(workingSets); + } + + public IWorkingSet[] getSelectedWorkingSets() { + try { + return fWorkingSetBlock.getSelectedWorkingSets(); + } catch (Throwable t) { + // Test scenarios; no UI is created, which the fWorkingSetBlock assumes + // (it dereferences the enabledButton) + return new IWorkingSet[0]; + } + } + + public boolean isChecked() { + return mEnableButton == null ? false : mEnableButton.getSelection(); + } + + public void setChecked(boolean state) { + if (mEnableButton != null) { + mEnableButton.setSelection(state); + } + } + + /** + * Finds the first button of style Checkbox in the given parent composite. + * Returns null if not found. + */ + private Button findCheckbox(Composite parent) { + for (Control control : parent.getChildren()) { + if (control instanceof Button && (control.getStyle() & SWT.CHECK) == SWT.CHECK) { + return (Button) control; + } else if (control instanceof Composite) { + Button found = findCheckbox((Composite) control); + if (found != null) { + return found; + } + } + } + + return null; + } +} |