X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java deleted file mode 100644 index ebf9ed3..0000000 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java +++ /dev/null @@ -1,584 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package net.sourceforge.phpdt.internal.ui.preferences; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.Map.Entry; - -import net.sourceforge.phpdt.core.IJavaProject; -import net.sourceforge.phpdt.core.JavaCore; -import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener; -import net.sourceforge.phpeclipse.PHPeclipsePlugin; - -import org.eclipse.core.resources.IncrementalProjectBuilder; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -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.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.Widget; - -/** - * Abstract options configuration block providing a general implementation for - * setting up an options configuration page. - * - * @since 2.1 - */ -public abstract class OptionsConfigurationBlock { - - protected static class ControlData { - private String fKey; - - private String[] fValues; - - public ControlData(String key, String[] values) { - fKey = key; - fValues = values; - } - - public String getKey() { - return fKey; - } - - public String getValue(boolean selection) { - int index = selection ? 0 : 1; - return fValues[index]; - } - - public String getValue(int index) { - return fValues[index]; - } - - public int getSelection(String value) { - if (value != null) { - for (int i = 0; i < fValues.length; i++) { - if (value.equals(fValues[i])) { - return i; - } - } - } - return fValues.length - 1; // assume the last option is the least - // severe - } - } - - protected Map fWorkingValues; - - protected ArrayList fCheckBoxes; - - protected ArrayList fComboBoxes; - - protected ArrayList fTextBoxes; - - protected HashMap fLabels; - - private SelectionListener fSelectionListener; - - private ModifyListener fTextModifyListener; - - protected IStatusChangeListener fContext; - - protected IJavaProject fProject; // project or null - - protected String[] fAllKeys; - - private Shell fShell; - - public OptionsConfigurationBlock(IStatusChangeListener context, - IJavaProject project, String[] allKeys) { - fContext = context; - fProject = project; - fAllKeys = allKeys; - - fWorkingValues = getOptions(true); - testIfOptionsComplete(fWorkingValues, allKeys); - - fCheckBoxes = new ArrayList(); - fComboBoxes = new ArrayList(); - fTextBoxes = new ArrayList(2); - fLabels = new HashMap(); - } - - private void testIfOptionsComplete(Map workingValues, String[] allKeys) { - for (int i = 0; i < allKeys.length; i++) { - if (workingValues.get(allKeys[i]) == null) { - PHPeclipsePlugin - .logErrorMessage("preference option missing: " + allKeys[i] + " (" + this.getClass().getName() + ')'); //$NON-NLS-1$//$NON-NLS-2$ - } - } - } - - protected Map getOptions(boolean inheritJavaCoreOptions) { - if (fProject != null) { - return fProject.getOptions(inheritJavaCoreOptions); - } else { - return JavaCore.getOptions(); - } - } - - protected Map getDefaultOptions() { - return JavaCore.getDefaultOptions(); - } - - public final boolean hasProjectSpecificOptions() { - if (fProject != null) { - Map settings = fProject.getOptions(false); - String[] allKeys = fAllKeys; - for (int i = 0; i < allKeys.length; i++) { - if (settings.get(allKeys[i]) != null) { - return true; - } - } - } - return false; - } - - protected void setOptions(Map map) { - if (fProject != null) { - Map oldOptions = fProject.getOptions(false); - fProject.setOptions(map); - firePropertyChangeEvents(oldOptions, map); - } else { - JavaCore.setOptions((Hashtable) map); - } - } - - /** - * Computes the differences between the given old and new options and fires - * corresponding property change events on the Java plugin's mockup - * preference store. - * - * @param oldOptions - * The old options - * @param newOptions - * The new options - */ - private void firePropertyChangeEvents(Map oldOptions, Map newOptions) { - oldOptions = new HashMap(oldOptions); - Object source = fProject.getProject(); - MockupPreferenceStore store = PHPeclipsePlugin.getDefault() - .getMockupPreferenceStore(); - Iterator iter = newOptions.entrySet().iterator(); - while (iter.hasNext()) { - Entry entry = (Entry) iter.next(); - - String name = (String) entry.getKey(); - Object oldValue = oldOptions.get(name); - Object newValue = entry.getValue(); - - if ((oldValue != null && !oldValue.equals(newValue)) - || (oldValue == null && newValue != null)) - store.firePropertyChangeEvent(source, name, oldValue, newValue); - oldOptions.remove(name); - } - - iter = oldOptions.entrySet().iterator(); - while (iter.hasNext()) { - Entry entry = (Entry) iter.next(); - store.firePropertyChangeEvent(source, (String) entry.getKey(), - entry.getValue(), null); - } - } - - protected Shell getShell() { - return fShell; - } - - protected void setShell(Shell shell) { - fShell = shell; - } - - protected abstract Control createContents(Composite parent); - - protected Button addCheckBox(Composite parent, String label, String key, - String[] values, int indent) { - ControlData data = new ControlData(key, values); - - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gd.horizontalSpan = 3; - gd.horizontalIndent = indent; - - Button checkBox = new Button(parent, SWT.CHECK); - checkBox.setText(label); - checkBox.setData(data); - checkBox.setLayoutData(gd); - checkBox.addSelectionListener(getSelectionListener()); - - String currValue = (String) fWorkingValues.get(key); - checkBox.setSelection(data.getSelection(currValue) == 0); - - fCheckBoxes.add(checkBox); - - return checkBox; - } - - protected Combo addComboBox(Composite parent, String label, String key, - String[] values, String[] valueLabels, int indent) { - ControlData data = new ControlData(key, values); - - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalIndent = indent; - - Label labelControl = new Label(parent, SWT.LEFT | SWT.WRAP); - labelControl.setText(label); - labelControl.setLayoutData(gd); - - Combo comboBox = new Combo(parent, SWT.READ_ONLY); - comboBox.setItems(valueLabels); - comboBox.setData(data); - comboBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - comboBox.addSelectionListener(getSelectionListener()); - - fLabels.put(comboBox, labelControl); - - Label placeHolder = new Label(parent, SWT.NONE); - placeHolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - String currValue = (String) fWorkingValues.get(key); - comboBox.select(data.getSelection(currValue)); - - fComboBoxes.add(comboBox); - return comboBox; - } - - protected void addInversedComboBox(Composite parent, String label, - String key, String[] values, String[] valueLabels, int indent) { - ControlData data = new ControlData(key, values); - - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalIndent = indent; - gd.horizontalSpan = 3; - - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.numColumns = 2; - composite.setLayout(layout); - composite.setLayoutData(gd); - - Combo comboBox = new Combo(composite, SWT.READ_ONLY); - comboBox.setItems(valueLabels); - comboBox.setData(data); - comboBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - comboBox.addSelectionListener(getSelectionListener()); - - Label labelControl = new Label(composite, SWT.LEFT | SWT.WRAP); - labelControl.setText(label); - labelControl.setLayoutData(new GridData()); - - fLabels.put(comboBox, labelControl); - - String currValue = (String) fWorkingValues.get(key); - comboBox.select(data.getSelection(currValue)); - - fComboBoxes.add(comboBox); - } - - protected Text addTextField(Composite parent, String label, String key, - int indent, int widthHint) { - Label labelControl = new Label(parent, SWT.NONE); - labelControl.setText(label); - labelControl.setLayoutData(new GridData()); - - Text textBox = new Text(parent, SWT.BORDER | SWT.SINGLE); - textBox.setData(key); - textBox.setLayoutData(new GridData()); - - fLabels.put(textBox, labelControl); - - String currValue = (String) fWorkingValues.get(key); - if (currValue != null) { - textBox.setText(currValue); - } - textBox.addModifyListener(getTextModifyListener()); - - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - if (widthHint != 0) { - data.widthHint = widthHint; - } - data.horizontalIndent = indent; - data.horizontalSpan = 2; - textBox.setLayoutData(data); - - fTextBoxes.add(textBox); - return textBox; - } - - protected SelectionListener getSelectionListener() { - if (fSelectionListener == null) { - fSelectionListener = new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - } - - public void widgetSelected(SelectionEvent e) { - controlChanged(e.widget); - } - }; - } - return fSelectionListener; - } - - protected ModifyListener getTextModifyListener() { - if (fTextModifyListener == null) { - fTextModifyListener = new ModifyListener() { - public void modifyText(ModifyEvent e) { - textChanged((Text) e.widget); - } - }; - } - return fTextModifyListener; - } - - protected void controlChanged(Widget widget) { - ControlData data = (ControlData) widget.getData(); - String newValue = null; - if (widget instanceof Button) { - newValue = data.getValue(((Button) widget).getSelection()); - } else if (widget instanceof Combo) { - newValue = data.getValue(((Combo) widget).getSelectionIndex()); - } else { - return; - } - fWorkingValues.put(data.getKey(), newValue); - - validateSettings(data.getKey(), newValue); - } - - protected void textChanged(Text textControl) { - String key = (String) textControl.getData(); - String number = textControl.getText(); - fWorkingValues.put(key, number); - validateSettings(key, number); - } - - protected boolean checkValue(String key, String value) { - return value.equals(fWorkingValues.get(key)); - } - - /* - * (non-javadoc) Update fields and validate. @param changedKey Key that - * changed, or null, if all changed. - */ - protected abstract void validateSettings(String changedKey, String newValue); - - protected String[] getTokens(String text, String separator) { - StringTokenizer tok = new StringTokenizer(text, separator); //$NON-NLS-1$ - int nTokens = tok.countTokens(); - String[] res = new String[nTokens]; - for (int i = 0; i < res.length; i++) { - res[i] = tok.nextToken().trim(); - } - return res; - } - - public boolean performOk(boolean enabled) { - String[] allKeys = fAllKeys; - Map actualOptions = getOptions(false); - - // preserve other options - boolean hasChanges = false; - for (int i = 0; i < allKeys.length; i++) { - String key = allKeys[i]; - String oldVal = (String) actualOptions.get(key); - String val = null; - if (enabled) { - val = (String) fWorkingValues.get(key); - if (val != null && !val.equals(oldVal)) { - hasChanges = true; - actualOptions.put(key, val); - } - } else { - if (oldVal != null) { - actualOptions.remove(key); - hasChanges = true; - } - } - } - - if (hasChanges) { - boolean doBuild = false; - String[] strings = getFullBuildDialogStrings(fProject == null); - if (strings != null) { - MessageDialog dialog = new MessageDialog(getShell(), - strings[0], null, strings[1], MessageDialog.QUESTION, - new String[] { IDialogConstants.YES_LABEL, - IDialogConstants.NO_LABEL, - IDialogConstants.CANCEL_LABEL }, 2); - int res = dialog.open(); - if (res == 0) { - doBuild = true; - } else if (res != 1) { - return false; // cancel pressed - } - } - setOptions(actualOptions); - if (doBuild) { - boolean res = doFullBuild(); - if (!res) { - return false; - } - } - } - return true; - } - - protected abstract String[] getFullBuildDialogStrings( - boolean workspaceSettings); - - protected boolean doFullBuild() { - - Job buildJob = new Job(PreferencesMessages - .getString("OptionsConfigurationBlock.job.title")) { //$NON-NLS-1$ - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) - */ - protected IStatus run(IProgressMonitor monitor) { - try { - if (fProject != null) { - monitor - .setTaskName(PreferencesMessages - .getFormattedString( - "OptionsConfigurationBlock.buildproject.taskname", fProject.getElementName())); //$NON-NLS-1$ - fProject.getProject().build( - IncrementalProjectBuilder.FULL_BUILD, - new SubProgressMonitor(monitor, 1)); - PHPeclipsePlugin.getWorkspace().build( - IncrementalProjectBuilder.INCREMENTAL_BUILD, - new SubProgressMonitor(monitor, 1)); - } else { - monitor - .setTaskName(PreferencesMessages - .getString("OptionsConfigurationBlock.buildall.taskname")); //$NON-NLS-1$ - PHPeclipsePlugin.getWorkspace().build( - IncrementalProjectBuilder.FULL_BUILD, - new SubProgressMonitor(monitor, 2)); - } - } catch (CoreException e) { - return e.getStatus(); - } catch (OperationCanceledException e) { - return Status.CANCEL_STATUS; - } finally { - monitor.done(); - } - return Status.OK_STATUS; - } - - public boolean belongsTo(Object family) { - return ResourcesPlugin.FAMILY_MANUAL_BUILD == family; - } - }; - - buildJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory() - .buildRule()); - buildJob.setUser(true); - buildJob.schedule(); - return true; - } - - public void performDefaults() { - fWorkingValues = getDefaultOptions(); - updateControls(); - validateSettings(null, null); - } - - protected void updateControls() { - // update the UI - for (int i = fCheckBoxes.size() - 1; i >= 0; i--) { - updateCheckBox((Button) fCheckBoxes.get(i)); - } - for (int i = fComboBoxes.size() - 1; i >= 0; i--) { - updateCombo((Combo) fComboBoxes.get(i)); - } - for (int i = fTextBoxes.size() - 1; i >= 0; i--) { - updateText((Text) fTextBoxes.get(i)); - } - } - - protected void updateCombo(Combo curr) { - ControlData data = (ControlData) curr.getData(); - - String currValue = (String) fWorkingValues.get(data.getKey()); - curr.select(data.getSelection(currValue)); - } - - protected void updateCheckBox(Button curr) { - ControlData data = (ControlData) curr.getData(); - - String currValue = (String) fWorkingValues.get(data.getKey()); - curr.setSelection(data.getSelection(currValue) == 0); - } - - protected void updateText(Text curr) { - String key = (String) curr.getData(); - - String currValue = (String) fWorkingValues.get(key); - if (currValue != null) { - curr.setText(currValue); - } - } - - protected Button getCheckBox(String key) { - for (int i = fCheckBoxes.size() - 1; i >= 0; i--) { - Button curr = (Button) fCheckBoxes.get(i); - ControlData data = (ControlData) curr.getData(); - if (key.equals(data.getKey())) { - return curr; - } - } - return null; - } - - protected Combo getComboBox(String key) { - for (int i = fComboBoxes.size() - 1; i >= 0; i--) { - Combo curr = (Combo) fComboBoxes.get(i); - ControlData data = (ControlData) curr.getData(); - if (key.equals(data.getKey())) { - return curr; - } - } - return null; - } - - protected void setComboEnabled(String key, boolean enabled) { - Combo combo = getComboBox(key); - Label label = (Label) fLabels.get(combo); - combo.setEnabled(enabled); - label.setEnabled(enabled); - } - -}