mbtarranger.widgets.customslider.CustomSlider.java Source code

Java tutorial

Introduction

Here is the source code for mbtarranger.widgets.customslider.CustomSlider.java

Source

/*******************************************************************************
 * Copyright (c) 2015 ETAS GmbH.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * Dennis Eder (ETAS GmbH) - initial API and implementation and/or initial documentation
 *******************************************************************************/
package mbtarranger.widgets.customslider;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Slider;

public class CustomSlider extends Composite implements PropertyChangeListener {
    private DataBindingContext m_bindingContext;
    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
    private Slider slider;

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }

    @Override
    public void propertyChange(PropertyChangeEvent event) {
        propertyChangeSupport.firePropertyChange(event);
    }

    public CustomSlider(Composite parent, int style, boolean vertical) {
        super(parent, style);
        setLayout(new FillLayout(SWT.HORIZONTAL));
        if (vertical) {
            slider = new Slider(this, SWT.VERTICAL);
        } else {
            slider = new Slider(this, SWT.NONE);
        }
        slider.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                propertyChangeSupport.firePropertyChange("selection", null /*
                                                                           * TODO:
                                                                           * check
                                                                           * if
                                                                           * enough
                                                                           * to
                                                                           * always
                                                                           * fire
                                                                           */, slider.getSelection());

            }

            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
                propertyChangeSupport.firePropertyChange("selection", null /*
                                                                           * TODO:
                                                                           * check
                                                                           * if
                                                                           * enough
                                                                           * to
                                                                           * always
                                                                           * fire
                                                                           */, slider.getSelection());

            }
        });
        /** TODO: debug - has no effect, breakpoint never hit */
        slider.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseScrolled(MouseEvent e) {
                slider.setSelection(slider.getSelection() + e.count);
            }
        });
        m_bindingContext = initDataBindings();
    }

    public int getSelection() {
        return slider.getSelection();
    }

    public synchronized void setSelection(int selection) {
        int old = slider.getSelection();
        slider.setSelection(selection);
        propertyChangeSupport.firePropertyChange("selection", old, slider.getSelection());
    }

    protected DataBindingContext initDataBindings() {
        DataBindingContext bindingContext = new DataBindingContext();
        //
        IObservableValue thisObserveSizeObserveWidget = SWTObservables.observeSize(this);
        IObservableValue sliderObserveSizeObserveWidget = SWTObservables.observeSize(slider);
        bindingContext.bindValue(thisObserveSizeObserveWidget, sliderObserveSizeObserveWidget, null, null);
        //
        return bindingContext;
    }

    public synchronized int getMaximum() {
        return slider.getMaximum();
    }

    public synchronized int getMinimum() {
        return slider.getMinimum();
    }

    public synchronized void setMaximum(int max) {
        int old = slider.getMaximum();
        slider.setMaximum(max);
        propertyChangeSupport.firePropertyChange("maximum", old, slider.getMaximum());
    }

    public synchronized void setMinimum(int min) {
        int old = slider.getMinimum();
        slider.setMinimum(min);
        propertyChangeSupport.firePropertyChange("minimum", old, slider.getMinimum());
    }
}