package LinGUIne.wizards; import java.util.TreeSet; import org.eclipse.jface.wizard.WizardPage; 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.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import LinGUIne.model.Project; import LinGUIne.model.ProjectGroup; import LinGUIne.model.ProjectManager; /** * Page for the user to select into which Project they want to put the new File. * * @author Kyle Mullins */ public class NewFileWizardSelectProjectPage extends WizardPage { private ProjectManager projectMan; private NewFileData wizardData; private List lstProjects; private Label lblProjects; private List lstGroups; private Label lblGroups; public NewFileWizardSelectProjectPage(NewFileData data, ProjectManager projects) { super("New File Wizard"); setTitle("New File Wizard"); setDescription("Select where the new File should go."); wizardData = data; projectMan = projects; } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(2, true)); Group grpProject = new Group(container, SWT.NONE); grpProject.setLayoutData(new GridData(GridData.FILL_BOTH)); grpProject.setLayout(new GridLayout(1, false)); grpProject.setText("Project"); lblProjects = new Label(grpProject, SWT.NONE); lblProjects.setText("Select a Project for the File to go into:"); lstProjects = new List(grpProject, SWT.BORDER | SWT.V_SCROLL); lstProjects.setLayoutData(new GridData(GridData.FILL_BOTH)); for(Project project: projectMan.getProjects()){ lstProjects.add(project.getName()); } lstProjects.addSelectionListener(new SelectionListener(){ /** * Set which Project is selected. */ @Override public void widgetSelected(SelectionEvent e) { if(lstProjects.getSelectionCount() != 0){ Project selected = projectMan.getProject(lstProjects. getSelection()[0]); wizardData.setChosenProject(selected); populateGroupList(); setPageComplete(false); } } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); Group grpGroup = new Group(container, SWT.NONE); grpGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); grpGroup.setLayout(new GridLayout(1, false)); grpGroup.setText("Group"); lblGroups = new Label(grpGroup, SWT.NONE); lblGroups.setText("Select a Group for the File to go into:"); lstGroups = new List(grpGroup, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); lstGroups.setLayoutData(new GridData(GridData.FILL_BOTH)); lstGroups.addSelectionListener(new SelectionListener(){ @Override public void widgetSelected(SelectionEvent e) { if(lstGroups.getSelectionCount() != 0){ Project destProject = wizardData.getChosenProject(); String groupName = lstGroups.getSelection()[0]; if(groupName.contains("/")){ groupName = groupName.substring( groupName.lastIndexOf("/") + 1); } wizardData.setParentGroup(destProject.getGroup(groupName)); setPageComplete(true); } } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); setControl(container); setPageComplete(false); //If there is a Project already selected (in wizardData), select it if(wizardData.getChosenProject() != null){ lstProjects.setSelection( new String[]{wizardData.getChosenProject().getName()}); populateGroupList(); } } /** * Updates the list of ProjectGroups. */ private void populateGroupList(){ TreeSet<String> sortedGroups = new TreeSet<String>(); ProjectGroup projDataGroup = wizardData.getChosenProject(). getGroup("Project Data"); sortedGroups.add(projDataGroup.getDisplayGroupPath()); addChildGroups(projDataGroup, sortedGroups); lstGroups.removeAll(); for(String groupPath: sortedGroups){ lstGroups.add(groupPath); } } /** * Recursively adds child Groups to the list of ProjectGroups. */ private void addChildGroups(ProjectGroup parentGroup, TreeSet<String> sortedGroups){ for(ProjectGroup group: parentGroup.getChildren()){ sortedGroups.add(group.getDisplayGroupPath()); addChildGroups(group, sortedGroups); } } }