/*******************************************************************************
* Copyright (c) 2008, 2009 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences 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:
* Institute for Software - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.extractfunction;
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.Group;
import org.eclipse.swt.widgets.Text;
import org.eclipse.cdt.internal.ui.refactoring.MethodContext;
import org.eclipse.cdt.internal.ui.refactoring.dialogs.NameAndVisibilityComposite;
import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
public class ExtractFunctionComposite extends Composite {
private Button replaceSimilar;
private ChooserComposite comp;
private NameAndVisibilityComposite nameVisiComp;
private final ExtractFunctionInformation info;
public ExtractFunctionComposite(Composite parent, ExtractFunctionInformation info, ExtractFunctionInputPage ip) {
super(parent, SWT.NONE);
this.info = info;
setLayout(new GridLayout());
createNewMethodNameComposite(this);
Group returnGroup = createReturnGroup(nameVisiComp);
createReturnValueChooser(returnGroup, info, ip);
createReplaceCheckBox(nameVisiComp);
if (info.getMethodContext().getType() == MethodContext.ContextType.METHOD) {
visibilityPanelSetVisible(true);
}else {
visibilityPanelSetVisible(false);
}
layout();
}
private Group createReturnGroup(Composite parent) {
Group returnGroup = new Group(parent,SWT.NONE);
returnGroup.setText(Messages.ExtractFunctionComposite_ReturnValue);
returnGroup.setLayout(new GridLayout());
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
returnGroup.setLayoutData(gridData);
return returnGroup;
}
private void createReturnValueChooser(Composite parent, ExtractFunctionInformation info, ExtractFunctionInputPage ip) {
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
comp = new ChooserComposite(parent, info, ip);
comp.setLayoutData(gridData);
comp.redraw();
}
public Text getMethodNameText() {
return nameVisiComp.getConstantNameText();
}
public Button getReplaceSimilarButton() {
return replaceSimilar;
}
public void visibilityPanelSetVisible(boolean visible) {
nameVisiComp.visibilityPanelsetVisible(visible);
}
private void createNewMethodNameComposite(Composite parent) {
String label;
if (info.getMethodContext().getType() == MethodContext.ContextType.METHOD) {
label = Messages.ExtractFunctionComposite_MethodName;
}else {
label = Messages.ExtractFunctionComposite_FunctionName;
}
nameVisiComp = new NameAndVisibilityComposite(parent, label, VisibilityEnum.v_private, ""); //$NON-NLS-1$
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
nameVisiComp.setLayoutData(gridData);
final Button virtual = new Button(nameVisiComp, SWT.CHECK);
virtual.setText(Messages.ExtractFunctionComposite_Virtual);
virtual.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
info.setVirtual(virtual.getSelection());
}
});
}
private void createReplaceCheckBox(Composite parent) {
replaceSimilar = new Button(parent, SWT.CHECK | SWT.LEFT);
GridData buttonLayoutData = new GridData(SWT.None);
buttonLayoutData.verticalIndent = 5;
replaceSimilar.setLayoutData(buttonLayoutData);
replaceSimilar.setText(Messages.ExtractFunctionComposite_ReplaceDuplicates);
}
public ChooserComposite getReturnChooser() {
return comp;
}
public String getMethodName(){
return nameVisiComp.getConstantNameText().getText();
}
public Composite getVisibiltyGroup() {
return nameVisiComp.getVisibiltyGroup();
}
}