package org.nightlabs.jfire.issuetracking.ui.issue.editor; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.editor.FormPage; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.DynamicPathWizardDialog; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin; import org.nightlabs.jfire.issuetracking.ui.issue.IssueLinkAdderComposite; import org.nightlabs.jfire.issuetracking.ui.issue.IssueLinkTable; import org.nightlabs.jfire.issuetracking.ui.issue.IssueLinkTableItem; import org.nightlabs.jfire.issuetracking.ui.issue.IssueLinkTableItemChangeListener; import org.nightlabs.jfire.issuetracking.ui.issuelink.IssueLinkHandler; import org.nightlabs.jfire.issuetracking.ui.issuelink.IssueLinkItemChangeEvent; import org.nightlabs.jfire.issuetracking.ui.issuelink.create.CreateIssueLinkWizard; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; /** * @author Chairat Kongarayawetchakun - chairat[at]nightlabs[dot]de */ public class IssueLinkListSection extends AbstractIssueEditorGeneralSection{ private IssueLinkAdderComposite issueLinkAdderComposite; // private Issue issue; // <-- FIXME There is already an Issue in the super class. Do we need this duplicate? Kai private OpenLinkedObjectAction openLinkedObjectAction; private AddLinkAction addLinkAction; private RemoveLinkAction removeLinkAction; public IssueLinkListSection(FormPage page, Composite parent, final IssueEditorPageController controller) { super(page, parent, controller); getSection().setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.section.text")); //$NON-NLS-1$ getSection().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); getSection().setLayout(new GridLayout()); XComposite client = new XComposite(getSection(), SWT.NONE, LayoutMode.TIGHT_WRAPPER); client.getGridLayout().numColumns = 1; issueLinkAdderComposite = new IssueLinkAdderComposite( client, SWT.NONE, false, controller.getIssue()); issueLinkAdderComposite.getGridData().grabExcessHorizontalSpace = true; issueLinkAdderComposite.getIssueLinkTable().addIssueLinkTableItemChangeListener(new IssueLinkTableItemChangeListener() { public void issueLinkItemChanged(final IssueLinkItemChangeEvent itemChangedEvent) { boolean expanded = controller.getIssue().getIssueLinks().size() > 0; getSection().setExpanded(expanded); markDirty(); } }); issueLinkAdderComposite.getIssueLinkTable().addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent e) { openLinkedObjectAction.run(); } }); issueLinkAdderComposite.getIssueLinkTable().addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent e) { if (e.getSelection() != null) { openLinkedObjectAction.setEnabled(true); removeLinkAction.setEnabled(true); } } }); getSection().setClient(client); openLinkedObjectAction = new OpenLinkedObjectAction(); openLinkedObjectAction.setEnabled(false); addLinkAction = new AddLinkAction(); removeLinkAction = new RemoveLinkAction(); removeLinkAction.setEnabled(false); getToolBarManager().add(openLinkedObjectAction); getToolBarManager().add(addLinkAction); getToolBarManager().add(removeLinkAction); updateToolBarManager(); } @Override protected void doSetIssue(Issue issue) { issueLinkAdderComposite.getIssueLinkTable().setIssue(issue); } // @Override // public Issue getIssue() { // return issue; // } public class OpenLinkedObjectAction extends Action { public OpenLinkedObjectAction() { setId(OpenLinkedObjectAction.class.getName()); setImageDescriptor( SharedImages.getSharedImageDescriptor( IssueTrackingPlugin.getDefault(), IssueLinkListSection.class, "Open" //$NON-NLS-1$ ) ); setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.OpenLinkedObjectAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.OpenLinkedObjectAction.text")); //$NON-NLS-1$ } @Override public void run() { IssueLinkTable table = issueLinkAdderComposite.getIssueLinkTable(); if (!table.getSelectedElements().isEmpty()) { for (IssueLinkTableItem issueLinkTableItem : table.getSelectedElements()) { if (issueLinkTableItem.getIssueLink() != null) { IssueLinkHandler<ObjectID, Object> handler = table.getIssueLinkHandler(issueLinkTableItem.getLinkedObjectID()); handler.openLinkedObject(issueLinkTableItem.getIssueLink(), issueLinkTableItem.getLinkedObjectID()); } } } } } public class AddLinkAction extends Action { public AddLinkAction() { setId(AddLinkAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingPlugin.getDefault(), IssueLinkListSection.class, "Add")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.AddLinkAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.AddLinkAction.text")); //$NON-NLS-1$ } @Override public void run() { IssueLinkTable table = issueLinkAdderComposite.getIssueLinkTable(); DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(new CreateIssueLinkWizard(table, getIssue())); dialog.open(); } } public class RemoveLinkAction extends Action { public RemoveLinkAction() { setId(RemoveLinkAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingPlugin.getDefault(), IssueLinkListSection.class, "Remove")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.RemoveLinkAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueLinkListSection.RemoveLinkAction.text")); //$NON-NLS-1$ } @Override public void run() { issueLinkAdderComposite.getIssueLinkTable().removeIssueLinkTableItems(issueLinkAdderComposite.getIssueLinkTable().getSelectedElements()); } } }