X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java index 9a536ce..3da0b98 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ltk/ui/wizards/RenameLocalVariablePage.java @@ -2,6 +2,7 @@ // 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; @@ -12,6 +13,8 @@ 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; @@ -19,134 +22,192 @@ 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.

- * - */ +/** + *

+ * 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_UPDATE_BUNDLE = "UPDATE_BUNDLE"; //$NON-NLS-1$ - private static final String DS_ALL_PROJECTS = "ALL_PROJECTS"; //$NON-NLS-1$ - - private final RenameIdentifierInfo info; - - private IDialogSettings dialogSettings; - private Text txtNewName; - - - public RenameLocalVariablePage( final RenameIdentifierInfo info ) { - super( RenameLocalVariablePage.class.getName() ); - this.info = info; - initDialogSettings(); - } - - - // interface methods of UserInputWizardPage - /////////////////////////////////////////// - - public void createControl( final Composite parent ) { - Composite composite = createRootComposite( parent ); - setControl( composite ); - - createLblNewName( composite ); - createTxtNewName( composite ); - createCbUpdateBundle( composite ); - createCbAllProjects( composite ); - - validate(); - } - - - // UI creation methods - ////////////////////// - - 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 createCbUpdateBundle( final Composite composite ) { - String texts = UITexts.renamePropertyInputPage_cbUpdateBundle; - initUpdateBundleOption(); - } - - private void createCbAllProjects( final Composite composite ) { - String text = UITexts.renamePropertyInputPage_cbAllProjects; - initAllProjectsOption(); - } - - 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; - } - - - // helping methods - ////////////////// - - private void initDialogSettings() { - IDialogSettings ds = PHPeclipsePlugin.getDefault().getDialogSettings(); - dialogSettings = ds.getSection( DS_KEY ); - if( dialogSettings == null ) { - dialogSettings = ds.addNewSection( DS_KEY ); - // init default values - dialogSettings.put( DS_UPDATE_BUNDLE, true ); - dialogSettings.put( DS_ALL_PROJECTS, false ); - } - } - - private void validate() { - String txt = txtNewName.getText(); - setPageComplete( txt.length() > 0 && !txt.equals( info.getOldName() ) ); - } - - private void initUpdateBundleOption() { -// boolean updateRefs = dialogSettings.getBoolean( DS_UPDATE_BUNDLE ); -// cbUpdateBundle.setSelection( updateRefs ); -// info.setUpdateProject( updateRefs ); - } - - private void initAllProjectsOption() { -// boolean allProjects = dialogSettings.getBoolean( DS_ALL_PROJECTS ); -// cbAllProjects.setSelection( allProjects ); -// info.setAllProjects( allProjects ); - } + 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 = PHPeclipsePlugin.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); + } + }