Project

General

Profile

Download (10.2 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 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.editor.descriptiveDataSet.matrix;
10

    
11
import java.io.File;
12
import java.io.FileInputStream;
13
import java.io.IOException;
14
import java.util.Collection;
15
import java.util.Properties;
16

    
17
import org.eclipse.jface.viewers.ArrayContentProvider;
18
import org.eclipse.jface.viewers.ComboViewer;
19
import org.eclipse.jface.viewers.LabelProvider;
20
import org.eclipse.nebula.widgets.nattable.export.command.ExportCommand;
21
import org.eclipse.nebula.widgets.nattable.persistence.PersistenceHelper;
22
import org.eclipse.nebula.widgets.nattable.persistence.command.DisplayPersistenceDialogCommand;
23
import org.eclipse.nebula.widgets.nattable.persistence.command.DisplayPersistenceDialogCommandHandler;
24
import org.eclipse.nebula.widgets.nattable.persistence.command.IStateChangedListener;
25
import org.eclipse.nebula.widgets.nattable.persistence.command.StateChangeEvent;
26
import org.eclipse.nebula.widgets.nattable.persistence.gui.PersistenceDialog;
27
import org.eclipse.nebula.widgets.nattable.tree.command.TreeCollapseAllCommand;
28
import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandAllCommand;
29
import org.eclipse.swt.SWT;
30
import org.eclipse.swt.events.SelectionAdapter;
31
import org.eclipse.swt.events.SelectionEvent;
32
import org.eclipse.swt.layout.GridData;
33
import org.eclipse.swt.layout.GridLayout;
34
import org.eclipse.swt.widgets.Button;
35
import org.eclipse.swt.widgets.Composite;
36
import org.eclipse.swt.widgets.Label;
37

    
38
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
39
import eu.etaxonomy.taxeditor.model.ImageResources;
40
import eu.etaxonomy.taxeditor.model.MessagingUtils;
41

    
42
/**
43
 * @author pplitzner
44
 * @since Jul 9, 2018
45
 *
46
 */
47
public class CharacterMatrixToolbar extends Composite {
48

    
49
    private CharacterMatrix matrix;
50
    private Label wsLabel;
51
    private DisplayPersistenceDialogCommandHandler displayPersistenceDialogCommandHandler;
52
    private Properties natTableState;
53

    
54
    public CharacterMatrixToolbar(CharacterMatrix matrix, int style) {
55
        super(matrix, style);
56
        this.matrix = matrix;
57

    
58
        init();
59
    }
60

    
61
    private void init() {
62
        setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
63
        setLayout(new GridLayout(9, false));
64

    
65
        wsLabel = new Label(this, SWT.NONE);
66

    
67
        Button btnToggleToolTips = new Button(this, SWT.TOGGLE);
68
        Button btnToggleTree = new Button(this, SWT.PUSH);
69
        Button btnToggleFlat = new Button(this, SWT.PUSH);
70
        Button btnCollapseAll = new Button(this, SWT.PUSH);
71
        Button btnExpandAll = new Button(this, SWT.PUSH);
72
        Button btnFreezeSuppInfo = new Button(this, SWT.TOGGLE);
73
        ComboViewer comboStates = new ComboViewer(this, SWT.DROP_DOWN);
74
        Button btnManageState = new Button(this, SWT.PUSH);
75
        Button btnExcelExport = new Button(this, SWT.PUSH);
76

    
77
        /**
78
         * Toogle tooltips button
79
         */
80
        btnToggleToolTips.setImage(ImageResources.getImage(ImageResources.LIGHT_BULB));
81
        btnToggleToolTips.setToolTipText("Show tooltips");
82
        btnToggleToolTips.setSelection(true);
83
        btnToggleToolTips.setEnabled(true);
84
        btnToggleToolTips.addSelectionListener(new SelectionAdapter() {
85
            @Override
86
            public void widgetSelected(SelectionEvent e) {
87
                matrix.toogleIsShowTooltips();
88
            }
89
        });
90

    
91
        /**
92
         * Toogle tree button
93
         */
94
        btnToggleTree.setImage(ImageResources.getImage(ImageResources.HIERARCHICAL));
95
        btnToggleTree.setToolTipText(Messages.CharacterMatrix_SHOW_HIERARCHY);
96
        btnToggleTree.setSelection(true);
97
        btnToggleTree.setEnabled(false);
98
        btnToggleTree.addSelectionListener(new SelectionAdapter() {
99
            @Override
100
            public void widgetSelected(SelectionEvent e) {
101
                matrix.toggleTreeFlat(true, btnToggleFlat, btnToggleTree, btnCollapseAll, btnExpandAll, btnFreezeSuppInfo);
102
            }
103
        });
104

    
105
        /**
106
         * Toogle flat button
107
         */
108
        btnToggleFlat.setImage(ImageResources.getImage(ImageResources.FLAT));
109
        btnToggleFlat.setToolTipText(Messages.CharacterMatrix_SHOW_FLAT_LIST);
110
        btnToggleFlat.addSelectionListener(new SelectionAdapter() {
111
            @Override
112
            public void widgetSelected(SelectionEvent e) {
113
                matrix.toggleTreeFlat(false, btnToggleFlat, btnToggleTree, btnCollapseAll, btnExpandAll, btnFreezeSuppInfo);
114
            }
115
        });
116

    
117
        /**
118
         *
119
         * Collapse button
120
         */
121
        btnCollapseAll.setImage(ImageResources.getImage(ImageResources.COLLAPSE_ALL));
122
        btnCollapseAll.setToolTipText(Messages.CharacterMatrix_COLLAPSE);
123
        btnCollapseAll.addSelectionListener(new SelectionAdapter() {
124
            @Override
125
            public void widgetSelected(SelectionEvent e) {
126
                matrix.getNatTable().doCommand(new TreeCollapseAllCommand());
127
            }
128
        });
129

    
130
        /**
131
         * Expand button
132
         */
133
        btnExpandAll.setImage(ImageResources.getImage(ImageResources.EXPAND_ALL));
134
        btnExpandAll.setToolTipText(Messages.CharacterMatrix_EXPAND);
135
        btnExpandAll.addSelectionListener(new SelectionAdapter() {
136
            @Override
137
            public void widgetSelected(SelectionEvent e) {
138
                matrix.getNatTable().doCommand(new TreeExpandAllCommand());
139
            }
140
        });
141

    
142
        /**
143
         * Freeze supplemental info button
144
         */
145
        btnFreezeSuppInfo.setImage(ImageResources.getImage(ImageResources.LOCK_ICON));
146
        btnFreezeSuppInfo.setToolTipText(Messages.CharacterMatrix_LOCK_COLUMNS);
147
        btnFreezeSuppInfo.setSelection(true);
148
        btnFreezeSuppInfo.addSelectionListener(new SelectionAdapter() {
149
            @Override
150
            public void widgetSelected(SelectionEvent e) {
151
                boolean isSelected = btnFreezeSuppInfo.getSelection();
152
                matrix.freezeSupplementalColumns(isSelected);
153
                btnFreezeSuppInfo.setImage(isSelected?
154
                                ImageResources.getImage(ImageResources.LOCK_ICON):
155
                                    ImageResources.getImage(ImageResources.LOCK_OPEN_ICON));
156
            }
157
        });
158

    
159
        /**
160
         * Table state persistence
161
         */
162
        natTableState = new Properties();
163
        //load persisted state
164
        File statePropertiesFile = matrix.getStatePropertiesFile();
165
        FileInputStream inputStream;
166
        try {
167
            inputStream = new FileInputStream(statePropertiesFile);
168
            natTableState.load(inputStream);
169
        } catch (IOException e) {
170
            MessagingUtils.info("No initial state properties file found for character matrix"); //$NON-NLS-1$
171
        }
172

    
173
        // create a combobox for showing the available view states
174
        Collection<String> availableStates = PersistenceHelper.getAvailableStates(natTableState);
175
        comboStates.setLabelProvider(new LabelProvider(){
176
            @Override
177
            public String getText(Object element) {
178
                if(element instanceof String && ((String) element).isEmpty()){
179
                    return Messages.CharacterMatrix_DEFAULT;
180
                }
181
                return super.getText(element);
182
            }
183
        });
184
        comboStates.setContentProvider(new ArrayContentProvider());
185
        comboStates.addSelectionChangedListener(e->
186
        {
187
            int index = comboStates.getCombo().getSelectionIndex();
188
            if (index >= 0) {
189
                String selected = comboStates.getCombo().getItem(index);
190
                // load the state
191
                matrix.getNatTable().loadState(selected, natTableState);
192
                natTableState.setProperty(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY, selected);
193
            }
194
        });
195
        comboStates.setInput(availableStates);
196
        if(comboStates.getCombo().getItemCount()>0){
197
            comboStates.getCombo().select(0);
198
        }
199

    
200
        displayPersistenceDialogCommandHandler = new DisplayPersistenceDialogCommandHandler(natTableState, matrix.getNatTable());
201
        // add listener to update the combo on view state management changes
202
        displayPersistenceDialogCommandHandler.addStateChangeListener(new IStateChangedListener() {
203
            @Override
204
            public void handleStateChange(StateChangeEvent event) {
205
                comboStates.setInput(PersistenceHelper.getAvailableStates(natTableState));
206
                matrix.selectStateItem(comboStates, event.getViewConfigName());
207
            }
208
        });
209

    
210
        // add button to show dialog
211
        btnManageState.setImage(ImageResources.getImage(ImageResources.SETTINGS));
212
        btnManageState.setToolTipText(Messages.CharacterMatrix_VIEW_CONFIG);
213
        btnManageState.addSelectionListener(new SelectionAdapter() {
214
            @Override
215
            public void widgetSelected(SelectionEvent e) {
216
                matrix.getNatTable().doCommand(new DisplayPersistenceDialogCommand(matrix.getNatTable()));
217
                Object activeConfig = natTableState.get(PersistenceDialog.ACTIVE_VIEW_CONFIGURATION_KEY);
218
                if(activeConfig!=null){
219
                    matrix.selectStateItem(comboStates, activeConfig.toString());
220
                }
221
            }
222
        });
223

    
224
        /**
225
         * excel export
226
         */
227
        btnExcelExport.setToolTipText(Messages.CharacterMatrix_EXPORT);
228
        btnExcelExport.setImage(ImageResources.getImage(ImageResources.EXPORT));
229
        btnExcelExport.addSelectionListener(new SelectionAdapter() {
230
            @Override
231
            public void widgetSelected(SelectionEvent e) {
232
                matrix.getNatTable().doCommand(
233
                        new ExportCommand(
234
                                matrix.getNatTable().getConfigRegistry(),
235
                                matrix.getNatTable().getShell()));
236
            }
237
        });
238

    
239
    }
240

    
241
    public Label getWsLabel() {
242
        return wsLabel;
243
    }
244

    
245
    public Properties getNatTableState() {
246
        return natTableState;
247
    }
248

    
249
    public DisplayPersistenceDialogCommandHandler getDisplayPersistenceDialogCommandHandler() {
250
        return displayPersistenceDialogCommandHandler;
251
    }
252
}
(10-10/18)