net.tourbook.ui.tourChart.SlideoutTourChartMarker.java Source code

Java tutorial

Introduction

Here is the source code for net.tourbook.ui.tourChart.SlideoutTourChartMarker.java

Source

/*******************************************************************************
 * Copyright (C) 2005, 2017 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.tourChart;

import net.tourbook.Messages;
import net.tourbook.application.TourbookPlugin;
import net.tourbook.common.UI;
import net.tourbook.common.color.ColorSelectorExtended;
import net.tourbook.common.color.IColorSelectorListener;
import net.tourbook.common.tooltip.ToolbarSlideout;
import net.tourbook.data.TourMarker;
import net.tourbook.preferences.ITourbookPreferences;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
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.graphics.RGB;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.ToolBar;

/**
 * Tour chart marker properties slideout.
 */
public class SlideoutTourChartMarker extends ToolbarSlideout implements IColorSelectorListener {

    private final IPreferenceStore _prefStore = TourbookPlugin.getPrefStore();

    private SelectionAdapter _defaultSelectionAdapter;
    private MouseWheelListener _defaultMouseWheelListener;
    private IPropertyChangeListener _defaultPropertyChangeListener;
    private FocusListener _keepOpenListener;

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

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

        _defaultPropertyChangeListener = new IPropertyChangeListener() {
            @Override
            public void propertyChange(final PropertyChangeEvent event) {
                onChangeUI();
            }
        };

