finalizing preferred refactoring
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / preference / AbstractMenuPreferences.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.preference;
12
13 import java.util.HashMap;
14 import java.util.List;
15 import java.util.Set;
16
17 import org.eclipse.jface.preference.PreferencePage;
18 import org.eclipse.jface.viewers.CheckboxTableViewer;
19 import org.eclipse.jface.viewers.IStructuredContentProvider;
20 import org.eclipse.jface.viewers.ITableLabelProvider;
21 import org.eclipse.jface.viewers.LabelProvider;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.events.MouseAdapter;
25 import org.eclipse.swt.events.MouseEvent;
26 import org.eclipse.swt.graphics.Image;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Button;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Control;
32 import org.eclipse.ui.IWorkbench;
33
34 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
35
36 /**
37 * @author n.hoffmann
38 * @created 12.06.2009
39 * @version 1.0
40 */
41 public abstract class AbstractMenuPreferences extends PreferencePage{
42
43 private Button toggleButton;
44 protected HashMap<DefinedTermBase, Button> menuButtons;
45
46 protected Set<?> vocabulary;
47
48 private List preferedTerms;
49
50 protected CheckboxTableViewer tableViewer;
51
52 private boolean state = true;
53
54 /**
55 * Constructs a new menu preference page.
56 *
57 * @param initialVocabulary the initial vocabulary contating all possible entries for the menu
58 * @param preferedTerms a List containtg already prefered terms
59 * @param title the title of the page
60 * @param description describing text for the preference page
61 */
62 public AbstractMenuPreferences(Set<?> initialVocabulary, List preferedTerms, String title, String description) {
63 super(title);
64 vocabulary = initialVocabulary;
65 this.preferedTerms = preferedTerms;
66 setDescription(description);
67 }
68
69 /**
70 * Create contents of the preference page
71 * @param parent
72 */
73 @Override
74 public Control createContents(Composite parent) {
75
76 Composite container = new Composite(parent, SWT.NULL);
77 final GridLayout gridLayout = new GridLayout();
78 gridLayout.numColumns = 2;
79 container.setLayout(gridLayout);
80
81 tableViewer = CheckboxTableViewer.newCheckList(container, SWT.NULL);
82 GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
83 tableLayoutData.heightHint = 300;
84 tableViewer.getTable().setLayoutData(tableLayoutData);
85
86 tableViewer.setContentProvider(new MenuPreferenceContentProvider());
87 tableViewer.setLabelProvider(new MenuPreferenceLabelProvider());
88
89 tableViewer.setInput(vocabulary);
90
91 tableViewer.setCheckedElements(preferedTerms.toArray());
92
93 Composite buttonContainer = new Composite(container, SWT.NULL);
94 GridData buttonContainerLayoutData = new GridData();
95 buttonContainerLayoutData.verticalAlignment = SWT.TOP;
96 buttonContainer.setLayoutData(buttonContainerLayoutData);
97 buttonContainer.setLayout(new GridLayout());
98
99 createButtons(buttonContainer);
100
101 toggleButton = new Button(buttonContainer, SWT.PUSH);
102 toggleButton.setText("Toggle");
103 toggleButton.addMouseListener(new MouseAdapter(){
104
105 /* (non-Javadoc)
106 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
107 */
108 @Override
109 public void mouseDown(MouseEvent e) {
110 tableViewer.setAllChecked(state);
111 state = state ? false : true;
112 }
113 });
114
115 return container;
116 }
117
118
119 /**
120 * @param buttonContainer
121 */
122 protected abstract void createButtons(Composite buttonContainer);
123
124 public void init(IWorkbench workbench) {
125 setPreferenceStore(PreferencesUtil.getPrefStore());
126 }
127
128 /*
129 * (non-Javadoc)
130 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
131 */
132 protected void performDefaults() {
133 tableViewer.setAllChecked(true);
134 }
135
136 /**
137 *
138 * @author n.hoffmann
139 * @created 12.06.2009
140 * @version 1.0
141 */
142 private class MenuPreferenceContentProvider implements IStructuredContentProvider{
143
144 public Object[] getElements(Object inputElement) {
145 return ((Set<?>) inputElement).toArray(new DefinedTermBase[0]);
146 }
147
148 public void dispose() {}
149
150 public void inputChanged(Viewer viewer, Object oldInput,
151 Object newInput) {}
152
153 };
154
155 /**
156 *
157 * @author n.hoffmann
158 * @created 12.06.2009
159 * @version 1.0
160 */
161 private class MenuPreferenceLabelProvider extends LabelProvider implements ITableLabelProvider{
162
163 /* (non-Javadoc)
164 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
165 */
166 public Image getColumnImage(Object element, int columnIndex) {
167 return null;
168 }
169
170 /* (non-Javadoc)
171 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
172 */
173 public String getColumnText(Object element, int columnIndex) {
174 return ((DefinedTermBase)element).getLabel();
175 }
176
177 }
178
179 /**
180 * @return the tableViewer
181 */
182 public CheckboxTableViewer getTableViewer() {
183 return tableViewer;
184 }
185
186 }