/*
* Copyright (c) 2012, grossmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.examples.common.demo;
import org.jowidgets.api.convert.ILinearSliderConverterBuilder;
import org.jowidgets.api.convert.ISliderViewerConverter;
import org.jowidgets.api.convert.LinearSliderConverter;
import org.jowidgets.api.widgets.ISliderViewer;
import org.jowidgets.api.widgets.blueprint.ISliderViewerBluePrint;
import org.jowidgets.common.widgets.layout.MigLayoutDescriptor;
import org.jowidgets.tools.widgets.base.Frame;
import org.jowidgets.tools.widgets.blueprint.BPF;
import org.jowidgets.util.IObservableValue;
import org.jowidgets.util.IObservableValueListener;
final class DemoSliderViewerFrame extends Frame {
DemoSliderViewerFrame() {
super("Slider viewer demo");
setLayout(new MigLayoutDescriptor("wrap", "0[grow, 0::]0", "0[]10[]10[]10[]0"));
//slider1 - for demonstration purpose, see next sliders creation for more convenient way
final ISliderViewerBluePrint<Double> sliderBp1 = BPF.sliderViewer();
sliderBp1.setDefaultValue(0.5d);//left click with CTRL on slider to reset default value
sliderBp1.setMinimum(50).setMaximum(1000);
sliderBp1.setTickSpacing((1000 - 50) / 10);
sliderBp1.setConverter(new ISliderViewerConverter<Double>() {
@Override
public int getSliderValue(final int sliderMin, final int sliderMax, final Double modelValue) {
return (int) (sliderMin + ((sliderMax - sliderMin) * modelValue.doubleValue()));
}
@Override
public Double getModelValue(final int sliderMin, final int sliderMax, final int sliderValue) {
return Double.valueOf((1.0d / (sliderMax - sliderMin)) * (sliderValue - sliderMin));
}
});
final ISliderViewer<Double> slider1 = add(sliderBp1, "growx, w 0::");
slider1.getObservableValue().addValueListener(new ObservableValueListener(slider1));
//slider2 - uses default double slider with min=0.0d and max=1.0d
final ISliderViewerBluePrint<Double> sliderBp2 = BPF.sliderViewer();
sliderBp2.setDefaultValue(0.0d);
//use the linear converter explicit, see next slider how to use implicit
sliderBp2.setConverter(LinearSliderConverter.create());
final ISliderViewer<Double> slider2 = add(sliderBp2, "growx, w 0::");
slider2.getObservableValue().addValueListener(new ObservableValueListener(slider2));
//slider3 - uses double slider with min=12.0d and max=16.0d
final ISliderViewerBluePrint<Double> sliderBp3 = BPF.sliderViewerDouble(12.0d, 16.0d);
sliderBp3.setDefaultValue(14.0d);
final ISliderViewer<Double> slider3 = add(sliderBp3, "growx, w 0::");
slider3.getObservableValue().addValueListener(new ObservableValueListener(slider3));
//slider4 - uses double slider with min=0.1d and max=10.0d, pivot=(0.5, 1.0)
final ILinearSliderConverterBuilder<Double> converterBuilder = LinearSliderConverter.builder();
converterBuilder.setMinValue(0.1d);
converterBuilder.setMaxValue(10.0d);
converterBuilder.setPivotValue(1.0d);
final ISliderViewerBluePrint<Double> sliderBp4 = BPF.sliderViewer(converterBuilder.build());
sliderBp4.setDefaultValue(1.0d);
final ISliderViewer<Double> slider4 = add(sliderBp4, "growx, w 0::");
slider4.getObservableValue().addValueListener(new ObservableValueListener(slider4));
}
private static final class ObservableValueListener implements IObservableValueListener<Double> {
private final ISliderViewer<Double> slider;
private ObservableValueListener(final ISliderViewer<Double> slider) {
this.slider = slider;
}
@Override
public void changed(final IObservableValue<Double> observableValue, final Double value) {
//CHECKSTYLE:OFF
System.out.println("ViewerValue: " + value + " / SliderValue:" + slider.getSlider().getValue());
//CHECKSTYLE:ON
}
}
}