blob: 33c273afb5ebaceaa8a6933336045db8bedd2e96 [file] [log] [blame]
/*******************************************************************************
* 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 org.eclipse.jdt.internal.ui.refactoring;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.jdt.internal.corext.Assert;
import org.eclipse.jdt.internal.corext.refactoring.code.PromoteTempToFieldRefactoring;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
class PromoteTempInputPage extends UserInputWizardPage {
private static final String DESCRIPTION = RefactoringMessages.getString("PromoteTempInputPage.description");//$NON-NLS-1$
public static final String PAGE_NAME= "PromoteTempInputPage";//$NON-NLS-1$
private static final String[] RADIO_BUTTON_LABELS= {
RefactoringMessages.getString("PromoteTempInputPage.Field_declaration"), //$NON-NLS-1$
RefactoringMessages.getString("PromoteTempInputPage.Current_method"), //$NON-NLS-1$
RefactoringMessages.getString("PromoteTempInputPage.constructors")}; //$NON-NLS-1$
private static final Integer[] RADIO_BUTTON_DATA= {
new Integer(PromoteTempToFieldRefactoring.INITIALIZE_IN_FIELD),
new Integer(PromoteTempToFieldRefactoring.INITIALIZE_IN_METHOD),
new Integer(PromoteTempToFieldRefactoring.INITIALIZE_IN_CONSTRUCTOR)};
private Button fDeclareStaticCheckbox;
private Button fDeclareFinalCheckbox;
private Button[] fInitializeInRadioButtons;
private Text fNameField;
public PromoteTempInputPage() {
super(PAGE_NAME, true);
setDescription(DESCRIPTION);
}
public void createControl(Composite parent) {
Composite result= new Composite(parent, SWT.NONE);
setControl(result);
GridLayout layout= new GridLayout();
layout.numColumns= 2;
layout.verticalSpacing= 8;
result.setLayout(layout);
addFieldNameField(result);
addVisibilityControl(result);
addInitizeInRadioButtonGroup(result);
addDeclareStaticCheckbox(result);
addDeclareFinalCheckbox(result);
Dialog.applyDialogFont(result);
WorkbenchHelp.setHelp(getControl(), IJavaHelpContextIds.PROMOTE_TEMP_TO_FIELD_WIZARD_PAGE);
}
private void addFieldNameField(Composite result) {
Label nameLabel= new Label(result, SWT.NONE);
nameLabel.setText(RefactoringMessages.getString("PromoteTempInputPage.Field_name")); //$NON-NLS-1$
nameLabel.setLayoutData(new GridData());
fNameField = new Text(result, SWT.BORDER | SWT.SINGLE);
fNameField.setText(getPromoteTempRefactoring().getFieldName());
fNameField.selectAll();
fNameField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fNameField.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e) {
PromoteTempInputPage.this.getPromoteTempRefactoring().setFieldName(fNameField.getText());
PromoteTempInputPage.this.updateStatus();
}
});
}
private void updateStatus() {
setPageComplete(getPromoteTempRefactoring().validateInput());
}
private void addInitizeInRadioButtonGroup(Composite result) {
GridData gd;
Group initializeIn= new Group(result, SWT.NONE);
initializeIn.setText(RefactoringMessages.getString("PromoteTempInputPage.Initialize")); //$NON-NLS-1$
initializeIn.setLayout(new GridLayout());
gd= new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan= 2;
initializeIn.setLayoutData(gd);
Assert.isTrue(RADIO_BUTTON_LABELS.length == RADIO_BUTTON_DATA.length);
fInitializeInRadioButtons= new Button[RADIO_BUTTON_LABELS.length];
for (int i= 0; i < RADIO_BUTTON_LABELS.length; i++) {
Integer dataItem= RADIO_BUTTON_DATA[i];
fInitializeInRadioButtons[i]= new Button(initializeIn, SWT.RADIO);
fInitializeInRadioButtons[i].setEnabled(canEnable(dataItem.intValue()));
fInitializeInRadioButtons[i].setText(RADIO_BUTTON_LABELS[i]);
fInitializeInRadioButtons[i].setSelection(dataItem.intValue() == getPromoteTempRefactoring().getInitializeIn());
fInitializeInRadioButtons[i].setLayoutData(new GridData());
fInitializeInRadioButtons[i].setData(dataItem);
final int j= i;
fInitializeInRadioButtons[i].addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
getPromoteTempRefactoring().setInitializeIn(getDataAsInt(fInitializeInRadioButtons[j]));
updateButtonsEnablement();
}
});
}
}
private void updateButtonsEnablement() {
fDeclareFinalCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingFinal());
fDeclareStaticCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingStatic());
for (int i= 0; i < fInitializeInRadioButtons.length; i++) {
fInitializeInRadioButtons[i].setEnabled(canEnable(getDataAsInt(fInitializeInRadioButtons[i])));
}
}
private static int getDataAsInt(Button button){
return ((Integer)button.getData()).intValue();
}
private boolean canEnable(int initializeIn){
switch(initializeIn){
case PromoteTempToFieldRefactoring.INITIALIZE_IN_CONSTRUCTOR:
return getPromoteTempRefactoring().canEnableSettingDeclareInConstructors();
case PromoteTempToFieldRefactoring.INITIALIZE_IN_FIELD:
return getPromoteTempRefactoring().canEnableSettingDeclareInFieldDeclaration();
case PromoteTempToFieldRefactoring.INITIALIZE_IN_METHOD:
return getPromoteTempRefactoring().canEnableSettingDeclareInMethod();
default: Assert.isTrue(false); return false;
}
}
public void addDeclareStaticCheckbox(Composite result) {
GridData gd;
fDeclareStaticCheckbox= new Button(result, SWT.CHECK);
fDeclareStaticCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingStatic());
fDeclareStaticCheckbox.setSelection(getPromoteTempRefactoring().getDeclareStatic());
fDeclareStaticCheckbox.setText(RefactoringMessages.getString("PromoteTempInputPage.declare_static")); //$NON-NLS-1$
gd= new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan= 2;
fDeclareStaticCheckbox.setLayoutData(gd);
fDeclareStaticCheckbox.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
getPromoteTempRefactoring().setDeclareStatic(fDeclareStaticCheckbox.getSelection());
updateButtonsEnablement();
}
});
}
private void addDeclareFinalCheckbox(Composite result) {
GridData gd;
fDeclareFinalCheckbox= new Button(result, SWT.CHECK);
fDeclareFinalCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingFinal());
fDeclareFinalCheckbox.setSelection(getPromoteTempRefactoring().getDeclareFinal());
fDeclareFinalCheckbox.setText(RefactoringMessages.getString("PromoteTempInputPage.declare_final")); //$NON-NLS-1$
gd= new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan= 2;
fDeclareFinalCheckbox.setLayoutData(gd);
fDeclareFinalCheckbox.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
getPromoteTempRefactoring().setDeclareFinal(fDeclareFinalCheckbox.getSelection());
updateButtonsEnablement();
}
});
}
private void addVisibilityControl(Composite result) {
int[] availableVisibilities= getPromoteTempRefactoring().getAvailableVisibilities();
int currectVisibility= getPromoteTempRefactoring().getVisibility();
IVisibilityChangeListener visibilityChangeListener= new IVisibilityChangeListener(){
public void visibilityChanged(int newVisibility) {
getPromoteTempRefactoring().setVisibility(newVisibility);
}
};
Composite visibilityComposite= VisibilityControlUtil.createVisibilityControl(result, visibilityChangeListener, availableVisibilities, currectVisibility);
GridData gd= new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan= 2;
visibilityComposite.setLayoutData(gd);
}
private PromoteTempToFieldRefactoring getPromoteTempRefactoring(){
return (PromoteTempToFieldRefactoring)getRefactoring();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
*/
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible && fNameField != null)
fNameField.setFocus();
}
}