fixes #795
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / preference / RankMenuPreferences.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.preference;
10
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14
15 import org.eclipse.jface.preference.PreferencePage;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.MouseAdapter;
18 import org.eclipse.swt.events.MouseEvent;
19 import org.eclipse.swt.layout.GridLayout;
20 import org.eclipse.swt.widgets.Button;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Control;
23 import org.eclipse.swt.widgets.Label;
24 import org.eclipse.ui.IWorkbench;
25 import org.eclipse.ui.IWorkbenchPreferencePage;
26
27 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
28 import eu.etaxonomy.cdm.model.name.Rank;
29 import eu.etaxonomy.taxeditor.store.CdmStore;
30
31 /**
32 * Allows the user to choose which <code>Rank</code>s to display in the
33 * <code>PropertySheet</code> drop-down menu for <code>TaxonNameBase</code>.
34 *
35 * @author p.ciardelli
36 * @created 17.09.2008
37 * @version 1.0
38 */
39 public class RankMenuPreferences extends PreferencePage implements
40 IWorkbenchPreferencePage {
41
42 public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.ranks";
43
44 private Map<Rank, Button> rankButtons;
45
46 private Button toggleButton;
47
48 public RankMenuPreferences() {
49 super();
50 setDescription("Choose which ranks to display in the property sheet drop-down menu.");
51 }
52
53
54 /**
55 * Create contents of the preference page
56 * @param parent
57 */
58 @Override
59 public Control createContents(Composite parent) {
60
61 rankButtons = new HashMap<Rank, Button>();
62
63 Composite container = new Composite(parent, SWT.NULL);
64 final GridLayout gridLayout = new GridLayout();
65 gridLayout.numColumns = 3;
66 container.setLayout(gridLayout);
67
68 CdmStore.getDefault();
69 OrderedTermVocabulary<Rank> ranks = CdmStore.getRanks();
70
71 for (Rank rank : ranks) {
72
73 Button button = new Button(container, SWT.CHECK);
74 button.setText(rank.getLabel());
75 rankButtons.put(rank, button);
76
77 if (PreferencesUtil.getRankPreference(rank)) {
78 button.setSelection(true);
79 }
80 }
81
82 Composite toggleContainer = new Composite(parent, SWT.NULL);
83 toggleContainer.setLayout(new GridLayout());
84
85 toggleButton = new Button(toggleContainer, SWT.TOGGLE);
86 toggleButton.setText("Toggle Selection");
87 toggleButton.addMouseListener(new MouseAdapter(){
88
89 /* (non-Javadoc)
90 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
91 */
92 @Override
93 public void mouseDown(MouseEvent e) {
94 setSelectionForAll(toggleButton.getSelection());
95 }
96 });
97
98 return container;
99 }
100
101
102 /* (non-Javadoc)
103 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
104 */
105 public void init(IWorkbench workbench) {
106 setPreferenceStore(PreferencesUtil.getPrefStore());
107 }
108
109 /* (non-Javadoc)
110 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
111 */
112 protected void performDefaults() {
113 setSelectionForAll(true);
114 }
115
116 /**
117 * Set all buttons to the given value
118 *
119 * @param selection true to activate all of the checkboxes, false otherwise
120 */
121 private void setSelectionForAll(boolean selection){
122 for (Button button : rankButtons.values()) {
123 button.setSelection(selection);
124 }
125 }
126
127 /* (non-Javadoc)
128 * @see org.eclipse.jface.preference.PreferencePage#performOk()
129 */
130 public boolean performOk() {
131
132 for (Rank rank : rankButtons.keySet()) {
133 Button button = rankButtons.get(rank);
134 PreferencesUtil.setRankPreference(rank, button.getSelection());
135 }
136
137 return true;
138 }
139 }