package org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty; import java.util.Collections; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.editor.ToolBarSectionPart; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.DynamicPathWizardDialog; import org.nightlabs.jfire.issue.IssueSeverityType; import org.nightlabs.jfire.issue.IssueType; import org.nightlabs.jfire.issuetracking.admin.ui.IssueTrackingAdminPlugin; import org.nightlabs.jfire.issuetracking.admin.ui.resource.Messages; /** * @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de * */ public class IssueTypeSeverityTypeSection extends ToolBarSectionPart { private IssueTypeEditorPageController controller; private IssueSeverityTypeTable issueSeverityTypeTable; private CreateSeverityTypeAction createAction; private DeleteSeverityTypeAction deleteAction; private EditSeverityTypeAction editAction; private IncreaseSeverityAction increaseSeverityAction; private DecreaseSeverityAction decreaseSeverityAction; public IssueTypeSeverityTypeSection(FormPage page, Composite parent, IssueTypeEditorPageController controller) { super(page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR, Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.section.name")); //$NON-NLS-1$ this.controller = controller; // getSection().setText("Severity Types"); // getSection().setLayoutData(new GridData(GridData.FILL_BOTH)); // getSection().setLayout(new GridLayout()); XComposite client = new XComposite(getContainer(), SWT.NONE, LayoutMode.TIGHT_WRAPPER); client.getGridLayout().numColumns = 1; issueSeverityTypeTable = new IssueSeverityTypeTable(client, SWT.NONE); issueSeverityTypeTable.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent e) { StructuredSelection s = (StructuredSelection)e.getSelection(); if (s.isEmpty()) return; IssueSeverityType issueSeverityType = (IssueSeverityType)s.getFirstElement(); IssueTypeSeverityTypeEditWizard wizard = new IssueTypeSeverityTypeEditWizard(issueSeverityType, false, null); try { DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard); dialog.open(); } catch (Exception ex) { throw new RuntimeException(ex); } issueSeverityTypeTable.refresh(true); } }); // getSection().setClient(client); createAction = new CreateSeverityTypeAction(); deleteAction = new DeleteSeverityTypeAction(); editAction = new EditSeverityTypeAction(); increaseSeverityAction = new IncreaseSeverityAction(); decreaseSeverityAction = new DecreaseSeverityAction(); getToolBarManager().add(createAction); getToolBarManager().add(deleteAction); getToolBarManager().add(editAction); getToolBarManager().add(decreaseSeverityAction); getToolBarManager().add(increaseSeverityAction); hookContextMenu(); updateToolBarManager(); } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { IssueTypeSeverityTypeSection.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(issueSeverityTypeTable); issueSeverityTypeTable.setMenu(menu); } private void fillContextMenu(IMenuManager manager) { manager.add(createAction); manager.add(editAction); manager.add(deleteAction); } public void setIssueType(IssueType issueType){ issueSeverityTypeTable.setInput(issueType.getIssueSeverityTypes()); } class IncreaseSeverityAction extends Action { public IncreaseSeverityAction() { super(); setId(IncreaseSeverityAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSection.class, "Down")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.IncreaseSeverityAction.toolTipeText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.IncreaseSeverityAction.text")); //$NON-NLS-1$ } @Override public void run() { if(issueSeverityTypeTable.getFirstSelectedElement() != null){ int index = controller.getIssueType().getIssueSeverityTypes().indexOf(issueSeverityTypeTable.getFirstSelectedElement()); if(index < controller.getIssueType().getIssueSeverityTypes().size() - 1){ Collections.swap(controller.getIssueType().getIssueSeverityTypes(), index, index + 1); issueSeverityTypeTable.setInput(controller.getIssueType().getIssueSeverityTypes()); markDirty(); }//if }//if } } class DecreaseSeverityAction extends Action { public DecreaseSeverityAction() { super(); setId(DecreaseSeverityAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSection.class, "Up")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.DecreaseSeverityAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.DecreaseSeverityAction.text")); //$NON-NLS-1$ } @Override public void run() { if(issueSeverityTypeTable.getFirstSelectedElement() != null){ int index = controller.getIssueType().getIssueSeverityTypes().indexOf(issueSeverityTypeTable.getFirstSelectedElement()); if(index > 0){ Collections.swap(controller.getIssueType().getIssueSeverityTypes(), index, index - 1); issueSeverityTypeTable.setInput(controller.getIssueType().getIssueSeverityTypes()); markDirty(); }//if }//if } } class CreateSeverityTypeAction extends Action { public CreateSeverityTypeAction() { super(); setId(CreateSeverityTypeAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSection.class, "Create")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.CreateSeverityTypeAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.CreateSeverityTypeAction.text")); //$NON-NLS-1$ } @Override public void run() { IssueTypeSeverityTypeSelectCreateWizard wizard = new IssueTypeSeverityTypeSelectCreateWizard(controller.getIssueType()); try { DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard); int result = dialog.open(); if(result == Dialog.OK) { controller.getIssueType().getIssueSeverityTypes().addAll(wizard.getSelectedIssueSeverities()); issueSeverityTypeTable.refresh(true); markDirty(); } } catch (Exception ex) { throw new RuntimeException(ex); } } } class DeleteSeverityTypeAction extends Action { public DeleteSeverityTypeAction() { super(); setId(CreateSeverityTypeAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSection.class, "Delete")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.DeleteSeverityTypeAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.DeleteSeverityTypeAction.text")); //$NON-NLS-1$ } @Override public void run() { boolean confirm = MessageDialog.openConfirm(getSection().getShell(), Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.dialog.confirmDelete.title"), Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.dialog.confirmDelete.description")); //$NON-NLS-1$ //$NON-NLS-2$ if(confirm) { controller.getIssueType().getIssueSeverityTypes().removeAll(issueSeverityTypeTable.getSelectedElements()); issueSeverityTypeTable.refresh(true); markDirty(); } } } class EditSeverityTypeAction extends Action { public EditSeverityTypeAction() { super(); setId(CreateSeverityTypeAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSection.class, "Edit")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.EditSeverityTypeAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSection.EditSeverityTypeAction.text")); //$NON-NLS-1$ } @Override public void run() { IssueSeverityType issueSeverityType = issueSeverityTypeTable.getFirstSelectedElement(); IssueTypeSeverityTypeEditWizard wizard = new IssueTypeSeverityTypeEditWizard(issueSeverityType, false, null); try { DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard); if(dialog.open() == Dialog.OK) { issueSeverityTypeTable.refresh(true); markDirty(); } } catch (Exception ex) { throw new RuntimeException(ex); } } } }