1) Re-arranged packages:
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / view / FavoritesTableViewer.java
1 package eu.etaxonomy.taxeditor.view;
2
3 import org.eclipse.core.databinding.beans.BeansObservables;
4 import org.eclipse.core.databinding.observable.map.IObservableMap;
5 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
6 import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
7 import org.eclipse.jface.viewers.DoubleClickEvent;
8 import org.eclipse.jface.viewers.IDoubleClickListener;
9 import org.eclipse.jface.viewers.StructuredSelection;
10 import org.eclipse.jface.viewers.TableViewer;
11 import org.eclipse.swt.SWT;
12 import org.eclipse.swt.dnd.DND;
13 import org.eclipse.swt.dnd.DropTarget;
14 import org.eclipse.swt.dnd.DropTargetAdapter;
15 import org.eclipse.swt.dnd.DropTargetEvent;
16 import org.eclipse.swt.dnd.Transfer;
17 import org.eclipse.swt.layout.GridData;
18 import org.eclipse.swt.widgets.Composite;
19
20 import eu.etaxonomy.cdm.model.taxon.Taxon;
21 import eu.etaxonomy.taxeditor.TaxEditorPlugin;
22 import eu.etaxonomy.taxeditor.actions.TaxonTransfer;
23 import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;
24
25 public class FavoritesTableViewer extends TableViewer {
26
27 public FavoritesTableViewer(Composite parent) {
28 super(parent, SWT.H_SCROLL | SWT.V_SCROLL);
29 this.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
30
31 // Add content provider
32 ObservableListContentProvider favoritesContentProviderList = new ObservableListContentProvider();
33 this.setContentProvider(favoritesContentProviderList);
34
35 // Label provider that listens for changes to name cache
36 IObservableMap[] rnViewerLabelProviderMaps = BeansObservables.observeMaps(favoritesContentProviderList.
37 // getKnownElements(), IFavoritesDraggable.class, new String[]{"label"});
38 getKnownElements(), Taxon.class, new String[]{"name"});
39 this.setLabelProvider(new ObservableMapLabelProvider(rnViewerLabelProviderMaps) {
40
41 /*
42 * JFace databinding syntax makes it to difficult to retrieve
43 * Taxon.getName().getNameCache, so override function that returns
44 * label
45 *
46 * (non-Javadoc)
47 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)
48 */
49 public String getColumnText(Object element, int columnIndex) {
50 return element.toString();
51 // return ((Taxon) element).getName().getTitleCache();
52 }
53 });
54
55 // Listens for new taxa opened for editing
56 this.setInput(TaxEditorPlugin.getDefault().getObservableFavoritesList());
57
58 // On double click, open name editor
59 this.addDoubleClickListener(new IDoubleClickListener(){
60
61 public void doubleClick(DoubleClickEvent event) {
62 Object element = ((StructuredSelection)event.getSelection()).getFirstElement();
63 if (element instanceof Taxon) {
64 new OpenTaxonEditorAction((Taxon) element).run();
65 }
66 }
67 });
68
69 // Drop functionality
70 Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};
71 // int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;
72 int operations = DND.DROP_COPY;
73 DropTarget target = new DropTarget(this.getControl(), operations);
74 target.setTransfer(types);
75 target.addDropListener(new DropTargetAdapter() {
76
77 public void dragEnter(DropTargetEvent event) {
78 // System.out.println("hello");
79 }
80
81 public void drop(DropTargetEvent event) {
82
83 // Add event to favorites list
84 TaxEditorPlugin.getDefault().getObservableFavoritesList().add(event.data);
85 }
86 });
87 }
88 }