📄 extractmethodcomposite.java
字号:
package org.python.pydev.refactoring.ui.pages.extractmethod;
import java.util.List;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
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.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.python.pydev.refactoring.ast.adapters.AbstractScopeNode;
import org.python.pydev.refactoring.ast.adapters.offsetstrategy.IOffsetStrategy;
import org.python.pydev.refactoring.ui.UITexts;
import org.python.pydev.refactoring.ui.controls.LabeledEdit;
import org.python.pydev.refactoring.ui.model.OffsetStrategyModel;
import org.python.pydev.refactoring.ui.model.OffsetStrategyProvider;
import org.python.pydev.refactoring.ui.model.table.SimpleTableItem;
import org.python.pydev.refactoring.ui.pages.listener.ButtonActivationListener;
import org.python.pydev.refactoring.ui.pages.listener.FunctionSignatureListener;
import org.python.pydev.refactoring.ui.pages.listener.IValidationPage;
import org.python.pydev.refactoring.ui.pages.listener.TableCellEditorListener;
import org.python.pydev.refactoring.ui.validator.NameValidator;
import org.python.pydev.refactoring.ui.validator.VariableCellValidator;
public class ExtractMethodComposite extends Composite {
private Label functionPreviewLabel;
private Label functionSignatureLabel;
private Label argumentsLabel;
private Button editArgumentsButton;
private TableColumn nameColumn;
private Table argumentsTable;
private Button downArgumentsButton;
private Button upArgumentsButton;
private LabeledEdit functionNameEdit;
private TableCellEditorListener cellEditorListener;
private AbstractScopeNode<?> scopeAdapter;
private IValidationPage page;
private FunctionSignatureListener signatureListener;
private OffsetStrategyProvider strategyProvider;
private ComboViewer methodInsertionComb;
private CLabel methodInsertionLbl;
private Composite argumentsComposite;
public ExtractMethodComposite(IValidationPage page, Composite parent, boolean hasArguments, AbstractScopeNode<?> scope) {
super(parent, SWT.NONE);
this.page = page;
this.scopeAdapter = scope;
this.strategyProvider = new OffsetStrategyProvider(scopeAdapter, IOffsetStrategy.AFTERINIT | IOffsetStrategy.BEGIN
| IOffsetStrategy.END);
createComposite(hasArguments);
}
public void createComposite(boolean hasArguments) {
setLayout(new GridLayout());
createFunctionName(this);
if (hasArguments) {
createArguments(this);
}
createOffsetStrategy(this);
createFunctionSignature(this);
pack();
}
private void createFunctionSignature(Composite control) {
Composite functionSignatureComposite = new Composite(control, SWT.NONE);
GridLayout compositeLayout = new GridLayout();
compositeLayout.makeColumnsEqualWidth = true;
GridData compositeLData = new GridData();
compositeLData.horizontalAlignment = GridData.FILL;
compositeLData.grabExcessHorizontalSpace = true;
functionSignatureComposite.setLayoutData(compositeLData);
functionSignatureComposite.setLayout(compositeLayout);
functionSignatureLabel = new Label(functionSignatureComposite, SWT.NONE);
GridData labelLData = new GridData();
labelLData.horizontalAlignment = GridData.FILL;
labelLData.grabExcessHorizontalSpace = true;
functionSignatureLabel.setLayoutData(labelLData);
functionSignatureLabel.setText(UITexts.extractMethodFunctionPreview);
functionPreviewLabel = new Label(functionSignatureComposite, SWT.NONE);
GridData functionSignaturePreviewData = new GridData();
functionSignaturePreviewData.horizontalAlignment = GridData.FILL;
functionSignaturePreviewData.grabExcessHorizontalSpace = true;
functionSignaturePreviewData.verticalAlignment = GridData.FILL;
functionSignaturePreviewData.grabExcessVerticalSpace = true;
functionPreviewLabel.setLayoutData(functionSignaturePreviewData);
functionPreviewLabel.setText("");
}
private Button createButton(Composite parent, String name) {
Button button = new Button(parent, SWT.PUSH | SWT.CENTER);
GridData buttonLData = new GridData();
buttonLData.horizontalAlignment = GridData.FILL;
buttonLData.grabExcessHorizontalSpace = true;
button.setLayoutData(buttonLData);
button.setText(name);
return button;
}
private void createArguments(Composite control) {
argumentsComposite = new Composite(control, SWT.NONE);
GridLayout compositeLayout = new GridLayout();
compositeLayout.makeColumnsEqualWidth = true;
GridData compositeLData = new GridData();
compositeLData.grabExcessHorizontalSpace = true;
compositeLData.horizontalAlignment = GridData.FILL;
compositeLData.grabExcessVerticalSpace = true;
compositeLData.verticalAlignment = GridData.FILL;
argumentsComposite.setLayoutData(compositeLData);
argumentsComposite.setLayout(compositeLayout);
createArgumentsLabel(argumentsComposite);
createArgumentsTable(argumentsComposite);
}
private void createArgumentsButton(Composite ArgumentsTableComposite) {
Composite argumentsButtonComposite = new Composite(ArgumentsTableComposite, SWT.NONE);
GridLayout compositeLayout = new GridLayout();
compositeLayout.makeColumnsEqualWidth = true;
FormData compositeLData = new FormData(0, 0);
compositeLData.width = 80;
compositeLData.bottom = new FormAttachment(1000, 1000, 0);
compositeLData.right = new FormAttachment(1000, 1000, 0);
compositeLData.top = new FormAttachment(0, 1000, 0);
argumentsButtonComposite.setLayoutData(compositeLData);
argumentsButtonComposite.setLayout(compositeLayout);
editArgumentsButton = createButton(argumentsButtonComposite, UITexts.extractMethodEditButton);
editArgumentsButton.setEnabled(false);
upArgumentsButton = createButton(argumentsButtonComposite, UITexts.extractMethodUpButton);
upArgumentsButton.setEnabled(false);
downArgumentsButton = createButton(argumentsButtonComposite, UITexts.extractMethodDownButton);
downArgumentsButton.setEnabled(false);
}
private void registerDownButtonListener() {
downArgumentsButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int selectionIndex = argumentsTable.getSelectionIndex();
if (argumentsTable.getSelectionCount() == 1 && selectionIndex != argumentsTable.getItemCount()) {
TableItem item = argumentsTable.getSelection()[0];
if (item instanceof SimpleTableItem) {
SimpleTableItem tableItem = (SimpleTableItem) item;
new SimpleTableItem(argumentsTable, tableItem.getOriginalName(), tableItem.getText(), selectionIndex + 2);
argumentsTable.remove(selectionIndex);
argumentsTable.setSelection(selectionIndex + 1);
argumentsTable.notifyListeners(SWT.Selection, new Event());
page.validate();
}
}
}
});
}
private void registerUpButtonListener() {
upArgumentsButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int selectionIndex = argumentsTable.getSelectionIndex();
if (argumentsTable.getSelectionCount() == 1 && selectionIndex > 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -