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));
}
}