package org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty; 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.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.language.I18nTextEditor; import org.nightlabs.i18n.I18nTextBuffer; import org.nightlabs.jdo.ObjectIDUtil; import org.nightlabs.jfire.issue.IssuePriority; import org.nightlabs.jfire.issuetracking.admin.ui.resource.Messages; import org.nightlabs.jfire.security.SecurityReflector; /** * @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de * */ public class IssueTypePriorityComposite extends XComposite { private I18nTextEditor priorityNameI18nTextEditor; private Button autoCreateIDCheckBox; private Label idLabel; private Text idText; private IssuePriority issuePriority; public IssueTypePriorityComposite(IssuePriority issuePriority, Composite parent, int style) { super(parent, style); this.issuePriority = issuePriority; createComposite(this); } /** * Create the content for this composite. * @param parent The parent composite */ protected void createComposite(Composite parent) { setLayout(new GridLayout(1, false)); // Name new Label(this, SWT.NONE).setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePriorityComposite.label.priorityName.text")); //$NON-NLS-1$ priorityNameI18nTextEditor = new I18nTextEditor(this); priorityNameI18nTextEditor.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent ev) { if (issuePriority == null && autoCreateIDCheckBox.getSelection()) { String nameStr = priorityNameI18nTextEditor.getEditText(); idText.setText(ObjectIDUtil.makeValidIDString(nameStr)); } } }); // ID Group idGroup = new Group(this, SWT.NONE); idGroup.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePriorityComposite.group.priorityID.text")); //$NON-NLS-1$ idGroup.setLayout(new GridLayout(1, false)); idGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); autoCreateIDCheckBox = new Button(idGroup, SWT.CHECK); autoCreateIDCheckBox.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { enableCheckingID(!autoCreateIDCheckBox.getSelection()); } }); autoCreateIDCheckBox.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePriorityComposite.checkbox.autoCreateID.text")); //$NON-NLS-1$ idLabel = new Label(idGroup, SWT.NONE); idLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePriorityComposite.label.id.text")); //$NON-NLS-1$ idText = new Text(idGroup, SWT.SINGLE | SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.grabExcessHorizontalSpace = true; idText.setLayoutData(gridData); if(issuePriority != null) { priorityNameI18nTextEditor.setI18nText(issuePriority.getIssuePriorityText()); idText.setText(issuePriority.getIssuePriorityID()); setAutoCreateID(true); autoCreateIDCheckBox.setEnabled(false); } else { priorityNameI18nTextEditor.setI18nText(new I18nTextBuffer()); idText.setText(""); //$NON-NLS-1$ setAutoCreateID(true); } enableCheckingID(false); } public void enableCheckingID(boolean b) { idLabel.setEnabled(b); idText.setEnabled(b); } protected void setAutoCreateID(boolean b) { autoCreateIDCheckBox.setSelection(b); enableCheckingID(!b); } public IssuePriority getIssuePriority() { if (!isComplete()) return null; if (issuePriority == null) { issuePriority = new IssuePriority(SecurityReflector.getUserDescriptor().getOrganisationID(), idText.getText()); } issuePriority.getIssuePriorityText().copyFrom(priorityNameI18nTextEditor.getI18nText()); return issuePriority; } /** * Check if the editing of the issue priority can be completed (valid data is available) * @return */ public boolean isComplete() { return issuePriority != null || (!"".equals(idText.getText())); //$NON-NLS-1$ } public I18nTextEditor getPriorityNameI18nTextEditor() { return priorityNameI18nTextEditor; } }