p2izing the editor
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / navigation / FavoritesTableViewer.java
1 package eu.etaxonomy.taxeditor.navigation;
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.actions.TaxonTransfer;
22 import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;
23
24 public class FavoritesTableViewer extends TableViewer {
25
26 public FavoritesTableViewer(Composite parent) {
27 super(parent, SWT.H_SCROLL | SWT.V_SCROLL);
28 this.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
29
30 // Add content provider
31 ObservableListContentProvider favoritesContentProviderList = new ObservableListContentProvider();
32 this.setContentProvider(favoritesContentProviderList);
33
34 // Label provider that listens for changes to name cache
35 IObservableMap[] rnViewerLabelProviderMaps = BeansObservables.observeMaps(favoritesContentProviderList.
36 // getKnownElements(), IFavoritesDraggable.class, new String[]{"label"});
37 getKnownElements(), Taxon.class, new String[]{"name"});
38 this.setLabelProvider(new ObservableMapLabelProvider(rnViewerLabelProviderMaps) {
39
40 /*
41 * JFace databinding syntax makes it to difficult to retrieve
42 * Taxon.getName().getNameCache, so override function that returns
43 * label
44 *
45 * (non-Javadoc)
46 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)
47 */
48 public String getColumnText(Object element, int columnIndex) {
49 return element.toString();
50 // return ((Taxon) element).getName().getTitleCache();
51 }
52 });
53
54 // Listens for new taxa opened for editing
55 this.setInput(FavoritesView.getObservableFavorites());
56
57 // On double click, open name editor
58 this.addDoubleClickListener(new IDoubleClickListener(){
59
60 public void doubleClick(DoubleClickEvent event) {
61 Object element = ((StructuredSelection)event.getSelection()).getFirstElement();
62 if (element instanceof Taxon) {
63 new OpenTaxonEditorAction((Taxon) element).run();
64 }
65 }
66 });
67
68 // Drop functionality
69 Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};
70 // int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;
71 int operations = DND.DROP_COPY;
72 DropTarget target = new DropTarget(this.getControl(), operations);
73 target.setTransfer(types);
74 target.addDropListener(new DropTargetAdapter() {
75
76 public void dragEnter(DropTargetEvent event) {
77 }
78
79 public void drop(DropTargetEvent event) {
80
81 // Add event to favorites list
82 FavoritesView.addFavorite(event.data);
83 }
84 });
85 }
86 }