001/*****************************************************************************
002 * Copyright by The HDF Group.                                               *
003 * Copyright by the Board of Trustees of the University of Illinois.         *
004 * All rights reserved.                                                      *
005 *                                                                           *
006 * This file is part of the HDF Java Products distribution.                  *
007 * The full copyright notice, including terms governing use, modification,   *
008 * and redistribution, is contained in the files COPYING and Copyright.html. *
009 * COPYING can be found at the root of the source code distribution tree.    *
010 * Or, see https://support.hdfgroup.org/products/licenses.html               *
011 * If you do not have access to either file, you may request a copy from     *
012 * help@hdfgroup.org.                                                        *
013 ****************************************************************************/
014
015package hdf.view.dialog;
016
017import org.eclipse.swt.SWT;
018import org.eclipse.swt.events.SelectionAdapter;
019import org.eclipse.swt.events.SelectionEvent;
020import org.eclipse.swt.layout.GridData;
021import org.eclipse.swt.layout.GridLayout;
022import org.eclipse.swt.widgets.Button;
023import org.eclipse.swt.widgets.Composite;
024import org.eclipse.swt.widgets.Control;
025import org.eclipse.swt.widgets.Label;
026import org.eclipse.swt.widgets.Text;
027
028import hdf.view.Tools;
029import hdf.view.ViewProperties;
030
031/**
032 * UserOptionsHDFPage.java - Configuration page for HDF-specific application
033 * settings.
034 */
035public class UserOptionsHDFPage extends UserOptionsDefaultPage {
036    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserOptionsHDFPage.class);
037
038    private Text fileExtField;
039    private Button checkConvertEnum, checkShowRegRefValues, helpButton;
040    private Button checkNativeOrder, checkDecOrder, checkIncOrder;
041    private Button checkIndexName, checkIndexCreateOrder;
042    private Button earlyLibVersion, early18LibVersion, early110LibVersion, earlyLateLibVersion;
043    private Button lateLibVersion, late18LibVersion, late110LibVersion, lateLateLibVersion;
044
045    /** Default early libversion for files */
046    private static String earlyLibVers;
047
048    /** Default late libversion for files */
049    private static String lateLibVers;
050
051    /** Default index type for files */
052    private static String indexType;
053
054    /** Default index ordering for files */
055    private static String indexOrder;
056
057    public UserOptionsHDFPage() {
058        super("HDF Settings");
059    }
060
061    /**
062     * Performs special processing when this page's Defaults button has been pressed.
063     */
064    @Override
065    public void performDefaults() {
066        super.performDefaults();
067        getPreferenceStore();
068
069    }
070
071    /**
072     * Notifies that the OK button if this page's container has been pressed.
073     *
074     * @return <code>false</code> to abort the container's OK processing and <code>true</code> to allow
075     *         the OK to happen
076     */
077    @Override
078    public boolean performOk() {
079        getPreferenceStore();
080
081        if (fileExtField != null) {
082            String ext = fileExtField.getText();
083            if ((ext != null) && (ext.length() > 0)) {
084                ext = ext.trim();
085                ViewProperties.setFileExtension(ext);
086            }
087        }
088
089        log.trace("performOk: save HDF options earlyLibVersion={}", earlyLibVersion);
090        if (earlyLibVersion != null) {
091            if (earlyLibVersion.getSelection())
092                ViewProperties.setEarlyLib("Earliest");
093            else if (early18LibVersion.getSelection())
094                ViewProperties.setEarlyLib("v18");
095            else if (early110LibVersion.getSelection())
096                ViewProperties.setEarlyLib("v110");
097            else if (earlyLateLibVersion.getSelection())
098                ViewProperties.setEarlyLib("Latest");
099            else
100                ViewProperties.setEarlyLib("Earliest");
101        }
102
103        log.trace("performOk: save HDF options lateLibVersion={}", lateLibVersion);
104        if (lateLibVersion != null) {
105            if (lateLibVersion.getSelection())
106                ViewProperties.setLateLib("Earliest");
107            else if (late18LibVersion.getSelection())
108                ViewProperties.setLateLib("v18");
109            else if (late110LibVersion.getSelection())
110                ViewProperties.setLateLib("v110");
111            else if (lateLateLibVersion.getSelection())
112                ViewProperties.setLateLib("Latest");
113            else
114                ViewProperties.setLateLib("Latest");
115        }
116
117        // set index type
118        if (checkIndexName != null) {
119            if (checkIndexName.getSelection())
120                ViewProperties.setIndexType("H5_INDEX_NAME");
121            else
122                ViewProperties.setIndexType("H5_INDEX_CRT_ORDER");
123        }
124
125        // set index order
126        if (checkIncOrder != null) {
127            if (checkIncOrder.getSelection())
128                ViewProperties.setIndexOrder("H5_ITER_INC");
129            else if (checkNativeOrder.getSelection())
130                ViewProperties.setIndexOrder("H5_ITER_NATIVE");
131            else
132                ViewProperties.setIndexOrder("H5_ITER_DEC");
133        }
134
135        if (checkConvertEnum != null)
136            ViewProperties.setConvertEnum(checkConvertEnum.getSelection());
137        if (checkShowRegRefValues != null)
138            ViewProperties.setShowRegRefValue(checkShowRegRefValues.getSelection());
139
140        return true;
141    }
142
143    /**
144     * Loads all stored values in the <code>FieldEditor</code>s.
145     */
146    protected void load() {
147        getPreferenceStore();
148
149        fileExtField.setText(ViewProperties.getFileExtension());
150
151        earlyLibVers = ViewProperties.getEarlyLib();
152        log.trace("performOk: load HDF options earlyLibVers={}", earlyLibVers);
153        earlyLibVersion.setSelection(earlyLibVers.compareTo("Earliest") == 0);
154        early18LibVersion.setSelection(earlyLibVers.compareTo("v18") == 0);
155        early110LibVersion.setSelection(earlyLibVers.compareTo("v110") == 0);
156        earlyLateLibVersion.setSelection(earlyLibVers.compareTo("Latest") == 0);
157
158        lateLibVers = ViewProperties.getLateLib();
159        log.trace("performOk: load HDF options lateLibVers={}", lateLibVers);
160        lateLibVersion.setSelection(lateLibVers.compareTo("Earliest") == 0);
161        late18LibVersion.setSelection(lateLibVers.compareTo("v18") == 0);
162        late110LibVersion.setSelection(lateLibVers.compareTo("v110") == 0);
163        lateLateLibVersion.setSelection(lateLibVers.compareTo("Latest") == 0);
164
165        checkConvertEnum.setSelection(ViewProperties.isConvertEnum());
166        checkShowRegRefValues.setSelection(ViewProperties.showRegRefValues());
167
168        indexType = ViewProperties.getIndexType();
169        checkIndexName.setSelection(indexType.compareTo("H5_INDEX_NAME") == 0);
170        checkIndexCreateOrder.setSelection(indexType.compareTo("H5_INDEX_CRT_ORDER") == 0);
171
172        indexOrder = ViewProperties.getIndexOrder();
173        checkIncOrder.setSelection(indexOrder.compareTo("H5_ITER_INC") == 0);
174        checkDecOrder.setSelection(indexOrder.compareTo("H5_ITER_DEC") == 0);
175        checkNativeOrder.setSelection(indexOrder.compareTo("H5_ITER_NATIVE") == 0);
176    }
177
178    /**
179     * Creates and returns the SWT control for the customized body of this
180     * preference page under the given parent composite.
181     *
182     * @param parent the parent composite
183     * @return the new control
184     */
185    @Override
186    protected Control createContents(Composite parent) {
187        Composite composite = new Composite(parent, SWT.NONE);
188        composite.setLayout(new GridLayout(1, false));
189
190        org.eclipse.swt.widgets.Group fileExtensionGroup = new org.eclipse.swt.widgets.Group(composite, SWT.NONE);
191        fileExtensionGroup.setLayout(new GridLayout(2, true));
192        fileExtensionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
193        fileExtensionGroup.setFont(curFont);
194        fileExtensionGroup.setText("File Extensions");
195
196        Label label = new Label(fileExtensionGroup, SWT.RIGHT);
197        label.setFont(curFont);
198        label.setText("Extensions: ");
199
200        fileExtField = new Text(fileExtensionGroup, SWT.SINGLE | SWT.BORDER);
201        fileExtField.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
202        fileExtField.setFont(curFont);
203
204
205        org.eclipse.swt.widgets.Group defaultLibVersionGroup = new org.eclipse.swt.widgets.Group(composite, SWT.NONE);
206        defaultLibVersionGroup.setLayout(new GridLayout());
207        defaultLibVersionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
208        defaultLibVersionGroup.setFont(curFont);
209        defaultLibVersionGroup.setText("Default Lib Version");
210
211        org.eclipse.swt.widgets.Group earlyLibVersionGroup = new org.eclipse.swt.widgets.Group(defaultLibVersionGroup, SWT.NONE);
212        earlyLibVersionGroup.setLayout(new GridLayout(4, true));
213        earlyLibVersionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
214        earlyLibVersionGroup.setFont(curFont);
215        earlyLibVersionGroup.setText("Default Early Lib Version");
216
217        earlyLibVersion = new Button(earlyLibVersionGroup, SWT.RADIO);
218        earlyLibVersion.setFont(curFont);
219        earlyLibVersion.setText("Earliest");
220        earlyLibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
221
222        early18LibVersion = new Button(earlyLibVersionGroup, SWT.RADIO);
223        early18LibVersion.setFont(curFont);
224        early18LibVersion.setText("v18");
225        early18LibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
226
227        early110LibVersion = new Button(earlyLibVersionGroup, SWT.RADIO);
228        early110LibVersion.setFont(curFont);
229        early110LibVersion.setText("v110");
230        early110LibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
231
232        earlyLateLibVersion = new Button(earlyLibVersionGroup, SWT.RADIO);
233        earlyLateLibVersion.setFont(curFont);
234        earlyLateLibVersion.setText("Latest");
235        earlyLateLibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
236
237        org.eclipse.swt.widgets.Group lateLibVersionGroup = new org.eclipse.swt.widgets.Group(defaultLibVersionGroup, SWT.NONE);
238        lateLibVersionGroup.setLayout(new GridLayout(4, true));
239        lateLibVersionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
240        lateLibVersionGroup.setFont(curFont);
241        lateLibVersionGroup.setText("Default Late Lib Version");
242
243        lateLibVersion = new Button(lateLibVersionGroup, SWT.RADIO);
244        lateLibVersion.setFont(curFont);
245        lateLibVersion.setText("Earliest");
246        lateLibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
247
248        late18LibVersion = new Button(lateLibVersionGroup, SWT.RADIO);
249        late18LibVersion.setFont(curFont);
250        late18LibVersion.setText("v18");
251        late18LibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
252
253        late110LibVersion = new Button(lateLibVersionGroup, SWT.RADIO);
254        late110LibVersion.setFont(curFont);
255        late110LibVersion.setText("v110");
256        late110LibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
257
258        lateLateLibVersion = new Button(lateLibVersionGroup, SWT.RADIO);
259        lateLateLibVersion.setFont(curFont);
260        lateLateLibVersion.setText("Latest");
261        lateLateLibVersion.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
262
263        org.eclipse.swt.widgets.Group dataGroup = new org.eclipse.swt.widgets.Group(composite, SWT.NONE);
264        dataGroup.setLayout(new GridLayout(4, false));
265        dataGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
266        dataGroup.setFont(curFont);
267        dataGroup.setText("Data");
268
269        helpButton = new Button(dataGroup, SWT.PUSH);
270        helpButton.setImage(ViewProperties.getHelpIcon());
271        helpButton.setToolTipText("Help on Convert Enum");
272        helpButton.addSelectionListener(new SelectionAdapter() {
273            @Override
274            public void widgetSelected(SelectionEvent e) {
275                final String msg = "Convert enum data to strings. \n"
276                        + "For example, a dataset of an enum type of (R=0, G=, B=2) \n"
277                        + "has values of (0, 2, 2, 2, 1, 1). With conversion, the data values are \n"
278                        + "shown as (R, B, B, B, G, G).\n\n\n";
279
280                Tools.showInformation(getShell(), "Help", msg);
281            }
282        });
283
284        checkConvertEnum = new Button(dataGroup, SWT.CHECK);
285        checkConvertEnum.setFont(curFont);
286        checkConvertEnum.setText("Convert Enum");
287        checkConvertEnum.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, false));
288
289        checkShowRegRefValues = new Button(dataGroup, SWT.CHECK);
290        checkShowRegRefValues.setFont(curFont);
291        checkShowRegRefValues.setText("Show RegRef Values");
292        checkShowRegRefValues.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
293
294        org.eclipse.swt.widgets.Group displayIndexingGroup = new org.eclipse.swt.widgets.Group(composite, SWT.NONE);
295        displayIndexingGroup.setLayout(new GridLayout());
296        displayIndexingGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
297        displayIndexingGroup.setFont(curFont);
298        displayIndexingGroup.setText("Display Indexing Options");
299
300        org.eclipse.swt.widgets.Group indexingTypeGroup = new org.eclipse.swt.widgets.Group(displayIndexingGroup, SWT.NONE);
301        indexingTypeGroup.setLayout(new GridLayout(2, true));
302        indexingTypeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
303        indexingTypeGroup.setFont(curFont);
304        indexingTypeGroup.setText("Indexing Type");
305
306        checkIndexName = new Button(indexingTypeGroup, SWT.RADIO);
307        checkIndexName.setFont(curFont);
308        checkIndexName.setText("By Name");
309        checkIndexName.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
310
311        checkIndexCreateOrder = new Button(indexingTypeGroup, SWT.RADIO);
312        checkIndexCreateOrder.setFont(curFont);
313        checkIndexCreateOrder.setText("By Creation Order");
314        checkIndexCreateOrder.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
315
316
317        org.eclipse.swt.widgets.Group indexingOrderGroup = new org.eclipse.swt.widgets.Group(displayIndexingGroup, SWT.NONE);
318        indexingOrderGroup.setLayout(new GridLayout(3, true));
319        indexingOrderGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
320        indexingOrderGroup.setFont(curFont);
321        indexingOrderGroup.setText("Indexing Order");
322
323        checkIncOrder = new Button(indexingOrderGroup, SWT.RADIO);
324        checkIncOrder.setFont(curFont);
325        checkIncOrder.setText("Increments");
326        checkIncOrder.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
327
328        checkDecOrder = new Button(indexingOrderGroup, SWT.RADIO);
329        checkDecOrder.setFont(curFont);
330        checkDecOrder.setText("Decrements");
331        checkDecOrder.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
332
333        checkNativeOrder = new Button(indexingOrderGroup, SWT.RADIO);
334        checkNativeOrder.setFont(curFont);
335        checkNativeOrder.setText("Native");
336        checkNativeOrder.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false));
337
338        load();
339        return composite;
340    }
341}