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.action.Separator;
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.IssuePriority;
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 IssueTypePrioritySection
extends ToolBarSectionPart
{
private IssueTypeEditorPageController controller;
private IssuePriorityTable issuePriorityTable;
private IncreasePriorityAction increaseAction;
private DecreasePriorityAction decreaseAction;
private CreatePriorityAction createAction;
private DeletePriorityAction deleteAction;
private EditPriorityAction editAction;
public IssueTypePrioritySection(FormPage page, Composite parent, IssueTypeEditorPageController controller) {
super(page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE, Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.section.text")); //$NON-NLS-1$
this.controller = controller;
XComposite client = new XComposite(getContainer(), SWT.NONE, LayoutMode.TIGHT_WRAPPER);
// client.getGridLayout().numColumns = 1;
issuePriorityTable = new IssuePriorityTable(client, SWT.NONE);
issuePriorityTable.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent e) {
StructuredSelection s = (StructuredSelection)e.getSelection();
if (s.isEmpty())
return;
IssuePriority issuePriority = (IssuePriority)s.getFirstElement();
IssueTypePriorityEditWizard wizard = new IssueTypePriorityEditWizard(issuePriority, false, null);
try {
DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard);
dialog.open();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
issuePriorityTable.refresh(true);
}
});
// getSection().setClient(client);
increaseAction = new IncreasePriorityAction();
decreaseAction = new DecreasePriorityAction();
createAction = new CreatePriorityAction();
deleteAction = new DeletePriorityAction();
editAction = new EditPriorityAction();
getToolBarManager().add(createAction);
getToolBarManager().add(deleteAction);
getToolBarManager().add(editAction);
getToolBarManager().add(decreaseAction);
getToolBarManager().add(increaseAction);
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) {
IssueTypePrioritySection.this.fillContextMenu(manager);
}
});
Menu menu = menuMgr.createContextMenu(issuePriorityTable);
issuePriorityTable.setMenu(menu);
}
private void fillContextMenu(IMenuManager manager) {
manager.add(decreaseAction);
manager.add(increaseAction);
manager.add(new Separator());
manager.add(createAction);
manager.add(editAction);
manager.add(deleteAction);
}
public void setIssueType(IssueType issueType){
issuePriorityTable.setInput(issueType.getIssuePriorities());
}
class IncreasePriorityAction
extends Action
{
public IncreasePriorityAction() {
super();
setId(IncreasePriorityAction.class.getName());
setImageDescriptor(SharedImages.getSharedImageDescriptor(
IssueTrackingAdminPlugin.getDefault(),
IssueTypePrioritySection.class,
"Down")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.IncreasePriorityAction.toolTipText")); //$NON-NLS-1$
setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.IncreasePriorityAction.text")); //$NON-NLS-1$
}
@Override
public void run() {
if(issuePriorityTable.getFirstSelectedElement() != null){
int index = controller.getIssueType().getIssuePriorities().indexOf(issuePriorityTable.getFirstSelectedElement());
if(index < controller.getIssueType().getIssuePriorities().size() - 1){
Collections.swap(controller.getIssueType().getIssuePriorities(), index, index + 1);
issuePriorityTable.setInput(controller.getIssueType().getIssuePriorities());
markDirty();
}//if
}//if
}
}
class DecreasePriorityAction
extends Action
{
public DecreasePriorityAction() {
super();
setId(DecreasePriorityAction.class.getName());
setImageDescriptor(SharedImages.getSharedImageDescriptor(
IssueTrackingAdminPlugin.getDefault(),
IssueTypePrioritySection.class,
"Up")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DecreasePriorityAction.toolTipText")); //$NON-NLS-1$
setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DecreasePriorityAction.text")); //$NON-NLS-1$
}
@Override
public void run() {
if(issuePriorityTable.getFirstSelectedElement() != null){
int index = controller.getIssueType().getIssuePriorities().indexOf(issuePriorityTable.getFirstSelectedElement());
if(index > 0){
Collections.swap(controller.getIssueType().getIssuePriorities(), index, index - 1);
issuePriorityTable.setInput(controller.getIssueType().getIssuePriorities());
markDirty();
}//if
}//if
}
}
class CreatePriorityAction
extends Action
{
public CreatePriorityAction() {
super();
setId(IncreasePriorityAction.class.getName());
setImageDescriptor(SharedImages.getSharedImageDescriptor(
IssueTrackingAdminPlugin.getDefault(),
IssueTypePrioritySection.class,
"Create")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.CreatePriorityAction.toolTipText")); //$NON-NLS-1$
setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.CreatePriorityAction.text")); //$NON-NLS-1$
}
@Override
public void run() {
IssueTypePrioritySelectCreateWizard wizard = new IssueTypePrioritySelectCreateWizard(controller.getIssueType());
try {
DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard);
int result = dialog.open();
if(result == Dialog.OK) {
controller.getIssueType().getIssuePriorities().addAll(wizard.getSelectedIssuePriorities());
issuePriorityTable.refresh(true);
markDirty();
}
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
class DeletePriorityAction
extends Action
{
public DeletePriorityAction() {
super();
setId(IncreasePriorityAction.class.getName());
setImageDescriptor(SharedImages.getSharedImageDescriptor(
IssueTrackingAdminPlugin.getDefault(),
IssueTypePrioritySection.class,
"Delete")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DeletePriorityAction.toolTipText")); //$NON-NLS-1$
setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DeletePriorityAction.text")); //$NON-NLS-1$
}
@Override
public void run() {
boolean confirm = MessageDialog.openConfirm(getSection().getShell(), Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DeletePriorityAction.confirmDialog.title"), Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.DeletePriorityAction.confirmDialog.text")); //$NON-NLS-1$ //$NON-NLS-2$
if(confirm) {
controller.getIssueType().getIssuePriorities().removeAll(issuePriorityTable.getSelectedElements());
issuePriorityTable.refresh(true);
markDirty();
}
}
}
class EditPriorityAction
extends Action
{
public EditPriorityAction() {
super();
setId(IncreasePriorityAction.class.getName());
setImageDescriptor(SharedImages.getSharedImageDescriptor(
IssueTrackingAdminPlugin.getDefault(),
IssueTypePrioritySection.class,
"Edit")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.EditPriorityAction.toolTipText")); //$NON-NLS-1$
setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySection.EditPriorityAction.text")); //$NON-NLS-1$
}
@Override
public void run() {
IssuePriority issuePriority = issuePriorityTable.getFirstSelectedElement();
IssueTypePriorityEditWizard wizard = new IssueTypePriorityEditWizard(issuePriority, false, null);
try {
DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(wizard);
if(dialog.open() == Dialog.OK) {
issuePriorityTable.refresh(true);
markDirty();
}
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
}