X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java new file mode 100644 index 0000000..3db9cec --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java @@ -0,0 +1,215 @@ +// Copyright (c) 2005 by Leif Frenzel. All rights reserved. +// See http://leiffrenzel.de +package net.sourceforge.phpdt.ltk.ui.wizards; + +import net.sourceforge.phpdt.internal.compiler.parser.Scanner; +import net.sourceforge.phpdt.ltk.core.RenameIdentifierInfo; +import net.sourceforge.phpdt.ltk.ui.UITexts; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.ui.WebUI; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.ltk.ui.refactoring.UserInputWizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.KeyAdapter; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +/** + *

+ * the input page for the Rename Property refactoring, where users can control + * the effects of the refactoring; to be shown in the wizard. + *

+ * + *

+ * We let the user enter the new name for the property, and we let her decide + * whether other property files in the bundle should be affected, and whether + * the operation is supposed to span the entire workspace or only the current + * project. + *

+ * + */ +public class RenameLocalVariablePage extends UserInputWizardPage { + + private static final String DS_KEY = RenameLocalVariablePage.class + .getName(); + + private static final String DS_RENAME_DQ_STRINGS = "RENAME_DQ_STRINGS"; //$NON-NLS-1$ + + private static final String DS_RENAME_PHPDOC = "RENAME_PHPDOC"; //$NON-NLS-1$ + + private static final String DS_RENAME_OTHER_COMMENTS = "RENAME_OTHER_COMMENTS"; //$NON-NLS-1$ + + private final RenameIdentifierInfo info; + + private IDialogSettings dialogSettings; + + private Text txtNewName; + + private Button cbRenameDQStrings; + + private Button cbRenamePHPdoc; + + private Button cbRenameOtherComments; + + public RenameLocalVariablePage(final RenameIdentifierInfo info) { + super(RenameLocalVariablePage.class.getName()); + this.info = info; + initDialogSettings(); + } + + public void createControl(final Composite parent) { + Composite composite = createRootComposite(parent); + setControl(composite); + + createLblNewName(composite); + createTxtNewName(composite); + createCbDQStrings(composite); + createCbPHPdoc(composite); + createCbOtherComments(composite); + + validate(); + + // TODO check if we can leave this step out in the future + getRefactoringWizard().setForcePreviewReview(true); + } + + private Composite createRootComposite(final Composite parent) { + Composite result = new Composite(parent, SWT.NONE); + GridLayout gridLayout = new GridLayout(2, false); + gridLayout.marginWidth = 10; + gridLayout.marginHeight = 10; + result.setLayout(gridLayout); + initializeDialogUnits(result); + Dialog.applyDialogFont(result); + return result; + } + + private void createLblNewName(final Composite composite) { + Label lblNewName = new Label(composite, SWT.NONE); + lblNewName.setText(UITexts.renamePropertyInputPage_lblNewName); + } + + private void createTxtNewName(Composite composite) { + txtNewName = new Text(composite, SWT.BORDER); + txtNewName.setText(info.getOldName()); + txtNewName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + txtNewName.selectAll(); + txtNewName.addKeyListener(new KeyAdapter() { + public void keyReleased(final KeyEvent e) { + info.setNewName(txtNewName.getText()); + validate(); + } + }); + } + + private void createCbDQStrings(final Composite composite) { + String texts = UITexts.renameLocalVariable_cbDQStrings; + cbRenameDQStrings = createCheckbox(composite, texts); + cbRenameDQStrings.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(final SelectionEvent event) { + boolean selected = cbRenameDQStrings.getSelection(); + dialogSettings.put(DS_RENAME_DQ_STRINGS, selected); + info.setRenameDQString(selected); + } + }); + initDQStringsOption(); + } + + private void createCbPHPdoc(final Composite composite) { + String texts = UITexts.renameLocalVariable_cbPHPdoc; + cbRenamePHPdoc = createCheckbox(composite, texts); + cbRenamePHPdoc.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(final SelectionEvent event) { + boolean selected = cbRenamePHPdoc.getSelection(); + dialogSettings.put(DS_RENAME_PHPDOC, selected); + info.setRenamePHPdoc(selected); + } + }); + initPHPdocOption(); + } + + private void createCbOtherComments(final Composite composite) { + String texts = UITexts.renameLocalVariable_cbOtherDoc; + cbRenameOtherComments = createCheckbox(composite, texts); + cbRenameOtherComments.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(final SelectionEvent event) { + boolean selected = cbRenameOtherComments.getSelection(); + dialogSettings.put(DS_RENAME_OTHER_COMMENTS, selected); + info.setRenameOtherComments(selected); + } + }); + initOtherCommentsOption(); + } + + private Button createCheckbox(final Composite composite, final String text) { + Button result = new Button(composite, SWT.CHECK); + result.setText(text); + + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + gridData.horizontalSpan = 2; + result.setLayoutData(gridData); + + return result; + } + + private void initDialogSettings() { + IDialogSettings ds = WebUI.getDefault().getDialogSettings(); + dialogSettings = ds.getSection(DS_KEY); + if (dialogSettings == null) { + dialogSettings = ds.addNewSection(DS_KEY); + // init default values + dialogSettings.put(DS_RENAME_DQ_STRINGS, true); + dialogSettings.put(DS_RENAME_PHPDOC, true); + dialogSettings.put(DS_RENAME_OTHER_COMMENTS, true); + } + } + + private static boolean isVariable(String txt) { + if (txt.length() <= 1) { + return false; + } + if (txt.charAt(0) != '$') { + return false; + } + for (int i = 1; i < txt.length(); i++) { + if (!Scanner.isPHPIdentifierPart(txt.charAt(i))) { + return false; + } + } + return true; + } + + private void validate() { + String txt = txtNewName.getText(); + Scanner s; + setPageComplete(isVariable(txt) && !txt.equals(info.getOldName())); + } + + private void initDQStringsOption() { + boolean refs = dialogSettings.getBoolean(DS_RENAME_DQ_STRINGS); + cbRenameDQStrings.setSelection(refs); + info.setRenameDQString(refs); + } + + private void initPHPdocOption() { + boolean refs = dialogSettings.getBoolean(DS_RENAME_PHPDOC); + cbRenamePHPdoc.setSelection(refs); + info.setRenamePHPdoc(refs); + } + + private void initOtherCommentsOption() { + boolean refs = dialogSettings.getBoolean(DS_RENAME_OTHER_COMMENTS); + cbRenameOtherComments.setSelection(refs); + info.setRenameOtherComments(refs); + } + +}