net.tourbook.ui.views.heartRateVariability.SlideoutHRVOptions.java Source code

Java tutorial

Introduction

Here is the source code for net.tourbook.ui.views.heartRateVariability.SlideoutHRVOptions.java

Source

/*******************************************************************************
 * Copyright (C) 2005, 2016 Wolfgang Schramm and Contributors
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation version 2 of the License.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
 *******************************************************************************/
package net.tourbook.ui.views.heartRateVariability;

import net.tourbook.Messages;
import net.tourbook.application.TourbookPlugin;
import net.tourbook.common.UI;
import net.tourbook.common.tooltip.ToolbarSlideout;
import net.tourbook.preferences.ITourbookPreferences;
import net.tourbook.ui.ChartOptions_Grid;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.ToolBar;

/**
 */
public class SlideoutHRVOptions extends ToolbarSlideout {

    private final IPreferenceStore _prefStore = TourbookPlugin.getPrefStore();

    private Action _actionRestoreDefaults;

    private ChartOptions_Grid _gridUI;

    private MouseWheelListener _defaultMouseWheelListener;
    private SelectionAdapter _defaultSelectionListener;

    private HeartRateVariabilityView _heartRateVariabilityView;

    /*
     * UI controls
     */
    private Button _chkFix2xErrors;

    private Label _lbl2xErrorTolerance;
    private Label _lbl2xErrorTolerance_Unit;
    private Label _lbl2xToleranceResult;
    private Label _lbl2xToleranceResult_Value;

    private Spinner _spinner2xErrorTolerance;

    public SlideoutHRVOptions(final Control ownerControl, final ToolBar toolBar, final String prefStoreGridPrefix,
            final HeartRateVariabilityView heartRateVariabilityView) {

        super(ownerControl, toolBar);

        _heartRateVariabilityView = heartRateVariabilityView;

        _gridUI = new ChartOptions_Grid(prefStoreGridPrefix);
    }

    private void createActions() {

        /*
         * Action: Restore default
         */
        _actionRestoreDefaults = new Action() {
            @Override
            public void run() {
                resetToDefaults();
            }
        };

        _actionRestoreDefaults.setToolTipText(Messages.App_Action_RestoreDefault_Tooltip);
        _actionRestoreDefaults.setImageDescriptor(//
                TourbookPlugin.getImageDescriptor(Messages.Image__App_RestoreDefault));
    }

    @Override
    protected Composite createToolTipContentArea(final Composite parent) {

        initUI(parent);
        createActions();

        final Composite ui = createUI(parent);

        restoreState();

        enableControls();

        updateUI();

        return ui;
    }

    private Composite createUI(final Composite parent) {

        final Composite shellContainer = new Composite(parent, SWT.NONE);
        GridLayoutFactory.swtDefaults().applyTo(shellContainer);
        {
            final Composite container = new Composite(shellContainer, SWT.NONE);
            GridDataFactory.fillDefaults().grab(true, false).applyTo(container);
            GridLayoutFactory.fillDefaults()//
                    .numColumns(2).applyTo(container);
            //         container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
            {
                createUI_10_Title(container);
                createUI_12_Actions(container);

                createUI_20_Options(container);

                _gridUI.createUI(container);
            }
        }

        return shellContainer;
    }

    private void createUI_10_Title(final Composite parent) {

        /*
         * Label: Slideout title
         */
        final Label label = new Label(parent, SWT.NONE);
        GridDataFactory.fillDefaults().applyTo(label);
        label.setText(Messages.Slideout_HVROptions_Label_Title);
        label.setFont(JFaceResources.getBannerFont());
    }

    private void createUI_12_Actions(final Composite parent) {

        final ToolBar toolbar = new ToolBar(parent, SWT.FLAT);
        GridDataFactory.fillDefaults()//
                .grab(true, false).align(SWT.END, SWT.BEGINNING).applyTo(toolbar);

        final ToolBarManager tbm = new ToolBarManager(toolbar);

        tbm.add(_actionRestoreDefaults);

        tbm.update(true);
    }

