/* This file is part of Green. * * Copyright (C) 2005 The Research Foundation of State University of New York * All Rights Under Copyright Reserved, The Research Foundation of S.U.N.Y. * * Green is free software, licensed under the terms of the Eclipse * Public License, version 1.0. The license is available at * http://www.eclipse.org/legal/epl-v10.html */ package edu.buffalo.cse.green.dialogs; import static edu.buffalo.cse.green.GreenException.GRERR_RELATIONSHIP_NO_METHODS; import java.util.ArrayList; import java.util.List; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import edu.buffalo.cse.green.GreenException; import edu.buffalo.cse.green.editor.model.MethodModel; public class ChooseMethodsDialog extends Dialog { private IType _type; private List<MethodDialogListener> _listeners = new ArrayList<MethodDialogListener>(); public ChooseMethodsDialog(Shell shell, IType type) { super(shell); _type = type; create(); getShell().setText("Choose Methods"); } /** * Adds the given listener. * * @param listener - The given <code>MethodDialogListener</code>. */ public void addMethodDialogListener(MethodDialogListener listener) { _listeners.add(listener); } /** * Removes the given listener. * * @param listener - The given <code>MethodDialogListener</code>. * @return true if successful, false otherwise. */ public boolean removeMethodDialogListener(MethodDialogListener listener) { return _listeners.remove(listener); } /** * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite) */ protected Control createContents(final Composite parent) { try { if (_type.getMethods().length == 0) { // for (MethodDialogListener listener : _listeners) { // listener.okPressed(new ArrayList<IMethod>()); GreenException.errorDialog(GRERR_RELATIONSHIP_NO_METHODS); // } } GridLayout grid = new GridLayout(1, true); parent.setLayout(grid); Label label = new Label(parent, 0); label.setText("Select methods to create the relationship in:"); //label.setEnabled(false); final Table displayedMethods = new Table(parent, SWT.CHECK | SWT.VIRTUAL | SWT.BORDER); displayedMethods.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); JavaElementLabelProvider icon = new JavaElementLabelProvider(); for (IMethod method : _type.getMethods()) { TableItem methodItem = new TableItem(displayedMethods, SWT.CHECK); methodItem.setText(MethodModel.getMethodSignature(method)); methodItem.setImage(icon.getImage(method)); methodItem.setData(method); } Composite buttonHolder = new Composite(parent, SWT.NONE); buttonHolder.setLayout(new GridLayout(2, true)); buttonHolder.setLayoutData(new GridData(GridData.END | GridData.HORIZONTAL_ALIGN_END)); Button okButton = new Button(buttonHolder, 0); okButton.setText(" OK "); okButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); okButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { List<IMethod> selectedMethods = new ArrayList<IMethod>(); for (TableItem item : displayedMethods.getItems()) { if (item.getChecked()) { selectedMethods.add((IMethod) item.getData()); } } for (MethodDialogListener listener : _listeners) { listener.okPressed(selectedMethods); } getShell().dispose(); } public void widgetDefaultSelected(SelectionEvent e) {} }); Button cancelButton = new Button(buttonHolder, 0); cancelButton.setText("Cancel"); cancelButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); cancelButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { getShell().dispose(); } public void widgetDefaultSelected(SelectionEvent e) {} }); return parent; } catch (JavaModelException e) { e.printStackTrace(); } return parent; } }