        _keepOpenListener = new FocusListener() {

            @Override
            public void focusGained(final FocusEvent e) {

                /*
                 * This will fix the problem that when the list of a combobox is displayed, then the
                 * slideout will disappear :-(((
                 */
                setIsAnotherDialogOpened(true);
            }

            @Override
            public void focusLost(final FocusEvent e) {
                setIsAnotherDialogOpened(false);
            }
        };
    }

    private PixelConverter _pc;

    private Action _actionRestoreDefaults;

    /*
     * UI controls
     */
    private TourChart _tourChart;

    private Button _chkDrawMarkerWithDefaultColor;
    private Button _chkShowAbsoluteValues;
    private Button _chkShowHiddenMarker;
    private Button _chkShowLabelTempPosition;
    private Button _chkShowMarkerLabel;
    private Button _chkShowMarkerPoint;
    private Button _chkShowMarkerTooltip;
    private Button _chkShowOnlyWithDescription;

    /**
     * Label temporary position, this position is not saved in the marker.
     */
    private Combo _comboLabelTempPosition;
    private Combo _comboTooltipPosition;

    private ColorSelectorExtended _colorDefaultMarker;
    private ColorSelectorExtended _colorDeviceMarker;
    private ColorSelectorExtended _colorHiddenMarker;

    private Label _lblLabelOffset;
    private Label _lblMarkerPointSize;

    private Spinner _spinHoverSize;
    private Spinner _spinLabelOffset;
    private Spinner _spinMarkerPointSize;

    public SlideoutTourChartMarker(final Control ownerControl, final ToolBar toolBar, final IDialogSettings state,
            final TourChart tourChart) {

        super(ownerControl, toolBar);

        _tourChart = tourChart;
    }

    @Override
    public void colorDialogOpened(final boolean isDialogOpened) {

        setIsAnotherDialogOpened(isDialogOpened);
    }

    private void createActions() {

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

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

    @Override
    protected Composite createToolTipContentArea(final Composite parent) {

        createActions();

        final Composite ui = createUI(parent);

        fillUI();
        restoreState();
        enableControls();

        return ui;
    }

    private Composite createUI(final Composite parent) {

        _pc = new PixelConverter(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().applyTo(container);
            //         container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
            {
                createUI_10_Header(container);
                createUI_20_Properties(container);
                createUI_50_TempPosition(container);
                createUI_90_Bottom(container);

            }
        }

        return shellContainer;
    }

    private void createUI_10_Header(final Composite parent) {

        final Composite container = new Composite(parent, SWT.NONE);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(container);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(container);
        {
            {
                /*
                 * Label: Slideout title
                 */
                final Label label = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults().applyTo(label);
                label.setText(Messages.Slideout_ChartMarkerOptions_Label_Title);
                label.setFont(JFaceResources.getBannerFont());
            }
            {
                final ToolBar toolbar = new ToolBar(container, 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_Properties(final Composite parent) {

        final Composite container = new Composite(parent, SWT.NONE);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(container);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(container);
        //      container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
        {
            {
                final Composite ttContainer = new Composite(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .grab(true, false).span(2, 1).applyTo(ttContainer);
                GridLayoutFactory.fillDefaults().numColumns(2).applyTo(ttContainer);
                {
                    {
                        /*
                         * Show marker tooltip
                         */
                        _chkShowMarkerTooltip = new Button(ttContainer, SWT.CHECK);
                        GridDataFactory.fillDefaults()//
                                .applyTo(_chkShowMarkerTooltip);
                        _chkShowMarkerTooltip.setText(//
                                Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowMarkerTooltip);
                        _chkShowMarkerTooltip.addSelectionListener(_defaultSelectionAdapter);
                    }
                    {
                        /*
                         * Combo: tooltip position
                         */
                        _comboTooltipPosition = new Combo(ttContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
                        GridDataFactory.fillDefaults()//
                                .grab(true, false).align(SWT.END, SWT.FILL).applyTo(_comboTooltipPosition);
                        _comboTooltipPosition.setVisibleItemCount(20);
                        _comboTooltipPosition.setToolTipText(//
                                Messages.Slideout_ChartMarkerOptions_Combo_TooltipPosition_Tooltip);
                        _comboTooltipPosition.addSelectionListener(_defaultSelectionAdapter);
                        _comboTooltipPosition.addFocusListener(_keepOpenListener);
                    }
                    {
                        /*
                         * Show relative/absolute values
                         */
                        _chkShowAbsoluteValues = new Button(ttContainer, SWT.CHECK);
                        GridDataFactory.fillDefaults()//
                                .span(2, 1).indent(_pc.convertWidthInCharsToPixels(3), 0)
                                .applyTo(_chkShowAbsoluteValues);
                        _chkShowAbsoluteValues.setText(//
                                Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowAbsoluteValues);
                        _chkShowAbsoluteValues.setToolTipText(//
                                Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowAbsoluteValues_Tooltip);
                        _chkShowAbsoluteValues.addSelectionListener(_defaultSelectionAdapter);
                    }
                }
            }

            {
                /*
                 * Show labels
                 */
                // show label
                _chkShowMarkerLabel = new Button(container, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .span(2, 1).applyTo(_chkShowMarkerLabel);
                _chkShowMarkerLabel.setText(Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowMarker);
                _chkShowMarkerLabel.addSelectionListener(_defaultSelectionAdapter);
            }

            {
                /*
                 * Show marker point
                 */
                _chkShowMarkerPoint = new Button(container, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .span(2, 1).applyTo(_chkShowMarkerPoint);
                _chkShowMarkerPoint.setText(Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowMarkerPoint);
                _chkShowMarkerPoint.addSelectionListener(_defaultSelectionAdapter);
            }

            {
                /*
                 * Show hidden marker
                 */
                _chkShowHiddenMarker = new Button(container, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .span(2, 1).applyTo(_chkShowHiddenMarker);
                _chkShowHiddenMarker.setText(Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowHiddenMarker);
                _chkShowHiddenMarker.addSelectionListener(_defaultSelectionAdapter);
            }

            {
                /*
                 * Show hidden marker
                 */
                _chkShowOnlyWithDescription = new Button(container, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .span(2, 1).applyTo(_chkShowOnlyWithDescription);
                _chkShowOnlyWithDescription
                        .setText(Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowOnlyWithDescription);
                _chkShowOnlyWithDescription.addSelectionListener(_defaultSelectionAdapter);
            }

            {
                /*
                 * Draw marker with default color
                 */
                _chkDrawMarkerWithDefaultColor = new Button(container, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .span(2, 1).applyTo(_chkDrawMarkerWithDefaultColor);
                _chkDrawMarkerWithDefaultColor.setText(//
                        Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowMarkerWithDefaultColor);
                _chkDrawMarkerWithDefaultColor.setToolTipText(//
                        Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowMarkerWithDefaultColor_Tooltip);
                _chkDrawMarkerWithDefaultColor.addSelectionListener(_defaultSelectionAdapter);
            }
        }
    }

    private void createUI_50_TempPosition(final Composite parent) {

        {
            /*
             * Temp position
             */
            final Composite tempContainer = new Composite(parent, SWT.NONE);
            GridDataFactory.fillDefaults()//
                    .grab(true, false).span(2, 1).applyTo(tempContainer);
            GridLayoutFactory.fillDefaults().numColumns(1).applyTo(tempContainer);
            //         tempContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
            {
                // show temp position
                _chkShowLabelTempPosition = new Button(tempContainer, SWT.CHECK);
                GridDataFactory.fillDefaults()//
                        .applyTo(_chkShowLabelTempPosition);
                _chkShowLabelTempPosition.setText(Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowTempPosition);
                _chkShowLabelTempPosition.setToolTipText(//
                        Messages.Slideout_ChartMarkerOptions_Checkbox_IsShowTempPosition_Tooltip);
                _chkShowLabelTempPosition.addSelectionListener(_defaultSelectionAdapter);

                {
                    /*
                     * Combo: temp position
                     */
                    _comboLabelTempPosition = new Combo(tempContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
                    GridDataFactory.fillDefaults()//
                            .indent(_pc.convertWidthInCharsToPixels(3), 0).applyTo(_comboLabelTempPosition);
                    _comboLabelTempPosition.setVisibleItemCount(20);
                    _comboLabelTempPosition.addSelectionListener(_defaultSelectionAdapter);
                    _comboLabelTempPosition.addFocusListener(_keepOpenListener);
                }
            }
        }
    }

    private void createUI_90_Bottom(final Composite parent) {

        final Composite container = new Composite(parent, SWT.NONE);
        GridDataFactory.fillDefaults()//
                .grab(true, false).applyTo(container);
        GridLayoutFactory.fillDefaults()//
                .numColumns(2).spacing(_pc.convertWidthInCharsToPixels(4), 0).applyTo(container);
        {
            createUI_92_Sizes(container);
            createUI_94_Colors(container);
        }
    }

    private void createUI_92_Sizes(final Composite parent) {

        final Composite container = new Composite(parent, SWT.NONE);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(container);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(container);
        {
            {
                /*
                 * Label offset
                 */

                // Label
                _lblLabelOffset = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(_lblLabelOffset);
                _lblLabelOffset.setText(Messages.Slideout_ChartMarkerOptions_Label_Offset);
                _lblLabelOffset.setToolTipText(Messages.Slideout_ChartMarkerOptions_Label_Offset_Tooltip);

                // Spinner
                _spinLabelOffset = new Spinner(container, SWT.BORDER);
                _spinLabelOffset.setMinimum(-99);
                _spinLabelOffset.setMaximum(100);
                _spinLabelOffset.setPageIncrement(5);
                _spinLabelOffset.addSelectionListener(_defaultSelectionAdapter);
                _spinLabelOffset.addMouseWheelListener(_defaultMouseWheelListener);
            }

            {
                /*
                 * Marker point size
                 */

                // Label
                _lblMarkerPointSize = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(_lblMarkerPointSize);
                _lblMarkerPointSize.setText(Messages.Slideout_ChartMarkerOptions_Label_MarkerSize);
                _lblMarkerPointSize.setToolTipText(Messages.Slideout_ChartMarkerOptions_Label_MarkerSize_Tooltip);

                // Spinner
                _spinMarkerPointSize = new Spinner(container, SWT.BORDER);
                _spinMarkerPointSize.setMinimum(0);
                _spinMarkerPointSize.setMaximum(100);
                _spinMarkerPointSize.setPageIncrement(5);
                _spinMarkerPointSize.addSelectionListener(_defaultSelectionAdapter);
                _spinMarkerPointSize.addMouseWheelListener(_defaultMouseWheelListener);
            }

            {
                /*
                 * Hover size
                 */

                // Label
                final Label label = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(label);
                label.setText(Messages.Slideout_ChartMarkerOptions_Label_HoverSize);
                label.setToolTipText(Messages.Slideout_ChartMarkerOptions_Label_HoverSize_Tooltip);

                // Spinner
                _spinHoverSize = new Spinner(container, SWT.BORDER);
                _spinHoverSize.setMinimum(0);
                _spinHoverSize.setMaximum(100);
                _spinHoverSize.setPageIncrement(5);
                _spinHoverSize.addSelectionListener(_defaultSelectionAdapter);
                _spinHoverSize.addMouseWheelListener(_defaultMouseWheelListener);
            }
        }
    }

    private void createUI_94_Colors(final Composite parent) {

        final Composite container = new Composite(parent, SWT.NONE);
        GridDataFactory.fillDefaults()//
                .grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(container);
        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(container);
        //      container.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
        {
            /*
             * Default color
             */
            {
                // Label
                final Label label = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(label);
                label.setText(Messages.Slideout_ChartMarkerOptions_Label_MarkerColor);

                // Color selector
                _colorDefaultMarker = new ColorSelectorExtended(container);
                GridDataFactory.swtDefaults()//
                        .grab(false, true).align(SWT.BEGINNING, SWT.BEGINNING)
                        .applyTo(_colorDefaultMarker.getButton());

                _colorDefaultMarker.addOpenListener(this);
                _colorDefaultMarker.addListener(_defaultPropertyChangeListener);
            }

            /*
             * Device marker color
             */
            {
                // Label
                final Label label = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(label);
                label.setText(Messages.Slideout_ChartMarkerOptions_Label_DeviceMarkerColor);
                label.setToolTipText(Messages.Slideout_ChartMarkerOptions_Label_DeviceMarkerColor_Tooltip);

                // Color selector
                _colorDeviceMarker = new ColorSelectorExtended(container);
                GridDataFactory.swtDefaults()//
                        .grab(false, true).align(SWT.BEGINNING, SWT.BEGINNING)
                        .applyTo(_colorDeviceMarker.getButton());

                _colorDeviceMarker.addOpenListener(this);
                _colorDeviceMarker.addListener(_defaultPropertyChangeListener);
            }

            /*
             * Hidden marker color
             */
            {
                // Label
                final Label label = new Label(container, SWT.NONE);
                GridDataFactory.fillDefaults()//
                        .align(SWT.FILL, SWT.CENTER).applyTo(label);
                label.setText(Messages.Slideout_ChartMarkerOptions_Label_HiddenMarkerColor);
                label.setToolTipText(Messages.Slideout_ChartMarkerOptions_Label_HiddenMarkerColor_Tooltip);

                // Color selector
                _colorHiddenMarker = new ColorSelectorExtended(container);
                GridDataFactory.swtDefaults()//
                        .grab(false, true).align(SWT.BEGINNING, SWT.BEGINNING)
                        .applyTo(_colorHiddenMarker.getButton());

                _colorHiddenMarker.addOpenListener(this);
                _colorHiddenMarker.addListener(_defaultPropertyChangeListener);
            }
        }
    }

    private void enableControls() {

        final boolean isShowTempPosition = _chkShowLabelTempPosition.getSelection();
        final boolean isLabelVisible = _chkShowMarkerLabel.getSelection();
        final boolean isMarkerPointVisible = _chkShowMarkerPoint.getSelection();
        final boolean isTooltipVisible = _chkShowMarkerTooltip.getSelection();

        final boolean isMarkerVisible = isLabelVisible || isMarkerPointVisible;// || isImageVisible;
        final boolean isMultipleTours = _tourChart.getTourData().isMultipleTours();

        _comboTooltipPosition.setEnabled(isTooltipVisible);
        _chkShowAbsoluteValues.setEnabled(isTooltipVisible && isMultipleTours);

        _chkShowLabelTempPosition.setEnabled(isLabelVisible);
        _comboLabelTempPosition.setEnabled(isLabelVisible && isShowTempPosition);

        _chkShowHiddenMarker.setEnabled(isMarkerVisible);
        _chkShowOnlyWithDescription.setEnabled(isMarkerVisible);
        _chkDrawMarkerWithDefaultColor.setEnabled(isMarkerVisible);

        _lblLabelOffset.setEnabled(isLabelVisible);
        _spinLabelOffset.setEnabled(isLabelVisible);

        _lblMarkerPointSize.setEnabled(isMarkerPointVisible);
        _spinMarkerPointSize.setEnabled(isMarkerPointVisible);
    }

    private void fillUI() {

        /*
         * Fill position combos
         */
        for (final String position : TourMarker.LABEL_POSITIONS) {
            _comboLabelTempPosition.add(position);
        }

        for (final String position : ChartMarkerToolTip.TOOLTIP_POSITIONS) {
            _comboTooltipPosition.add(position);
        }
    }

    private void onChangeUI() {

        final TourChartConfiguration tcc = _tourChart.getTourChartConfig();

        final boolean isDrawMarkerWithDefaultColor = _chkDrawMarkerWithDefaultColor.getSelection();
        final boolean isShowAbsoluteValues = _chkShowAbsoluteValues.getSelection();
        final boolean isShowHiddenMarker = _chkShowHiddenMarker.getSelection();
        final boolean isShowLabelTempPos = _chkShowLabelTempPosition.getSelection();
        final boolean isShowMarkerLabel = _chkShowMarkerLabel.getSelection();
        final boolean isShowMarkerPoint = _chkShowMarkerPoint.getSelection();
        final boolean isShowMarkerTooltip = _chkShowMarkerTooltip.getSelection();
        final boolean isShowOnlyWithDescription = _chkShowOnlyWithDescription.getSelection();

        final int hoverSize = _spinHoverSize.getSelection();
        final int labelOffset = _spinLabelOffset.getSelection();
        final int markerPointSize = _spinMarkerPointSize.getSelection();
        final int tempPosition = _comboLabelTempPosition.getSelectionIndex();
        final int ttPosition = _comboTooltipPosition.getSelectionIndex();

        final RGB defaultColor = _colorDefaultMarker.getColorValue();
        final RGB deviceColor = _colorDeviceMarker.getColorValue();
        final RGB hiddenColor = _colorHiddenMarker.getColorValue();

        /*
         * Update pref store
         */
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_HOVER_SIZE, hoverSize);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_LABEL_OFFSET, labelOffset);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_LABEL_TEMP_POSITION, tempPosition);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_POINT_SIZE, markerPointSize);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_TOOLTIP_POSITION, ttPosition);

        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_DRAW_WITH_DEFAULT_COLOR,
                isDrawMarkerWithDefaultColor);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_ABSOLUTE_VALUES, isShowAbsoluteValues);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_HIDDEN_MARKER, isShowHiddenMarker);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_LABEL_TEMP_POSITION, isShowLabelTempPos);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_LABEL, isShowMarkerLabel);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_POINT, isShowMarkerPoint);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_TOOLTIP, isShowMarkerTooltip);
        _prefStore.setValue(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_ONLY_WITH_DESCRIPTION,
                isShowOnlyWithDescription);

        PreferenceConverter.setValue(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_DEFAULT, defaultColor);
        PreferenceConverter.setValue(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_DEVICE, deviceColor);
        PreferenceConverter.setValue(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_HIDDEN, hiddenColor);

        /*
         * Update chart config
         */
        tcc.isDrawMarkerWithDefaultColor = isDrawMarkerWithDefaultColor;
        tcc.isShowAbsoluteValues = isShowAbsoluteValues;
        tcc.isShowHiddenMarker = isShowHiddenMarker;
        tcc.isShowLabelTempPos = isShowLabelTempPos;
        tcc.isShowMarkerLabel = isShowMarkerLabel;
        tcc.isShowMarkerPoint = isShowMarkerPoint;
        tcc.isShowMarkerTooltip = isShowMarkerTooltip;
        tcc.isShowOnlyWithDescription = isShowOnlyWithDescription;

        tcc.markerHoverSize = hoverSize;
        tcc.markerLabelOffset = labelOffset;
        tcc.markerLabelTempPos = tempPosition;
        tcc.markerPointSize = markerPointSize;
        tcc.markerTooltipPosition = ttPosition;

        tcc.markerColorDefault = defaultColor;
        tcc.markerColorDevice = deviceColor;
        tcc.markerColorHidden = hiddenColor;

        // update chart with new settings
        _tourChart.updateUI_MarkerLayer();

        enableControls();

        // notify pref listener
        TourbookPlugin.getPrefStore().setValue(ITourbookPreferences.GRAPH_MARKER_IS_MODIFIED, Math.random());
    }

    private void resetToDefaults() {

        /*
         * Update UI with defaults from pref store
         */

        _chkDrawMarkerWithDefaultColor.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_DRAW_WITH_DEFAULT_COLOR));
        _chkShowAbsoluteValues.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_ABSOLUTE_VALUES));
        _chkShowHiddenMarker.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_HIDDEN_MARKER));
        _chkShowLabelTempPosition.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_LABEL_TEMP_POSITION));
        _chkShowMarkerLabel.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_LABEL));
        _chkShowMarkerPoint.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_POINT));
        _chkShowMarkerTooltip.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_MARKER_TOOLTIP));
        _chkShowOnlyWithDescription.setSelection(//
                _prefStore.getDefaultBoolean(ITourbookPreferences.GRAPH_MARKER_IS_SHOW_ONLY_WITH_DESCRIPTION));

        _comboLabelTempPosition.select(//
                _prefStore.getDefaultInt(ITourbookPreferences.GRAPH_MARKER_LABEL_TEMP_POSITION));
        _comboTooltipPosition.select(//
                _prefStore.getDefaultInt(ITourbookPreferences.GRAPH_MARKER_TOOLTIP_POSITION));

        _spinHoverSize.setSelection(//
                _prefStore.getDefaultInt(ITourbookPreferences.GRAPH_MARKER_HOVER_SIZE));
        _spinMarkerPointSize.setSelection(//
                _prefStore.getDefaultInt(ITourbookPreferences.GRAPH_MARKER_POINT_SIZE));
        _spinLabelOffset.setSelection(//
                _prefStore.getDefaultInt(ITourbookPreferences.GRAPH_MARKER_LABEL_OFFSET));

        _colorDefaultMarker.setColorValue(//
                PreferenceConverter.getColor(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_DEFAULT));
        _colorDeviceMarker.setColorValue(//
                PreferenceConverter.getDefaultColor(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_DEVICE));
        _colorHiddenMarker.setColorValue(//
                PreferenceConverter.getDefaultColor(_prefStore, ITourbookPreferences.GRAPH_MARKER_COLOR_HIDDEN));

        onChangeUI();
    }

    private void restoreState() {

        final TourChartConfiguration tcc = _tourChart.getTourChartConfig();

        final int markerTooltipPosition = tcc.markerTooltipPosition < 0
                ? ChartMarkerToolTip.DEFAULT_TOOLTIP_POSITION
                : tcc.markerTooltipPosition;

        _chkDrawMarkerWithDefaultColor.setSelection(tcc.isDrawMarkerWithDefaultColor);
        _chkShowAbsoluteValues.setSelection(tcc.isShowAbsoluteValues);
        _chkShowHiddenMarker.setSelection(tcc.isShowHiddenMarker);
        _chkShowLabelTempPosition.setSelection(tcc.isShowLabelTempPos);
        _chkShowMarkerLabel.setSelection(tcc.isShowMarkerLabel);
        _chkShowMarkerPoint.setSelection(tcc.isShowMarkerPoint);
        _chkShowMarkerTooltip.setSelection(tcc.isShowMarkerTooltip);
        _chkShowOnlyWithDescription.setSelection(tcc.isShowOnlyWithDescription);

        _comboLabelTempPosition.select(tcc.markerLabelTempPos);
        _comboTooltipPosition.select(markerTooltipPosition);

        _colorDefaultMarker.setColorValue(tcc.markerColorDefault);
        _colorDeviceMarker.setColorValue(tcc.markerColorDevice);
        _colorHiddenMarker.setColorValue(tcc.markerColorHidden);

        _spinHoverSize.setSelection(tcc.markerHoverSize);
        _spinLabelOffset.setSelection(tcc.markerLabelOffset);
        _spinMarkerPointSize.setSelection(tcc.markerPointSize);
    }

}