X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java new file mode 100644 index 0000000..b9395f4 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java @@ -0,0 +1,234 @@ +/******************************************************************************* + * 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 task tags settings + */ +public class TodoTaskPropertyPage extends PropertyPage { + + private TodoTaskConfigurationBlock fConfigurationBlock; + + private Control fConfigurationBlockControl; + + private ControlEnableState fBlockEnableState; + + private SelectionButtonDialogField fUseWorkspaceSettings; + + private SelectionButtonDialogField fChangeWorkspaceSettings; + + private SelectionButtonDialogField fUseProjectSettings; + + private IStatus fBlockStatus; + + public TodoTaskPropertyPage() { + 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("TodoTaskPropertyPage.useworkspacesettings.label")); //$NON-NLS-1$ + + fChangeWorkspaceSettings = new SelectionButtonDialogField(SWT.PUSH); + fChangeWorkspaceSettings.setLabelText(PreferencesMessages + .getString("TodoTaskPropertyPage.useworkspacesettings.change")); //$NON-NLS-1$ + fChangeWorkspaceSettings.setDialogFieldListener(listener); + + fUseWorkspaceSettings.attachDialogField(fChangeWorkspaceSettings); + + fUseProjectSettings = new SelectionButtonDialogField(SWT.RADIO); + fUseProjectSettings.setDialogFieldListener(listener); + fUseProjectSettings.setLabelText(PreferencesMessages + .getString("TodoTaskPropertyPage.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.TODOTASK_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 TodoTaskConfigurationBlock(listener, + getProject()); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginHeight = 0; + layout.marginWidth = 0; + layout.numColumns = 1; + composite.setLayout(layout); + + fUseWorkspaceSettings.doFillIntoGrid(composite, 1); + LayoutUtil.setHorizontalGrabbing(fUseWorkspaceSettings + .getSelectionButton(null)); + + fChangeWorkspaceSettings.doFillIntoGrid(composite, 1); + GridData data = (GridData) fChangeWorkspaceSettings.getSelectionButton( + null).getLayoutData(); + data.horizontalIndent = convertWidthInCharsToPixels(3); + data.horizontalAlignment = GridData.BEGINNING; + + fUseProjectSettings.doFillIntoGrid(composite, 1); + + data = new GridData(GridData.HORIZONTAL_ALIGN_FILL + | GridData.VERTICAL_ALIGN_FILL); + data.horizontalSpan = 1; + data.horizontalIndent = convertWidthInCharsToPixels(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) { + TodoTaskPreferencePage page = new TodoTaskPreferencePage(); + showPreferencePage(TodoTaskPreferencePage.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(getShell(), + manager); + final boolean[] result = new boolean[] { false }; + BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { + public void run() { + dialog.create(); + dialog.setMessage(targetNode.getLabelText()); + result[0] = (dialog.open() == Window.OK); + } + }); + return result[0]; + } + +}