1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / preferences / CompilerPropertyPage.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/CompilerPropertyPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/CompilerPropertyPage.java
new file mode 100644 (file)
index 0000000..377710b
--- /dev/null
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * 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 net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds;
+import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo;
+import net.sourceforge.phpdt.internal.ui.dialogs.StatusUtil;
+import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener;
+import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.DialogField;
+import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
+import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.LayoutUtil;
+import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.ControlEnableState;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.IPreferencePage;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.preference.PreferenceNode;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+/**
+ * Property page used to configure project specific compiler settings
+ */
+public class CompilerPropertyPage extends PropertyPage {
+
+       private CompilerConfigurationBlock fConfigurationBlock;
+
+       private Control fConfigurationBlockControl;
+
+       private ControlEnableState fBlockEnableState;
+
+       private SelectionButtonDialogField fUseWorkspaceSettings;
+
+       private SelectionButtonDialogField fChangeWorkspaceSettings;
+
+       private SelectionButtonDialogField fUseProjectSettings;
+
+       private IStatus fBlockStatus;
+
+       public CompilerPropertyPage() {
+               fBlockStatus = new StatusInfo();
+               fBlockEnableState = null;
+
+               IDialogFieldListener listener = new IDialogFieldListener() {
+                       public void dialogFieldChanged(DialogField field) {
+                               doDialogFieldChanged(field);
+                       }
+               };
+
+               fUseWorkspaceSettings = new SelectionButtonDialogField(SWT.RADIO);
+               fUseWorkspaceSettings.setDialogFieldListener(listener);
+               fUseWorkspaceSettings.setLabelText(PreferencesMessages
+                               .getString("CompilerPropertyPage.useworkspacesettings.label")); //$NON-NLS-1$
+
+               fChangeWorkspaceSettings = new SelectionButtonDialogField(SWT.PUSH);
+               fChangeWorkspaceSettings.setLabelText(PreferencesMessages
+                               .getString("CompilerPropertyPage.useworkspacesettings.change")); //$NON-NLS-1$
+               fChangeWorkspaceSettings.setDialogFieldListener(listener);
+
+               fUseWorkspaceSettings.attachDialogField(fChangeWorkspaceSettings);
+
+               fUseProjectSettings = new SelectionButtonDialogField(SWT.RADIO);
+               fUseProjectSettings.setDialogFieldListener(listener);
+               fUseProjectSettings.setLabelText(PreferencesMessages
+                               .getString("CompilerPropertyPage.useprojectsettings.label")); //$NON-NLS-1$
+       }
+
+       /*
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       public void createControl(Composite parent) {
+               super.createControl(parent);
+               PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
+                               IJavaHelpContextIds.COMPILER_PROPERTY_PAGE);
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.IPreferencePage#createContents(Composite)
+        */
+       protected Control createContents(Composite parent) {
+               IStatusChangeListener listener = new IStatusChangeListener() {
+                       public void statusChanged(IStatus status) {
+                               fBlockStatus = status;
+                               doStatusChanged();
+                       }
+               };
+               fConfigurationBlock = new CompilerConfigurationBlock(listener,
+                               getProject());
+
+               Composite composite = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.marginHeight = 0;
+               layout.marginWidth = 0;
+               layout.numColumns = 2;
+               composite.setLayout(layout);
+
+               fUseWorkspaceSettings.doFillIntoGrid(composite, 1);
+               LayoutUtil.setHorizontalGrabbing(fUseWorkspaceSettings
+                               .getSelectionButton(null));
+
+               fChangeWorkspaceSettings.doFillIntoGrid(composite, 1);
+
+               fUseProjectSettings.doFillIntoGrid(composite, 2);
+
+               GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
+                               | GridData.VERTICAL_ALIGN_FILL);
+               data.horizontalSpan = 2;
+
+               fConfigurationBlockControl = fConfigurationBlock
+                               .createContents(composite);
+               fConfigurationBlockControl.setLayoutData(data);
+
+               boolean useProjectSettings = fConfigurationBlock
+                               .hasProjectSpecificOptions();
+
+               fUseProjectSettings.setSelection(useProjectSettings);
+               fUseWorkspaceSettings.setSelection(!useProjectSettings);
+
+               updateEnableState();
+               Dialog.applyDialogFont(composite);
+               return composite;
+       }
+
+       private boolean useProjectSettings() {
+               return fUseProjectSettings.isSelected();
+       }
+
+       private void doDialogFieldChanged(DialogField field) {
+               if (field == fChangeWorkspaceSettings) {
+                       String id = "net.sourceforge.phpdt.ui.preferences.CompilerPreferencePage"; //$NON-NLS-1$
+                       CompilerPreferencePage page = new CompilerPreferencePage();
+                       showPreferencePage(id, page);
+               } else {
+                       updateEnableState();
+                       doStatusChanged();
+               }
+       }
+
+       /**
+        * Method statusChanged.
+        */
+       private void doStatusChanged() {
+               updateStatus(useProjectSettings() ? fBlockStatus : new StatusInfo());
+       }
+
+       /**
+        * Method getProject.
+        */
+       private IJavaProject getProject() {
+               return (IJavaProject) getElement().getAdapter(IJavaElement.class);
+       }
+
+       private void updateEnableState() {
+               if (useProjectSettings()) {
+                       if (fBlockEnableState != null) {
+                               fBlockEnableState.restore();
+                               fBlockEnableState = null;
+                       }
+               } else {
+                       if (fBlockEnableState == null) {
+                               fBlockEnableState = ControlEnableState
+                                               .disable(fConfigurationBlockControl);
+                       }
+               }
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
+        */
+       protected void performDefaults() {
+               if (useProjectSettings()) {
+                       fUseProjectSettings.setSelection(false);
+                       fUseWorkspaceSettings.setSelection(true);
+                       fConfigurationBlock.performDefaults();
+               }
+               super.performDefaults();
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+        */
+       public boolean performOk() {
+               return fConfigurationBlock.performOk(useProjectSettings());
+       }
+
+       private void updateStatus(IStatus status) {
+               setValid(!status.matches(IStatus.ERROR));
+               StatusUtil.applyToStatusLine(this, status);
+       }
+
+       private boolean showPreferencePage(String id, IPreferencePage page) {
+               final IPreferenceNode targetNode = new PreferenceNode(id, page);
+
+               PreferenceManager manager = new PreferenceManager();
+               manager.addToRoot(targetNode);
+               final PreferenceDialog dialog = new PreferenceDialog(getControl()
+                               .getShell(), manager);
+               final boolean[] result = new boolean[] { false };
+               BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
+                       public void run() {
+                               dialog.create();
+                               dialog.setMessage(targetNode.getLabelText());
+                               result[0] = (dialog.open() == Window.OK);
+                       }
+               });
+               return result[0];
+       }
+
+}