blob: fb33a08b47ab13d75ace5c1111ba93d7eff11d3e [file] [log] [blame]
/*******************************************************************************
* 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;
}
}