    private void createUI_20_Options(final Composite parent) {

        final Group group = new Group(parent, SWT.NONE);
        group.setText(Messages.Slideout_HVROptions_Group);
        GridDataFactory.fillDefaults()//
                .grab(true, false).span(2, 1).applyTo(group);
        GridLayoutFactory.swtDefaults().numColumns(3).applyTo(group);
        {
            {
                /*
                 * Show distance
                 */
                _chkFix2xErrors = new Button(group, SWT.CHECK);
                _chkFix2xErrors.setText(Messages.Slideout_HVROptions_Checkbox_2xValues);
                _chkFix2xErrors.setToolTipText(Messages.Slideout_HVROptions_Checkbox_2xValues_Tooltip);
                _chkFix2xErrors.addSelectionListener(_defaultSelectionListener);
                GridDataFactory.fillDefaults().span(3, 1).applyTo(_chkFix2xErrors);
            }

            {
                /*
                 * Label: 2x tolerance
                 */
                _lbl2xErrorTolerance = new Label(group, SWT.NONE);
                _lbl2xErrorTolerance.setText(Messages.Slideout_HVROptions_Label_2xTolerance);
                GridDataFactory.fillDefaults()//
                        .indent(16, 0).align(SWT.FILL, SWT.CENTER).applyTo(_lbl2xErrorTolerance);

                /*
                 * Spinner: 2x tolerance
                 */
                _spinner2xErrorTolerance = new Spinner(group, SWT.BORDER);
                _spinner2xErrorTolerance.setMinimum(0);
                _spinner2xErrorTolerance.setMaximum(1000);
                _spinner2xErrorTolerance.addMouseWheelListener(_defaultMouseWheelListener);
                _spinner2xErrorTolerance.addSelectionListener(_defaultSelectionListener);
                GridDataFactory.fillDefaults() //
                        .align(SWT.BEGINNING, SWT.FILL).applyTo(_spinner2xErrorTolerance);

                /*
                 * Label: ms
                 */
                _lbl2xErrorTolerance_Unit = new Label(group, SWT.NONE);
                _lbl2xErrorTolerance_Unit.setText(Messages.App_Unit_Milliseconds);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(_lbl2xErrorTolerance_Unit);
            }
            {
                /*
                 * Label: Correction result
                 */
                _lbl2xToleranceResult = new Label(group, SWT.NONE);
                _lbl2xToleranceResult.setText(Messages.Slideout_HVROptions_Label_2xToleranceResult);
                _lbl2xToleranceResult.setToolTipText(Messages.Slideout_HVROptions_Label_2xToleranceResult_Tooltip);
                GridDataFactory.fillDefaults()//
                        .indent(16, 0).align(SWT.FILL, SWT.CENTER).applyTo(_lbl2xToleranceResult);

                /*
                 * Label: Result values
                 */
                _lbl2xToleranceResult_Value = new Label(group, SWT.NONE);
                _lbl2xToleranceResult_Value
                        .setToolTipText(Messages.Slideout_HVROptions_Label_2xToleranceResult_Tooltip);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).grab(true, false).span(2, 1)
                        .applyTo(_lbl2xToleranceResult_Value);
            }
        }
    }

    private void enableControls() {

        final boolean isRemove2xValue = _chkFix2xErrors.getSelection();

        _lbl2xErrorTolerance.setEnabled(isRemove2xValue);
        _lbl2xErrorTolerance_Unit.setEnabled(isRemove2xValue);
        _spinner2xErrorTolerance.setEnabled(isRemove2xValue);

        _lbl2xToleranceResult.setEnabled(isRemove2xValue);
        _lbl2xToleranceResult_Value.setEnabled(isRemove2xValue);
    }

    /*
     * UI controls
     */
    private void initUI(final Composite parent) {

        _defaultSelectionListener = new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                onChangeUI();
            }
        };

        _defaultMouseWheelListener = new MouseWheelListener() {
            @Override
            public void mouseScrolled(final MouseEvent event) {
                net.tourbook.common.UI.adjustSpinnerValueOnMouseScroll(event);
                onChangeUI();
            }
        };
    }

    private void onChangeUI() {

        enableControls();

        // update chart async (which is done when a pref store value is modified) that the UI is updated immediately
        Display.getCurrent().asyncExec(new Runnable() {
            @Override
            public void run() {

                saveState();
                updateUI();
            }
        });
    }

    private void resetToDefaults() {

        _chkFix2xErrors.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.HRV_OPTIONS_IS_FIX_2X_ERROR));
        _spinner2xErrorTolerance.setSelection(//
                _prefStore.getDefaultInt(ITourbookPreferences.HRV_OPTIONS_2X_ERROR_TOLERANCE));

        _gridUI.resetToDefaults();
        _gridUI.saveState();

        onChangeUI();
    }

    private void restoreState() {

        _chkFix2xErrors.setSelection(_prefStore.getBoolean(ITourbookPreferences.HRV_OPTIONS_IS_FIX_2X_ERROR));
        _spinner2xErrorTolerance
                .setSelection(_prefStore.getInt(ITourbookPreferences.HRV_OPTIONS_2X_ERROR_TOLERANCE));

        _gridUI.restoreState();
    }

    private void saveState() {

        _prefStore.setValue(ITourbookPreferences.HRV_OPTIONS_IS_FIX_2X_ERROR, //
                _chkFix2xErrors.getSelection());
        _prefStore.setValue(ITourbookPreferences.HRV_OPTIONS_2X_ERROR_TOLERANCE, //
                _spinner2xErrorTolerance.getSelection());
    }

    private void updateUI() {

        _lbl2xToleranceResult_Value.setText(_heartRateVariabilityView.getFixed2xErrors_0() + UI.DASH_WITH_SPACE
                + _heartRateVariabilityView.getFixed2xErrors_1());
    }

}