blob: 1cfa9feb5f71f198e0cdf41c46448a97fdd46f30 [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.code;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.corext.refactoring.code.ReplaceInvocationsRefactoring;
import org.eclipse.jdt.ui.JavaElementLabels;
import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
import org.eclipse.jdt.internal.ui.util.PixelConverter;
public class ReplaceInvocationsInputPage extends UserInputWizardPage {
public static final String PAGE_NAME= "ReplaceInvocationsInputPage";//$NON-NLS-1$
private ReplaceInvocationsRefactoring fRefactoring;
private static final long LABEL_FLAGS= JavaElementLabels.M_PRE_TYPE_PARAMETERS | JavaElementLabels.M_PRE_RETURNTYPE | JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_EXCEPTIONS;
public ReplaceInvocationsInputPage() {
super(PAGE_NAME);
}
public void createControl(Composite parent) {
initializeDialogUnits(parent);
fRefactoring= (ReplaceInvocationsRefactoring) getRefactoring();
Composite result= new Composite(parent, SWT.NONE);
setControl(result);
GridLayout layout= new GridLayout();
result.setLayout(layout);
createMethodSignature(result);
Label separator= new Label(parent, SWT.NONE);
GridData gridData= new GridData(SWT.FILL, SWT.FILL, false, false);
gridData.heightHint= 5;
separator.setLayoutData(gridData);
Label bodyLabel= new Label(result, SWT.NONE);
bodyLabel.setText(RefactoringMessages.ReplaceInvocationsInputPage_replaceInvocationsBy);
createBody(result);
Button replaceAll= new Button(result, SWT.CHECK);
replaceAll.setText(RefactoringMessages.ReplaceInvocationsInputPage_replaceAll);
boolean canSingle= fRefactoring.canReplaceSingle();
// replaceAll.setEnabled(canSingle);
replaceAll.setEnabled(false); // does not work for now...
replaceAll.setSelection(! canSingle);
replaceAll.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
boolean all= ((Button) event.widget).getSelection();
changeMode(all ? ReplaceInvocationsRefactoring.Mode.REPLACE_ALL : ReplaceInvocationsRefactoring.Mode.REPLACE_SINGLE);
}
});
Dialog.applyDialogFont(result);
}
private void createMethodSignature(Composite parent) {
IPreferenceStore store= JavaPlugin.getDefault().getCombinedPreferenceStore();
JavaSourceViewer signatureViewer= new JavaSourceViewer(parent, null, null, false, SWT.READ_ONLY | SWT.WRAP /*| SWT.BORDER*/, store);
signatureViewer.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
signatureViewer.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
signatureViewer.getTextWidget().setBackground(parent.getBackground());
String signatureLabel= JavaElementLabels.getElementLabel(fRefactoring.getMethod(), LABEL_FLAGS);
signatureViewer.setDocument(new Document(signatureLabel));
signatureViewer.setEditable(false);
Control signatureControl= signatureViewer.getControl();
PixelConverter pixelConverter= new PixelConverter(signatureControl);
GridData gdata= new GridData(GridData.FILL_HORIZONTAL);
gdata.widthHint= pixelConverter.convertWidthInCharsToPixels(50);
signatureControl.setLayoutData(gdata);
}
private void createBody(Composite parent) {
IPreferenceStore store= JavaPlugin.getDefault().getCombinedPreferenceStore();
JavaSourceViewer bodyEditor= new JavaSourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.WRAP | SWT.BORDER, store);
bodyEditor.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
bodyEditor.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
Document bodyDocument= new Document(getInitialBody());
bodyEditor.setDocument(bodyDocument);
bodyEditor.setEditable(true);
Control bodyControl= bodyEditor.getControl();
PixelConverter pixelConverter= new PixelConverter(bodyControl);
GridData gdata= new GridData(GridData.FILL_BOTH);
gdata.widthHint= pixelConverter.convertWidthInCharsToPixels(50);
gdata.minimumHeight= pixelConverter.convertHeightInCharsToPixels(5);
bodyControl.setLayoutData(gdata);
bodyControl.setFocus();
bodyDocument.addDocumentListener(new IDocumentListener() {
public void documentAboutToBeChanged(DocumentEvent event) {
}
public void documentChanged(DocumentEvent event) {
try {
fRefactoring.setBody(event.getDocument().get(), fRefactoring.getMethod().getParameterNames());
} catch (JavaModelException ex) {
// TODO Auto-generated catch block
JavaPlugin.log(ex);
}
}
});
}
private String getInitialBody() {
//TODO
return ""; //$NON-NLS-1$
}
private void changeMode(ReplaceInvocationsRefactoring.Mode mode) {
RefactoringStatus status;
try {
status= fRefactoring.setCurrentMode(mode);
} catch (JavaModelException e) {
status= RefactoringStatus.createFatalErrorStatus(e.getMessage());
}
setPageComplete(status);
}
}