package eu.etaxonomy.taxeditor.editor.key.polytomous;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
/**
public class PolytomousKeyListEditor extends EditorPart implements
IConversationEnabled {
+ private class LinkListener extends MouseAdapter {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
+ * .MouseEvent)
+ */
+ @Override
+ public void mouseUp(MouseEvent event) {
+
+ Table table = (Table) event.widget;
+ // Determine where the mouse was clicked
+ Point pt = new Point(event.x, event.y);
+
+ final TableItem item = table.getItem(pt);
+ if (item != null) {
+ // Determine which column was selected
+ int column = -1;
+ for (int i = 0, n = table.getColumnCount(); i < n; i++) {
+ Rectangle rect = item.getBounds(i);
+ if (rect.contains(pt)) {
+ // This is the selected column
+ column = i;
+ break;
+ }
+ }
+ if (column == 3) {
+ PolytomousKeyNode node = (PolytomousKeyNode) item.getData();
+ Object linkData = getItemLinkData(node);
+ if (linkData instanceof PolytomousKeyNode) {
+ viewer.setSelection(new StructuredSelection(linkData),
+ true);
+ } else if (linkData instanceof Taxon) {
+ try {
+ EditorUtil.openTaxonBase(((Taxon) linkData)
+ .getUuid());
+ } catch (PartInitException e) {
+ EditorUtil.error(getClass(), e);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @return
+ */
+ private Object getItemLinkData(PolytomousKeyNode node) {
+ return node.getChildren().isEmpty() ? node.getTaxon() : node
+ .getChildAt(0);
+ }
+ }
+
public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
private CdmFormFactory formFactory;
private Composite container;
- private PolytomousKeyListViewer viewer;
+ private TableViewer viewer;
/*
* (non-Javadoc)
*/
@Override
public void createPartControl(Composite parent) {
- container = formFactory.createComposite(parent);
- viewer = new PolytomousKeyListViewer(container);
+ FillLayout fillLayout = new FillLayout();
+ fillLayout.marginWidth = 0;
+ fillLayout.marginHeight = 0;
+ fillLayout.type = SWT.VERTICAL;
+ parent.setLayout(fillLayout);
+
+ viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.FULL_SELECTION);
+ getSite().setSelectionProvider(viewer);
+
+ createColumns(viewer);
+ viewer.getControl().addMouseListener(new LinkListener());
+ viewer.setContentProvider(new PolytomousKeyListContentProvider());
+ viewer.setLabelProvider(new PolytomousKeyListLabelProvider());
+
+ // viewer.getControl().setLayoutData(CdmFormFactory.FILL());
+
PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
.getKey();
+
viewer.setInput(key);
}
+ // This will create the columns for the table
+ private void createColumns(TableViewer viewer) {
+ Table table = viewer.getTable();
+ String[] titles = { "Node Number", "Question", "Statement", "Link" };
+ int[] bounds = { 50, 200, 200, 100 };
+
+ for (int i = 0; i < titles.length; i++) {
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+ column.getColumn().setText(titles[i]);
+ column.getColumn().setWidth(bounds[i]);
+ column.getColumn().setResizable(true);
+ column.getColumn().setMoveable(true);
+ }
+ table.setHeaderVisible(true);
+ table.setLinesVisible(false);
+
+ }
+
/*
* (non-Javadoc)
*