Eclipse-PyUML/pyUml/src/pyUML/backend/ChooseProjectDialog.java

127 lines
3.8 KiB
Java
Executable File

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<IProject> projects;
private List selectProjectBox;
private IProject selectedProject = null;
private java.util.List<String> projectsList;
public ChooseProjectDialog(Shell parent, java.util.List<IProject> 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<IProject> 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<String>();
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<String> getProjectsList() {
return projectsList;
}
}