package pyUML.backend; import java.util.Vector; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; /** * This is a SWT dialog the lets the user choose one of * the given projects. * By the next run, the lately selected project in preselected */ public class ChooseProjectDialog extends Dialog{ public static IProject preSelectedProject = null; private java.util.List projects; private List selectProjectBox; private IProject selectedProject = null; private java.util.List projectsList; public ChooseProjectDialog(Shell parent, java.util.List projects) { super(parent); this.projects = projects; } /** * Initializes a ChooseProjectDialog and lets the user choose * one of the given projects. * After "Use" or "Cancel" is pressed, the selected * Project is returned, or null if cancel was pressed. * @param parent * @param projects * @return */ public static IProject runChooseProject(Shell parent, java.util.List projects) { if (preSelectedProject != null && (! preSelectedProject.isOpen())) preSelectedProject = null; // Create dialog ChooseProjectDialog dialog = new ChooseProjectDialog(parent, projects); dialog.create(); // Pre-select project that was selected before if (ChooseProjectDialog.preSelectedProject != null) { String preSelectedProjectName = ChooseProjectDialog.preSelectedProject.getName(); if (dialog.getProjectsList().contains(preSelectedProjectName)) { int index = dialog.getProjectsList().indexOf(preSelectedProjectName); dialog.selectProjectBox.setSelection(index); } } dialog.open(); ChooseProjectDialog.preSelectedProject = dialog.selectedProject; return dialog.selectedProject; } protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX); createControls(composite); //add controls to composite as necessary return composite; } public void createControls (Composite composite) { // create graphical components Shell shell = composite.getShell(); shell.setText("Select Python Project To Use"); Group selectBoxGroup = new Group(composite, SWT.None); selectBoxGroup.setText("Please select a project to be used by PyUML:"); selectBoxGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); selectBoxGroup.setLayout(new GridLayout(1, true)); this.selectProjectBox = new List( selectBoxGroup, SWT.BORDER|SWT.SINGLE|SWT.V_SCROLL|SWT.H_SCROLL ); selectProjectBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.projectsList = new Vector(); for (IProject project : this.projects) { this.selectProjectBox.add(project.getName()); projectsList.add(project.getName()); } selectProjectBox.setSize(300,300); //buttonGroup.pack(); selectBoxGroup.pack(); composite.pack(); } public void widgetDefaultSelected(SelectionEvent e) { // Not needed in this dialog } protected void buttonPressed(int buttonId) { if (IDialogConstants.OK_ID == buttonId) { int selectedIndex = this.selectProjectBox.getSelectionIndex(); if (selectedIndex < 0) return; this.selectedProject = this.projects.get(selectedIndex); this.close(); } else if (IDialogConstants.CANCEL_ID == buttonId) { cancelPressed(); } } public java.util.List getProjectsList() { return projectsList; } }