Java tutorial
/******************************************************************************* * 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()); } }