| /******************************************************************************* |
| * Copyright (c) 2000, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xsd.ui.internal.refactor.wizard; |
| |
| |
| |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.util.Assert; |
| import org.eclipse.ltk.core.refactoring.RefactoringStatus; |
| import org.eclipse.ltk.ui.refactoring.UserInputWizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| 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; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorCSHelpIds; |
| import org.eclipse.wst.xsd.ui.internal.refactor.IReferenceUpdating; |
| import org.eclipse.wst.xsd.ui.internal.refactor.RefactoringMessages; |
| |
| /** |
| * @author ebelisar |
| * |
| */ |
| public class RenameInputWizardPage extends UserInputWizardPage{ |
| private String fInitialValue; |
| private Text fTextField; |
| private Button fUpdateReferences; |
| /** |
| * Creates a new text input page. |
| * @param isLastUserPage <code>true</code> if this page is the wizard's last |
| * user input page. Otherwise <code>false</code>. |
| */ |
| public RenameInputWizardPage(String description, boolean isLastUserPage) { |
| this(description, isLastUserPage, ""); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Creates a new text input page. |
| * @param isLastUserPage <code>true</code> if this page is the wizard's last |
| * user input page. Otherwise <code>false</code> |
| * @param initialValue the initial value |
| */ |
| public RenameInputWizardPage(String description, boolean isLastUserPage, String initialValue) { |
| super("RenameInputWizardPage"); |
| Assert.isNotNull(initialValue); |
| setDescription(description); |
| fInitialValue= initialValue; |
| } |
| |
| /** |
| * Returns whether the initial input is valid. Typically it is not, because the |
| * user is required to provide some information e.g. a new type name etc. |
| * |
| * @return <code>true</code> iff the input provided at initialization is valid |
| */ |
| protected boolean isInitialInputValid(){ |
| return false; |
| } |
| |
| /** |
| * Returns whether an empty string is a valid input. Typically it is not, because |
| * the user is required to provide some information e.g. a new type name etc. |
| * |
| * @return <code>true</code> iff an empty string is valid |
| */ |
| protected boolean isEmptyInputValid(){ |
| return false; |
| } |
| |
| /** |
| * Returns the content of the text input field. |
| * |
| * @return the content of the text input field. Returns <code>null</code> if |
| * not text input field has been created |
| */ |
| protected String getText() { |
| if (fTextField == null) |
| return null; |
| return fTextField.getText(); |
| } |
| |
| /** |
| * Sets the new text for the text field. Does nothing if the text field has not been created. |
| * @param text the new value |
| */ |
| protected void setText(String text) { |
| if (fTextField == null) |
| return; |
| fTextField.setText(text); |
| } |
| |
| /** |
| * Performs input validation. Returns a <code>RefactoringStatus</code> which |
| * describes the result of input validation. <code>Null<code> is interpreted |
| * as no error. |
| */ |
| protected RefactoringStatus validateTextField(String text){ |
| return null; |
| } |
| |
| protected Text createTextInputField(Composite parent) { |
| return createTextInputField(parent, SWT.BORDER); |
| } |
| |
| protected Text createTextInputField(Composite parent, int style) { |
| fTextField= new Text(parent, style); |
| fTextField.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| textModified(getText()); |
| } |
| }); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(fTextField, XSDEditorCSHelpIds.RENAME_NEW_NAME); |
| fTextField.setText(fInitialValue); |
| return fTextField; |
| } |
| |
| /** |
| * Checks the page's state and issues a corresponding error message. The page validation |
| * is computed by calling <code>validatePage</code>. |
| */ |
| protected void textModified(String text) { |
| if (! isEmptyInputValid() && text.equals("")){ //$NON-NLS-1$ |
| setPageComplete(false); |
| setErrorMessage(null); |
| restoreMessage(); |
| return; |
| } |
| if ((! isInitialInputValid()) && text.equals(fInitialValue)){ |
| setPageComplete(false); |
| setErrorMessage(null); |
| restoreMessage(); |
| return; |
| } |
| |
| setPageComplete(validateTextField(text)); |
| |
| // TODO: enable preview in M4 |
| getRefactoringWizard().setForcePreviewReview(false); |
| getContainer().updateButtons(); |
| |
| } |
| |
| /** |
| * Subclasses can override if they want to restore the message differently. |
| * This implementation calls <code>setMessage(null)</code>, which clears the message |
| * thus exposing the description. |
| */ |
| protected void restoreMessage(){ |
| setMessage(null); |
| } |
| |
| /* (non-Javadoc) |
| * Method declared in IDialogPage |
| */ |
| public void dispose() { |
| fTextField= null; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared in WizardPage |
| */ |
| public void setVisible(boolean visible) { |
| if (visible) { |
| textModified(getText()); |
| } |
| super.setVisible(visible); |
| if (visible && fTextField != null) { |
| fTextField.setFocus(); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) |
| */ |
| public void createControl(Composite parent) { |
| Composite superComposite= new Composite(parent, SWT.NONE); |
| setControl(superComposite); |
| initializeDialogUnits(superComposite); |
| |
| superComposite.setLayout(new GridLayout()); |
| Composite composite= new Composite(superComposite, SWT.NONE); |
| composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| GridLayout layout= new GridLayout(); |
| layout.numColumns= 2; |
| layout.verticalSpacing= 8; |
| composite.setLayout(layout); |
| |
| |
| Label label= new Label(composite, SWT.NONE); |
| label.setText(getLabelText()); |
| |
| Text text= createTextInputField(composite); |
| text.selectAll(); |
| GridData gd= new GridData(GridData.FILL_HORIZONTAL); |
| gd.widthHint= convertWidthInCharsToPixels(25); |
| text.setLayoutData(gd); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(text, XSDEditorCSHelpIds.RENAME_NEW_NAME); |
| |
| addOptionalUpdateReferencesCheckbox(superComposite); |
| gd= new GridData(GridData.FILL_HORIZONTAL); |
| text.setLayoutData(gd); |
| |
| getRefactoringWizard().setForcePreviewReview(false); |
| |
| Dialog.applyDialogFont(superComposite); |
| //WorkbenchHelp.setHelp(getControl(), fHelpContextID); |
| |
| } |
| |
| private static Button createCheckbox(Composite parent, String title, boolean value) { |
| Button checkBox= new Button(parent, SWT.CHECK); |
| checkBox.setText(title); |
| checkBox.setSelection(value); |
| return checkBox; |
| } |
| |
| private void addOptionalUpdateReferencesCheckbox(Composite result) { |
| |
| final IReferenceUpdating ref= (IReferenceUpdating)getRefactoring().getAdapter(IReferenceUpdating.class); |
| if (ref == null || !ref.canEnableUpdateReferences()) |
| return; |
| String title= RefactoringMessages.getString("RenameInputWizardPage.update_references"); //$NON-NLS-1$ |
| boolean defaultValue= true; |
| fUpdateReferences= createCheckbox(result, title, defaultValue); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(fUpdateReferences, XSDEditorCSHelpIds.RENAME_UPDATE_REFERENCES); |
| ref.setUpdateReferences(fUpdateReferences.getSelection()); |
| fUpdateReferences.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent e) { |
| ref.setUpdateReferences(fUpdateReferences.getSelection()); |
| } |
| }); |
| fUpdateReferences.setEnabled(true); |
| } |
| |
| protected String getLabelText() { |
| return RefactoringMessages.getString("RenameInputWizardPage.new_name"); //$NON-NLS-1$ |
| } |
| |
| |
| } |