/* * Copyright (c) 2010, skobbler GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the project 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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. * * Created on Apr 1, 2011 by Bea * Modified on $DateTime$ by $Author$ */ package org.openstreetmap.josm.plugins.mapdust.gui.component.slider; import java.awt.Font; import java.util.Dictionary; import java.util.Hashtable; import javax.swing.JLabel; import javax.swing.JSlider; import org.openstreetmap.josm.plugins.mapdust.gui.component.util.ComponentUtil; import org.openstreetmap.josm.plugins.mapdust.gui.value.MapdustRelevanceValue; import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustRelevance; /** * This class defines a customized relevance <code>JSlider</code> object. The * relevance slider is a slider with two thumbs, and with a lower and upper * value. * * @author Bea * @version $Revision$ */ public class RelevanceSlider extends JSlider { /** The serial version UID */ private static final long serialVersionUID = 3306976109770890966L; /** The selected lower value */ private int lowerValue; /** The selected upper value */ private int upperValue; /** * Builds a new <code>RelevanceSlider</code> with the default settings. By * default the <code>RelevanceSlider</code> values are from 0 (see * <code>MapdustRelevanceValue</code> LOW value) until 16 (see * <code>MapdustRelevanceValue</code> HIGH value). */ public RelevanceSlider() { super(MapdustRelevanceValue.LOW.getSliderValue(), MapdustRelevanceValue.HIGH.getSliderValue()); initSlider(MapdustRelevanceValue.LOW.getSliderValue(), MapdustRelevanceValue.HIGH.getSliderValue()); } /** * Initialize the <code>RelevanceSlider</code> object. * * @param lowerValue The value of the lower thumb * @param upperValue The value of the upper thumb */ private void initSlider(int lowerValue, int upperValue) { setOrientation(HORIZONTAL); setMajorTickSpacing(4); setLowerValue(lowerValue); setUpperValue(upperValue); setPaintTicks(true); setPaintLabels(true); setSnapToTicks(true); setFocusable(false); /* set label for the slider values */ Dictionary<Integer, JLabel> values = new Hashtable<>(); Font font = new Font("Times New Roman", Font.BOLD, 12); values.put(MapdustRelevanceValue.LOW.getSliderValue(), ComponentUtil .createJLabel(MapdustRelevance.LOW.getName(), font, null, null)); values.put(MapdustRelevanceValue.MID_LOW.getSliderValue(), ComponentUtil.createJLabel(MapdustRelevance.MID_LOW.getName(), font, null, null)); values.put(MapdustRelevanceValue.MEDIUM.getSliderValue(), ComponentUtil .createJLabel(MapdustRelevance.MEDIUM.getName(), font, null, null)); values.put(MapdustRelevanceValue.MID_HIGH.getSliderValue(), ComponentUtil.createJLabel(MapdustRelevance.MID_HIGH.getName(), font, null, null)); values.put(MapdustRelevanceValue.HIGH.getSliderValue(), ComponentUtil.createJLabel(MapdustRelevance.HIGH.getName(), font, null, null)); setLabelTable(values); } /** * Updates the UI of the slider. */ @Override public void updateUI() { setUI(new RelevanceSliderUI(this)); updateLabelUIs(); } /** * Returns the <code>RelevanceSliderUI</code> object * * @return ui */ @Override public RelevanceSliderUI getUI() { return (RelevanceSliderUI) ui; } /** * Returns the lower value * * @return the lowerValue */ public int getLowerValue() { return lowerValue; } /** * Sets the new lower value, and the range properties. * * @param lowerValue The new lower value */ public void setLowerValue(int lowerValue) { int oldValue = getLowerValue(); int oldExtent = getExtent(); int newExtent = oldExtent + oldValue - lowerValue; getModel().setRangeProperties(lowerValue, newExtent, getMinimum(), getMaximum(), true); this.lowerValue = lowerValue; } /** * Returns the upper value * * @return upperValue */ public int getUpperValue() { if (upperValue < lowerValue) { upperValue = lowerValue; } return upperValue; } /** * Sets the upper value, and the extent value. * * @param upperValue The new upper value. */ public void setUpperValue(int upperValue) { this.upperValue = upperValue; int newExtent = Math.min(Math.max(0, upperValue - getLowerValue()), getMaximum() - getLowerValue()); setExtent(newExtent); } /** * Sets the extent values of the slider, and also reset the value for the * upperValue field. */ @Override public void setExtent(int extent) { super.setExtent(extent); this.upperValue = getLowerValue()+getExtent(); } }