1 /* 2 * Copyright (c) 2003-2008 by Cosylab d. d. 3 * 4 * This file is part of CosyBeans-Common. 5 * 6 * CosyBeans-Common is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * CosyBeans-Common is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with CosyBeans-Common. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package com.cosylab.gui.components.range2; 21 22 /** 23 * Implementation of <code>RangedValuePolicy</code> that resizes the range 24 * based on the value parameter. 25 * 26 * <p> 27 * Whenever the value is set below minimum, minimum will be changed to the the 28 * value, decreased by factor (maximum - minimum). Same rule applies for 29 * maximum. 30 * </p> 31 * This policy is value dominant i.e., bounds will be adjusted to ensure that 32 * value is always valid. If either bound is set incorrectly, it will be 33 * adjusted to conform with this condition. 34 * <p> 35 * Rule for adjusting bounds is as follows. Whenever value is either below 36 * minimum ore above maximum, the corresponding bound will be adjusted using 37 * value - range * factor or value + range * factor for minimum and maximum 38 * respectively, where range is maximum - minimum. 39 * 40 * 41 * @author <a href="mailto:ales.pucelj@cosylab.com">Ales Pucelj</a> 42 * @version $id$ 43 */ 44 public class RescalingValuePolicy extends RangedValuePolicy 45 { 46 private double rescaleFactor; 47 48 /** 49 * Default constructor for RescalingValuePolicy. Initializes rescaling 50 * factor to 0.25. 51 */ 52 public RescalingValuePolicy() 53 { 54 this(0.25); 55 } 56 57 /** 58 * Constructor for RescalingValuePolicy. Allows custom rescaling factor. 59 * 60 * @param factor by which the range will be resized. 61 */ 62 public RescalingValuePolicy(double factor) 63 { 64 super(); 65 setFactor(factor); 66 } 67 68 /** 69 * Adjusts bounds as specified in class JavaDoc. 70 * 71 * @param params RangedValueHolder 72 * 73 * @see com.cosylab.gui.components.range.RangedValuePolicy#validate(RangedValueHolder) 74 */ 75 public RangedValue validate(RangedValue params) 76 { 77 double value = params.getValue(); 78 double range = params.getMaximum() - params.getMinimum(); 79 80 if(value < params.getMinimum()) { 81 params = params.deriveWithMin(value - range * getFactor()); 82 83 return validatePeerPolicy(params); 84 } 85 86 if(value > params.getMaximum()) { 87 params = params.deriveWithMax(value + range * getFactor()); 88 89 return validatePeerPolicy(params); 90 } 91 92 return validatePeerPolicy(params); 93 } 94 95 /** 96 * Returns rescaling factor. 97 * 98 * @return factor. 99 */ 100 public double getFactor() 101 { 102 return rescaleFactor; 103 } 104 105 /** 106 * Sets new rescaling factor. Factor set will not be less that 0. 107 * 108 * @param factor new rescaling factor. 109 */ 110 public void setFactor(double factor) 111 { 112 rescaleFactor = Math.max(0.0, factor); 113 } 114 } 115 116 /* __oOo__ */