package org.nightlabs.jfire.issuetracking.ui.project.create; import java.util.List; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; 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.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.language.I18nTextEditor; import org.nightlabs.base.ui.language.I18nTextEditorMultiLine; import org.nightlabs.base.ui.language.I18nTextEditor.EditMode; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.DynamicPathWizardPage; import org.nightlabs.jfire.base.ui.jdo.tree.JDOTreeNodesChangedEvent; import org.nightlabs.jfire.base.ui.jdo.tree.JDOTreeNodesChangedListener; import org.nightlabs.jfire.issue.project.Project; import org.nightlabs.jfire.issue.project.ProjectType; import org.nightlabs.jfire.issue.project.id.ProjectID; import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin; import org.nightlabs.jfire.issuetracking.ui.issue.ActiveProjectTreeController; import org.nightlabs.jfire.issuetracking.ui.project.ProjectAdminTreeComposite; import org.nightlabs.jfire.issuetracking.ui.project.ProjectTreeNode; import org.nightlabs.jfire.issuetracking.ui.project.ProjectTypeComboComposite; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; public class CreateProjectWizardPage extends DynamicPathWizardPage { private Label projectTypeLabel; private ProjectTypeComboComposite projectTypeCombo; private Label projectNameLabel; private I18nTextEditor projectNameText; private Label descriptionLabel; private I18nTextEditor descriptionText; private Button activeButton; private boolean isActive = true; private Project parentProject; private Project newProject; //For Tree private ProjectTreeNode selectedNode; @Override public Control createPageContents(Composite parent) { XComposite page = new XComposite(parent, SWT.NONE, LayoutMode.TOP_BOTTOM_WRAPPER, LayoutDataMode.GRID_DATA); page.getGridLayout().numColumns = 2; page.getGridLayout().verticalSpacing = 10; // page.getGridLayout().horizontalSpacing = 10; projectTypeLabel = new Label(page, SWT.NONE); projectTypeLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.label.projectType.text")); //$NON-NLS-1$ projectTypeCombo = new ProjectTypeComboComposite(page, SWT.NONE); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); projectTypeCombo.setLayoutData(gridData); projectTypeCombo.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { newProject.setProjectType(projectTypeCombo.getSelectedProjectType()); } }); if (parentProject != null) { new Label(page, SWT.NONE).setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.label.parentProject.text")); //$NON-NLS-1$ final ProjectAdminTreeComposite projectTree = new ProjectAdminTreeComposite( page, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, false); projectTree.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { newProject.setParentProject(projectTree.getFirstSelectedElement()); } }); gridData = new GridData(GridData.FILL_BOTH); gridData.heightHint = 20; ActiveProjectTreeController c = (ActiveProjectTreeController)projectTree.getInput(); c.addJDOTreeNodesChangedListener(new JDOTreeNodesChangedListener<ProjectID, Project, ProjectTreeNode>() { @Override public void onJDOObjectsChanged( JDOTreeNodesChangedEvent<ProjectID, ProjectTreeNode> changedEvent) { List<ProjectTreeNode> loadedNodes = changedEvent.getLoadedTreeNodes(); projectTree.getTreeViewer().expandAll(); for (ProjectTreeNode node : loadedNodes) { if (node.getJdoObject().equals(parentProject)) { selectedNode = node; // projectTree.setSelection(node.getJdoObject()); Doesn't work!!!!!!!!!!!!! // projectTree.getTreeViewer().setSelection(new StructuredSelection(node), true); } } if (selectedNode != null) projectTree.getTreeViewer().setSelection(new StructuredSelection(selectedNode), true); } }); projectTree.setLayoutData(gridData); } Label sep = new Label(page, SWT.SEPARATOR | SWT.HORIZONTAL // | SWT.LINE_SOLID); ); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; sep.setLayoutData(gridData); projectNameLabel = new Label(page, SWT.NONE); projectNameLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.label.projectName.text")); //$NON-NLS-1$ projectNameText = new I18nTextEditor(page); projectNameText.addModifyListener(modifyListener); projectNameText.setI18nText(newProject.getName(), EditMode.DIRECT); descriptionLabel = new Label(page, SWT.WRAP); descriptionLabel.setLayoutData(new GridData()); descriptionLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.label.description.text")); //$NON-NLS-1$ descriptionText = new I18nTextEditorMultiLine(page, projectNameText .getLanguageChooser()); descriptionText.setI18nText(newProject.getDescription(), EditMode.DIRECT); descriptionText.addModifyListener(modifyListener); gridData = new GridData(GridData.FILL_BOTH); descriptionText.setLayoutData(gridData); new Label(page, SWT.NONE).setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.label.properties.text")); //$NON-NLS-1$ activeButton = new Button(page, SWT.CHECK); activeButton.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.button.active.text")); //$NON-NLS-1$ activeButton.setSelection(isActive); activeButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { isActive = activeButton.getSelection(); newProject.setActive(isActive); } }); gridData = new GridData(); activeButton.setLayoutData(gridData); return page; } private ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { getContainer().updateButtons(); } }; public CreateProjectWizardPage(Project parentProject, Project newProject) { super(CreateProjectWizardPage.class.getName(), Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.title"), //$NON-NLS-1$ SharedImages.getWizardPageImageDescriptor(IssueTrackingPlugin .getDefault(), CreateProjectWizard.class)); this.setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.create.CreateProjectWizardPage.description")); //$NON-NLS-1$ this.parentProject = parentProject; this.newProject = newProject; } public I18nTextEditor getProjectNameText() { return projectNameText; } @Override public void onShow() { projectNameText.forceFocus(); } // @Override // public boolean canFlipToNextPage() { // return isPageComplete(); // } // @Override public boolean isPageComplete() { return !projectNameText.getEditText().isEmpty(); } public ProjectType getSelectedProjectType() { return projectTypeCombo.getSelectedProjectType(); } public boolean isActive() { return isActive; } }