blob: 530554ab92065dea68ae9d963ad98b2b8127cbc8 [file] [log] [blame]
/*******************************************************************************
* 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.jdt.internal.ui.refactoring;
import org.eclipse.swt.SWT;
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.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.text.Assert;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
import org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
import org.eclipse.jdt.internal.ui.refactoring.contentassist.VariableNamesProcessor;
import org.eclipse.jdt.internal.ui.util.RowLayouter;
public class ExtractTempWizard extends RefactoringWizard {
/* package */ static final String DIALOG_SETTING_SECTION= "ExtractTempWizard"; //$NON-NLS-1$
public ExtractTempWizard(ExtractTempRefactoring ref) {
super(ref, DIALOG_BASED_USER_INTERFACE | PREVIEW_EXPAND_FIRST_NODE);
setDefaultPageTitle(RefactoringMessages.ExtractTempWizard_defaultPageTitle);
}
/* non java-doc
* @see RefactoringWizard#addUserInputPages
*/
protected void addUserInputPages(){
addPage(new ExtractTempInputPage(getExtractTempRefactoring().guessTempNames()));
}
private ExtractTempRefactoring getExtractTempRefactoring(){
return (ExtractTempRefactoring)getRefactoring();
}
private static class ExtractTempInputPage extends TextInputWizardPage {
private static final String DECLARE_FINAL= "declareFinal"; //$NON-NLS-1$
private static final String REPLACE_ALL= "replaceOccurrences"; //$NON-NLS-1$
private final boolean fInitialValid;
private static final String DESCRIPTION = RefactoringMessages.ExtractTempInputPage_enter_name;
private String[] fTempNameProposals;
private IDialogSettings fSettings;
public ExtractTempInputPage(String[] tempNameProposals) {
super(DESCRIPTION, true, tempNameProposals.length == 0 ? "" : tempNameProposals[0]); //$NON-NLS-1$
Assert.isNotNull(tempNameProposals);
fTempNameProposals= tempNameProposals;
fInitialValid= tempNameProposals.length > 0;
}
public void createControl(Composite parent) {
loadSettings();
Composite result= new Composite(parent, SWT.NONE);
setControl(result);
GridLayout layout= new GridLayout();
layout.numColumns= 2;
layout.verticalSpacing= 8;
result.setLayout(layout);
RowLayouter layouter= new RowLayouter(2);
Label label= new Label(result, SWT.NONE);
label.setText(RefactoringMessages.ExtractTempInputPage_variable_name);
Text text= createTextInputField(result);
text.selectAll();
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ControlContentAssistHelper.createTextContentAssistant(text, new VariableNamesProcessor(fTempNameProposals));
layouter.perform(label, text, 1);
addReplaceAllCheckbox(result, layouter);
addDeclareFinalCheckbox(result, layouter);
validateTextField(text.getText());
Dialog.applyDialogFont(result);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.EXTRACT_TEMP_WIZARD_PAGE);
}
private void loadSettings() {
fSettings= getDialogSettings().getSection(ExtractTempWizard.DIALOG_SETTING_SECTION);
if (fSettings == null) {
fSettings= getDialogSettings().addNewSection(ExtractTempWizard.DIALOG_SETTING_SECTION);
fSettings.put(DECLARE_FINAL, false);
fSettings.put(REPLACE_ALL, true);
}
getExtractTempRefactoring().setDeclareFinal(fSettings.getBoolean(DECLARE_FINAL));
getExtractTempRefactoring().setReplaceAllOccurrences(fSettings.getBoolean(REPLACE_ALL));
}
private void addReplaceAllCheckbox(Composite result, RowLayouter layouter) {
String title= RefactoringMessages.ExtractTempInputPage_replace_all;
boolean defaultValue= getExtractTempRefactoring().replaceAllOccurrences();
final Button checkBox= createCheckbox(result, title, defaultValue, layouter);
getExtractTempRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
checkBox.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
fSettings.put(REPLACE_ALL, checkBox.getSelection());
getExtractTempRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
}
});
}
private void addDeclareFinalCheckbox(Composite result, RowLayouter layouter) {
String title= RefactoringMessages.ExtractTempInputPage_declare_final;
boolean defaultValue= getExtractTempRefactoring().declareFinal();
final Button checkBox= createCheckbox(result, title, defaultValue, layouter);
getExtractTempRefactoring().setDeclareFinal(checkBox.getSelection());
checkBox.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
fSettings.put(DECLARE_FINAL, checkBox.getSelection());
getExtractTempRefactoring().setDeclareFinal(checkBox.getSelection());
}
});
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#textModified(java.lang.String)
*/
protected void textModified(String text) {
getExtractTempRefactoring().setTempName(text);
super.textModified(text);
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
*/
protected RefactoringStatus validateTextField(String text) {
return getExtractTempRefactoring().checkTempName(text);
}
private ExtractTempRefactoring getExtractTempRefactoring(){
return (ExtractTempRefactoring)getRefactoring();
}
private static Button createCheckbox(Composite parent, String title, boolean value, RowLayouter layouter){
Button checkBox= new Button(parent, SWT.CHECK);
checkBox.setText(title);
checkBox.setSelection(value);
layouter.perform(checkBox);
return checkBox;
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isInitialInputValid()
*/
protected boolean isInitialInputValid() {
return fInitialValid;
}
}
}