Added a reload function so that the checklist editor doesn't need to be relaunched...
[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.apache.log4j.Logger;
6 import org.eclipse.jface.viewers.TableViewer;
7 import org.eclipse.jface.wizard.WizardDialog;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.events.SelectionAdapter;
10 import org.eclipse.swt.events.SelectionEvent;
11 import org.eclipse.swt.graphics.Point;
12 import org.eclipse.swt.graphics.Rectangle;
13 import org.eclipse.swt.widgets.Menu;
14 import org.eclipse.swt.widgets.MenuItem;
15 import org.eclipse.swt.widgets.Table;
16 import org.eclipse.swt.widgets.TableColumn;
17 import org.eclipse.swt.widgets.ToolItem;
18
19 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
20 import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
21 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
22 import eu.etaxonomy.taxeditor.preference.wizard.AvailableDistributionWizard;
23 import eu.etaxonomy.taxeditor.store.StoreUtil;
24
25 /**
26 * Handles drop down menu selection. Available items are defined in the
27 * enumeration SearchOption.
28 *
29 * @author n.hoffmann
30 * @created Feb 2, 2010
31 * @version 1.0
32 */
33 public class ChecklistDropdownSelectionListener extends SelectionAdapter {
34
35 private final Menu menu;
36 private final ChecklistEditor editor;
37 private final SortedSet<DefinedTermBase> termSet;
38 private Logger logger = Logger.getLogger(ChecklistDropdownSelectionListener.class);
39
40 public ChecklistDropdownSelectionListener(ToolItem dropdown, ChecklistEditor editor,
41 SortedSet<DefinedTermBase> termSet) {
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 TableColumn[] columns = viewer.getTable().getColumns();
69 for(int i=0; i<columns.length; i++){
70 if(selected.getText().equalsIgnoreCase(columns[i].getText())){
71 column = columns[i];
72 logger.info("Column no " +i +" Column Header "+ column.getText() );
73 for (DefinedTermBase<DefinedTermBase> term : termSet) {
74 if(column.getText().equalsIgnoreCase(term.getTitleCache())){
75 selectedTerm = term;
76 break;
77 }
78 }
79 }
80 }
81 }
82 if (column != null && column.getWidth() == 0) {
83 // save column status if shown or not
84 if (selectedTerm != null) {
85 PreferencesUtil.getPreferenceStore().setValue(selectedTerm.getUuid().toString(), true);
86 }
87 column.setWidth(100);
88 } else if (column != null) {
89 if (selectedTerm != null) {
90 PreferencesUtil.getPreferenceStore().setValue(selectedTerm.getUuid().toString(), false);
91 }
92 column.setWidth(0);
93 }
94 }
95 });
96 }
97
98 private void initialMenuItem(){
99 MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
100 menuItem.setText("Add Distribution");
101 menuItem.addSelectionListener(new SelectionAdapter() {
102 @Override
103 public void widgetSelected(SelectionEvent event) {
104 AvailableDistributionWizard availableDistributionWizard = new AvailableDistributionWizard();
105 WizardDialog dialog = new WizardDialog(StoreUtil.getShell(),
106 availableDistributionWizard);
107
108 int open = dialog.open();
109 if(open == 0){
110 editor.reload();
111 }
112 }
113 });
114 new MenuItem(menu, SWT.SEPARATOR);
115 }
116
117 @Override
118 public void widgetSelected(SelectionEvent event) {
119 if (event.detail == SWT.ARROW) {
120 ToolItem item = (ToolItem) event.widget;
121 Rectangle rect = item.getBounds();
122 Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
123 menu.setLocation(pt.x, pt.y + rect.height);
124 menu.setVisible(true);
125 } else {
126 menu.setVisible(true);
127 }
128 }
129
130 public Menu getMenu(){
131 return menu;
132 }
133 }