45c558e9b3dd87b3c7d996d2249d62b894b5b0be
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / checklist / listener / ChecklistDropdownSelectionListener.java
1 package eu.etaxonomy.taxeditor.editor.view.checklist.listener;
2
3 import java.util.SortedSet;
4
5 import org.eclipse.jface.viewers.TableViewer;
6 import org.eclipse.jface.wizard.WizardDialog;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.SelectionAdapter;
9 import org.eclipse.swt.events.SelectionEvent;
10 import org.eclipse.swt.graphics.Point;
11 import org.eclipse.swt.graphics.Rectangle;
12 import org.eclipse.swt.widgets.Menu;
13 import org.eclipse.swt.widgets.MenuItem;
14 import org.eclipse.swt.widgets.Table;
15 import org.eclipse.swt.widgets.TableColumn;
16 import org.eclipse.swt.widgets.ToolItem;
17
18 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
19 import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
20 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
21 import eu.etaxonomy.taxeditor.preference.wizard.AvailableDistributionWizard;
22 import eu.etaxonomy.taxeditor.store.StoreUtil;
23
24 /**
25 * Handles drop down menu selection. Available items are defined in the
26 * enumeration SearchOption.
27 *
28 * @author n.hoffmann
29 * @created Feb 2, 2010
30 * @version 1.0
31 */
32 public class ChecklistDropdownSelectionListener extends SelectionAdapter {
33
34 private final Menu menu;
35 private final ToolItem dropdown;
36 private final ChecklistEditor editor;
37 private final SortedSet<DefinedTermBase> termSet;
38
39 public ChecklistDropdownSelectionListener(ToolItem dropdown, ChecklistEditor editor,
40 SortedSet<DefinedTermBase> termSet) {
41 this.dropdown = dropdown;
42 this.editor = editor;
43 this.termSet = termSet;
44 menu = new Menu(dropdown.getParent().getShell());
45 initialMenuItem();
46 }
47
48 // SearchOption option
49 public void add(DefinedTermBase<DefinedTermBase> term) {
50 MenuItem menuItem = new MenuItem(menu, SWT.CHECK);
51 menuItem.setText(term.getTitleCache());
52 if (PreferencesUtil.getPreferenceStore().getBoolean(term.getUuid().toString())) {
53 menuItem.setSelection(true);
54 } else {
55 menuItem.setSelection(false);
56 }
57 menuItem.addSelectionListener(new SelectionAdapter() {
58 @Override
59 public void widgetSelected(SelectionEvent event) {
60 MenuItem selected = (MenuItem) event.widget;
61
62 TableViewer viewer = (TableViewer) editor.getViewer();
63 final Table table = viewer.getTable();
64 // TODO make it selectable according to selection event
65 TableColumn column = null;
66 DefinedTermBase<DefinedTermBase> selectedTerm = null;
67 if (termSet != null) {
68 int i = 0;
69 for (DefinedTermBase<DefinedTermBase> term : termSet) {
70 if (term != null) {
71 if (selected.getText().equalsIgnoreCase(term.getTitleCache())) {
72 selectedTerm = term;
73 column = table.getColumn(4 + i);
74 }
75 i++;
76 }
77 }
78 }
79 if (column != null && column.getWidth() == 0) {
80 // save column status if shown or not
81 if (selectedTerm != null) {
82 PreferencesUtil.getPreferenceStore().setValue(selectedTerm.getUuid().toString(), true);
83 }
84 column.setWidth(100);
85 } else if (column != null) {
86 if (selectedTerm != null) {
87 PreferencesUtil.getPreferenceStore().setValue(selectedTerm.getUuid().toString(), false);
88 }
89 column.setWidth(0);
90 }
91 viewer.refresh();
92 }
93 });
94 }
95
96 private void initialMenuItem(){
97 MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
98 menuItem.setText("Add Distribution");
99 menuItem.addSelectionListener(new SelectionAdapter() {
100 @Override
101 public void widgetSelected(SelectionEvent event) {
102 AvailableDistributionWizard availableDistributionWizard = new AvailableDistributionWizard();
103 WizardDialog dialog = new WizardDialog(StoreUtil.getShell(),
104 availableDistributionWizard);
105
106 dialog.open();
107 }
108 });
109 new MenuItem(menu, SWT.SEPARATOR);
110 }
111
112 @Override
113 public void widgetSelected(SelectionEvent event) {
114 if (event.detail == SWT.ARROW) {
115 ToolItem item = (ToolItem) event.widget;
116 Rectangle rect = item.getBounds();
117 Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
118 menu.setLocation(pt.x, pt.y + rect.height);
119 menu.setVisible(true);
120 } else {
121 menu.setVisible(true);
122 }
123 }
124 }