package com.dubture.composer.ui.wizard;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.dltk.ui.DLTKUIPlugin;
import org.eclipse.dltk.ui.environment.IEnvironmentUI;
import org.eclipse.php.internal.core.PHPVersion;
import org.eclipse.php.internal.ui.preferences.IStatusChangeListener;
import org.eclipse.php.internal.ui.preferences.PHPInterpreterPreferencePage;
import org.eclipse.php.internal.ui.preferences.PHPVersionConfigurationBlock;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
@SuppressWarnings("restriction")
public abstract class AbstractVersionGroup extends Observable implements Observer, IStringButtonAdapter,
IDialogFieldListener, SelectionListener {
public PHPVersionConfigurationBlock fConfigurationBlock;
protected final AbstractWizardFirstPage composerProjectWizardFirstPage;
protected int numColumns;
protected static final String DIALOGSTORE_LAST_EXTERNAL_LOC = DLTKUIPlugin.PLUGIN_ID + ".last.external.project"; //$NON-NLS-1$
public AbstractVersionGroup(AbstractWizardFirstPage composerProjectWizardFirstPage, Composite composite, int numColumns, PHPVersion minimumVersion) {
this.composerProjectWizardFirstPage = composerProjectWizardFirstPage;
this.numColumns = numColumns;
final Group group = new Group(composite, SWT.NONE);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setLayout(this.composerProjectWizardFirstPage.initGridLayout(new GridLayout(numColumns, false), true));
group.setText("");
fConfigurationBlock = createConfigurationBlock(new IStatusChangeListener() {
public void statusChanged(IStatus status) {
}
}, (IProject) null, null);
fConfigurationBlock.setMinimumVersion(minimumVersion);
fConfigurationBlock.createContents(group);
fConfigurationBlock.setEnabled(true);
createSubComponents(group);
}
protected void createSubComponents(Group group) {
}
protected PHPVersionConfigurationBlock createConfigurationBlock(IStatusChangeListener listener, IProject project,
IWorkbenchPreferenceContainer container) {
return new PHPVersionConfigurationBlock(listener, project, container, true);
}
protected void fireEvent() {
setChanged();
notifyObservers();
}
@Override
public void update(Observable o, Object arg) {
fireEvent();
}
@Override
public void changeControlPressed(DialogField field) {
IEnvironment environment = this.composerProjectWizardFirstPage.getEnvironment();
IEnvironmentUI environmentUI = (IEnvironmentUI) environment.getAdapter(IEnvironmentUI.class);
if (environmentUI != null) {
String selectedDirectory = environmentUI.selectFolder(this.composerProjectWizardFirstPage.getShell());
if (selectedDirectory != null) {
DLTKUIPlugin.getDefault().getDialogSettings().put(DIALOGSTORE_LAST_EXTERNAL_LOC, selectedDirectory);
}
}
}
@Override
public void dialogFieldChanged(DialogField field) {
fireEvent();
}
@Override
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
@SuppressWarnings("rawtypes")
public void widgetDefaultSelected(SelectionEvent e) {
String prefID = PHPInterpreterPreferencePage.PREF_ID;
Map data = null;
PreferencesUtil.createPreferenceDialogOn(this.composerProjectWizardFirstPage.getShell(), prefID,
new String[] { prefID }, data).open();
}
}