⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extractmethodcomposite.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -