package org.nightlabs.jfire.issuetracking.ui.issue.editor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.editor.FormPage; import org.nightlabs.base.ui.composite.XComboComposite; import org.nightlabs.base.ui.exceptionhandler.ExceptionHandlerRegistry; import org.nightlabs.base.ui.job.Job; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issue.IssuePriority; import org.nightlabs.jfire.issue.IssueResolution; import org.nightlabs.jfire.issue.IssueSeverityType; import org.nightlabs.jfire.issuetracking.ui.issue.IssueLabelProvider; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; import org.nightlabs.progress.ProgressMonitor; /** * @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de --> * */ public class IssuePropertySection extends AbstractIssueEditorGeneralSection { private Label priorityLabel; private Label severityLabel; private Label resolutionLabel; private XComboComposite<IssuePriority> issuePriorityCombo; private XComboComposite<IssueSeverityType> issueSeverityTypeCombo; private XComboComposite<IssueResolution> issueResolutionCombo; /** * @param section * @param managedForm */ public IssuePropertySection(FormPage page, Composite parent, final IssueEditorPageController controller) { super(page, parent, controller); getClient().getGridLayout().numColumns = 6; getClient().getGridLayout().makeColumnsEqualWidth = false; getClient().getGridData().grabExcessHorizontalSpace = false; getClient().getGridData().grabExcessVerticalSpace = false; getClient().getGridData().horizontalAlignment = SWT.BEGINNING; getClient().getGridData().verticalAlignment = SWT.BEGINNING; getSection().setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssuePropertySection.section.text")); //$NON-NLS-1$ priorityLabel = new Label(getClient(), SWT.WRAP); priorityLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssuePropertySection.label.priority.text")); //$NON-NLS-1$ issuePriorityCombo = new XComboComposite<IssuePriority>(getClient(), SWT.NONE | SWT.READ_ONLY); issuePriorityCombo.setLabelProvider(new IssueLabelProvider()); GridData gd = new GridData(GridData.FILL_HORIZONTAL); issuePriorityCombo.setLayoutData(gd); issuePriorityCombo.addSelectionChangedListener(new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent e) { controller.getIssue().setIssuePriority(issuePriorityCombo.getSelectedElement()); markDirty(); } }); severityLabel = new Label(getClient(), SWT.WRAP); severityLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssuePropertySection.label.severity.text")); //$NON-NLS-1$ issueSeverityTypeCombo = new XComboComposite<IssueSeverityType>(getClient(), SWT.NONE | SWT.READ_ONLY); issueSeverityTypeCombo.setLabelProvider(new IssueLabelProvider()); gd = new GridData(GridData.FILL_HORIZONTAL); issueSeverityTypeCombo.setLayoutData(gd); issueSeverityTypeCombo.addSelectionChangedListener(new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent e) { controller.getIssue().setIssueSeverityType(issueSeverityTypeCombo.getSelectedElement()); markDirty(); } }); resolutionLabel = new Label(getClient(), SWT.WRAP); resolutionLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssuePropertySection.label.resolution.text")); //$NON-NLS-1$ issueResolutionCombo = new XComboComposite<IssueResolution>(getClient(), SWT.NONE | SWT.READ_ONLY); issueResolutionCombo.setLabelProvider(new IssueLabelProvider()); gd = new GridData(GridData.FILL_HORIZONTAL); issueResolutionCombo.setLayoutData(gd); issueResolutionCombo.addSelectionChangedListener(new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent e) { controller.getIssue().setIssueResolution(issueResolutionCombo.getSelectedElement()); markDirty(); } }); } @Override protected void doSetIssue(final Issue issue) { loadProperties(issue); // Display.getDefault().asyncExec(new Runnable() { // @Override // public void run() { // issuePriorityCombo.selectElement(issue.getIssuePriority()); // issueSeverityTypeCombo.selectElement(issue.getIssueSeverityType()); // issueResolutionCombo.selectElement(issue.getIssueResolution()); // } // }); } private void loadProperties(final Issue issue){ Job loadJob = new Job(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssuePropertySection.job.loadingIssueProp.text")) { //$NON-NLS-1$ @Override protected IStatus run(final ProgressMonitor monitor) { try { Display.getDefault().asyncExec(new Runnable() { public void run() { issueResolutionCombo.removeAll(); for (IssueResolution ir : issue.getIssueType().getIssueResolutions()) { issueResolutionCombo.addElement(ir); } issuePriorityCombo.removeAll(); for (IssuePriority ip : issue.getIssueType().getIssuePriorities()) { issuePriorityCombo.addElement(ip); } issueSeverityTypeCombo.removeAll(); for (IssueSeverityType it : issue.getIssueType().getIssueSeverityTypes()) { issueSeverityTypeCombo.addElement(it); } issuePriorityCombo.selectElement(issue.getIssuePriority()); issueSeverityTypeCombo.selectElement(issue.getIssueSeverityType()); issueResolutionCombo.selectElement(issue.getIssueResolution()); } }); }catch (Exception e1) { ExceptionHandlerRegistry.asyncHandleException(e1); throw new RuntimeException(e1); } return Status.OK_STATUS; } }; loadJob.setPriority(org.eclipse.core.runtime.jobs.Job.SHORT); loadJob.schedule(); } public IssuePriority getSelectedPriority(){ return issuePriorityCombo.getSelectedElement(); } public IssueSeverityType getSelectedSeverityType(){ return issueSeverityTypeCombo.getSelectedElement(); } public IssueResolution getSelectedResolution(){ return issueResolutionCombo.getSelectedElement(); } }