/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.ui.internal.refactoring.reorg;
import com.google.dart.tools.internal.corext.refactoring.tagging.INameUpdating;
import com.google.dart.tools.ui.internal.refactoring.RefactoringMessages;
import com.google.dart.tools.ui.internal.refactoring.TextInputWizardPage;
import com.google.dart.tools.ui.internal.util.RowLayouter;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
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;
/**
* @coverage dart.editor.ui.refactoring.ui
*/
abstract class RenameInputWizardPage extends TextInputWizardPage {
private final String fHelpContextID;
/**
* Creates a new text input page.
*
* @param description the page description
* @param contextHelpId the context help ID
* @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, String contextHelpId, boolean isLastUserPage,
String initialValue) {
super(description, isLastUserPage, initialValue);
fHelpContextID = contextHelpId;
}
@Override
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.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
RowLayouter layouter = new RowLayouter(2);
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);
layouter.perform(label, text, 1);
Label separator = new Label(composite, SWT.NONE);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, false, false);
gridData.heightHint = 2;
separator.setLayoutData(gridData);
addAdditionalOptions(composite, layouter);
Dialog.applyDialogFont(superComposite);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), fHelpContextID);
}
@Override
public void setVisible(boolean visible) {
if (visible) {
INameUpdating nameUpdating = (INameUpdating) getRefactoring().getAdapter(INameUpdating.class);
if (nameUpdating != null) {
String newName = getNewName(nameUpdating);
if (newName != null && newName.length() > 0 && !newName.equals(getInitialValue())) {
Text textField = getTextField();
textField.setText(newName);
textField.setSelection(0, newName.length());
}
}
}
super.setVisible(visible);
}
/**
* Clients can override this method to provide more UI elements. By default, does nothing
*
* @param composite the parent composite
* @param layouter the row layouter to use
*/
protected void addAdditionalOptions(Composite composite, RowLayouter layouter) {
// none by default
}
protected boolean getBooleanSetting(String key, boolean defaultValue) {
String update = getRefactoringSettings().get(key);
if (update != null) {
return Boolean.valueOf(update).booleanValue();
} else {
return defaultValue;
}
}
protected String getLabelText() {
return RefactoringMessages.RenameInputWizardPage_new_name;
}
/**
* Returns the new name for the Dart element or <code>null</code> if no new name is provided
*
* @param nameUpdating the name updating
* @return the new name or <code>null</code>
*/
protected String getNewName(INameUpdating nameUpdating) {
return nameUpdating.getNewElementName();
}
@Override
protected boolean isEmptyInputValid() {
// In general - no, but for name of constructor - yes.
// It is up to the name validator to check exactly.
return true;
}
protected void saveBooleanSetting(String key, Button checkBox) {
if (checkBox != null) {
getRefactoringSettings().put(key, checkBox.getSelection());
}
}
}