3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.preference
;
13 import java
.util
.ArrayList
;
14 import java
.util
.HashMap
;
15 import java
.util
.List
;
18 import org
.eclipse
.jface
.preference
.PreferencePage
;
19 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
20 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
21 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
22 import org
.eclipse
.jface
.viewers
.LabelProvider
;
23 import org
.eclipse
.jface
.viewers
.Viewer
;
24 import org
.eclipse
.swt
.SWT
;
25 import org
.eclipse
.swt
.events
.MouseAdapter
;
26 import org
.eclipse
.swt
.events
.MouseEvent
;
27 import org
.eclipse
.swt
.graphics
.Image
;
28 import org
.eclipse
.swt
.layout
.GridData
;
29 import org
.eclipse
.swt
.layout
.GridLayout
;
30 import org
.eclipse
.swt
.widgets
.Button
;
31 import org
.eclipse
.swt
.widgets
.Composite
;
32 import org
.eclipse
.swt
.widgets
.Control
;
33 import org
.eclipse
.ui
.IWorkbench
;
34 import org
.eclipse
.ui
.IWorkbenchPreferencePage
;
36 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
43 public abstract class AbstractMenuPreferences
<T
extends DefinedTermBase
> extends PreferencePage
implements
44 IWorkbenchPreferencePage
{
46 private Button toggleButton
;
47 protected HashMap
<DefinedTermBase
<T
>, Button
> menuButtons
;
49 protected Set
<T
> vocabulary
;
51 private List
<T
> preferedTerms
;
53 protected CheckboxTableViewer tableViewer
;
55 private boolean state
= true;
58 * Constructs a new menu preference page.
60 * @param initialVocabulary the initial vocabulary contating all possible entries for the menu
61 * @param preferedTerms a List containtg already prefered terms
62 * @param title the title of the page
63 * @param description describing text for the preference page
65 public AbstractMenuPreferences(Set
<T
> initialVocabulary
, String title
, String description
) {
67 vocabulary
= initialVocabulary
;
68 preferedTerms
= PreferencesUtil
.getPreferredTerms(initialVocabulary
);
69 setDescription(description
);
73 * Create contents of the preference page
77 public Control
createContents(Composite parent
) {
79 Composite container
= new Composite(parent
, SWT
.NULL
);
80 final GridLayout gridLayout
= new GridLayout();
81 gridLayout
.numColumns
= 2;
82 container
.setLayout(gridLayout
);
84 tableViewer
= CheckboxTableViewer
.newCheckList(container
, SWT
.NULL
);
85 GridData tableLayoutData
= new GridData(SWT
.FILL
, SWT
.FILL
, true, false);
86 tableLayoutData
.heightHint
= 300;
87 tableViewer
.getTable().setLayoutData(tableLayoutData
);
89 tableViewer
.setContentProvider(new MenuPreferenceContentProvider());
90 tableViewer
.setLabelProvider(new MenuPreferenceLabelProvider());
92 tableViewer
.setInput(vocabulary
);
94 tableViewer
.setCheckedElements(preferedTerms
.toArray());
96 Composite buttonContainer
= new Composite(container
, SWT
.NULL
);
97 GridData buttonContainerLayoutData
= new GridData();
98 buttonContainerLayoutData
.verticalAlignment
= SWT
.TOP
;
99 buttonContainer
.setLayoutData(buttonContainerLayoutData
);
100 buttonContainer
.setLayout(new GridLayout());
102 createButtons(buttonContainer
);
104 toggleButton
= new Button(buttonContainer
, SWT
.PUSH
);
105 toggleButton
.setText("Toggle");
106 toggleButton
.addMouseListener(new MouseAdapter(){
109 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
112 public void mouseDown(MouseEvent e
) {
113 tableViewer
.setAllChecked(state
);
114 state
= state ?
false : true;
123 * Default implementation
125 * @param buttonContainer
127 protected void createButtons(Composite buttonContainer
){
128 // implement in client
131 public void init(IWorkbench workbench
) {
132 setPreferenceStore(PreferencesUtil
.getPreferenceStore());
137 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
139 protected void performDefaults() {
140 tableViewer
.setAllChecked(true);
146 * @created 12.06.2009
149 private class MenuPreferenceContentProvider
implements IStructuredContentProvider
{
151 public Object
[] getElements(Object inputElement
) {
152 return ((Set
<?
>) inputElement
).toArray(new DefinedTermBase
[0]);
155 public void dispose() {}
157 public void inputChanged(Viewer viewer
, Object oldInput
,
167 * @created 12.06.2009
170 private class MenuPreferenceLabelProvider
extends LabelProvider
implements ITableLabelProvider
{
173 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
175 public Image
getColumnImage(Object element
, int columnIndex
) {
180 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
182 public String
getColumnText(Object element
, int columnIndex
) {
183 return ((DefinedTermBase
)element
).getLabel();
189 * @return the tableViewer
191 public CheckboxTableViewer
getTableViewer() {
196 * @see org.eclipse.jface.preference.PreferencePage#performOk()
199 public boolean performOk() {
200 List
<T
> preferredTerms
= new ArrayList
<T
>();
201 for (Object element
: getTableViewer().getCheckedElements()){
202 preferredTerms
.add((T
) element
);
205 PreferencesUtil
.setPreferredTerms(preferredTerms
, this.vocabulary
);