package org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty; import java.util.LinkedList; import java.util.List; import javax.jdo.JDOHelper; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; 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.IWorkbenchActionConstants; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.util.RCPUtil; import org.nightlabs.jfire.issue.IssueType; import org.nightlabs.jfire.issue.id.IssueTypeID; /** * @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de * @author Daniel Mazurek * */ public class IssueTypeCategoryComposite extends XComposite { private IssueTypeTable issueTypeTable; public IssueTypeCategoryComposite(Composite parent, int style) { super(parent, style, LayoutMode.TIGHT_WRAPPER); createComposite(); } /** * Create the content for this composite. * @param parent The parent composite */ protected void createComposite() { issueTypeTable = new IssueTypeTable(this, SWT.NONE); issueTypeTable.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent e) { StructuredSelection s = (StructuredSelection)e.getSelection(); if (s.isEmpty()) return; IssueType issueType = (IssueType)s.getFirstElement(); try { IssueTypeID issueTypeID = (IssueTypeID)JDOHelper.getObjectId(issueType); RCPUtil.openEditor(new IssueTypeEditorInput(issueTypeID), IssueTypeEditor.EDITOR_ID); } catch (Exception ex) { throw new RuntimeException(ex); } } }); addContextMenuContribution(new CreateIssueTypeAction(getShell())); hookContextMenu(); } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { IssueTypeCategoryComposite.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(issueTypeTable.getControl()); issueTypeTable.getControl().setMenu(menu); } /** * Contains instances of both, {@link IContributionItem} and {@link IAction} */ private List<Object> contextMenuContributions; public void addContextMenuContribution(IContributionItem contributionItem) { if (contextMenuContributions == null) contextMenuContributions = new LinkedList<Object>(); contextMenuContributions.add(contributionItem); } public void addContextMenuContribution(IAction action) { if (contextMenuContributions == null) contextMenuContributions = new LinkedList<Object>(); contextMenuContributions.add(action); } private void fillContextMenu(IMenuManager manager) { if (contextMenuContributions != null) { for (Object contextMenuContribution : contextMenuContributions) { if (contextMenuContribution instanceof IContributionItem) manager.add((IContributionItem)contextMenuContribution); else if (contextMenuContribution instanceof IAction) manager.add((IAction)contextMenuContribution); else throw new IllegalStateException("How the hell got an instance of " + (contextMenuContribution == null ? "null" : contextMenuContribution.getClass()) + " in the contextMenuContributions list?!"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } // Other plug-ins can contribute their actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } }