Mercurial > projects > dwt-addons
view dwtx/draw2d/DefaultRangeModel.d @ 98:95307ad235d9
Added Draw2d code, still work in progress
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 03 Aug 2008 00:52:14 +0200 |
parents | |
children |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.draw2d.DefaultRangeModel; import dwt.dwthelper.utils; import dwtx.dwtxhelper.Bean; import tango.text.convert.Format; import dwtx.draw2d.RangeModel; /** * Generic implementation for a RangeModel. * * *<pre> * |<----extent--->| * ----|-----------|---------------|---------------|---- * min | max * value * </pre> */ public class DefaultRangeModel : RangeModel { /** * Listeners interested in the range model's property changes. */ protected PropertyChangeSupport propertyListeners; private int minimum = 0; private int maximum = 100; private int extent = 20; private int value = 0; public this(){ propertyListeners = new PropertyChangeSupport(this); } /** * Registers the given listener as a PropertyChangeListener. * * @param listener the listener to be added * @since 2.0 */ public void addPropertyChangeListener(PropertyChangeListener listener) { propertyListeners.addPropertyChangeListener(listener); } /** * Notifies any listening PropertyChangeListeners that the property with the given id has * changed. * * @param string the property name * @param oldValue the old value * @param newValue the new value * @since 2.0 */ protected void firePropertyChange(String string, int oldValue, int newValue) { propertyListeners.firePropertyChange(string, oldValue, newValue); } /** * @return the extent */ public int getExtent() { return extent; } /** * @return the maximum value */ public int getMaximum() { return maximum; } /** * @return the minimum value */ public int getMinimum() { return minimum; } /** * @return the current value */ public int getValue() { return value; } /** * @return whether the extent is between the minimum and maximum values */ public bool isEnabled() { return (getMaximum() - getMinimum()) > getExtent(); } /** * Removes the given PropertyChangeListener from the list of listeners. * * @param listener the listener to be removed */ public void removePropertyChangeListener(PropertyChangeListener listener) { propertyListeners.removePropertyChangeListener(listener); } /** * @see dwtx.draw2d.RangeModel#setAll(int, int, int) */ public void setAll(int min, int ext, int max) { int oldMin = minimum; int oldExtent = extent; int oldMax = maximum; maximum = max; minimum = min; extent = ext; if (oldMax !is max) firePropertyChange(PROPERTY_MAXIMUM, oldMax, max); if (oldExtent !is ext) firePropertyChange(PROPERTY_EXTENT, oldExtent, ext); if (oldMin !is min) firePropertyChange(PROPERTY_MINIMUM, oldMin, min); setValue(getValue()); } /** * Sets this RangeModel's extent and fires a property change if the given value is * different from the current extent. * * @param extent the new extent value */ public void setExtent(int extent) { if (this.extent is extent) return; int oldValue = this.extent; this.extent = extent; firePropertyChange(PROPERTY_EXTENT, oldValue, extent); setValue(getValue()); } /** * Sets this RangeModel's maximum value and fires a property change if the given value is * different from the current maximum value. * * @param maximum the new maximum value */ public void setMaximum(int maximum) { if (this.maximum is maximum) return; int oldValue = this.maximum; this.maximum = maximum; firePropertyChange(PROPERTY_MAXIMUM, oldValue, maximum); setValue(getValue()); } /** * Sets this RangeModel's minimum value and fires a property change if the given value is * different from the current minimum value. * * @param minimum the new minumum value */ public void setMinimum(int minimum) { if (this.minimum is minimum) return; int oldValue = this.minimum; this.minimum = minimum; firePropertyChange(PROPERTY_MINIMUM, oldValue, minimum); setValue(getValue()); } /** * Sets this RangeModel's current value. If the given value is greater than the maximum, * the maximum value is used. If the given value is less than the minimum, the minimum * value is used. If the adjusted value is different from the current value, a property * change is fired. * * @param value the new value */ public void setValue(int value) { value = Math.max(getMinimum(), Math.min(getMaximum() - getExtent(), value)); if (this.value is value) return; int oldValue = this.value; this.value = value; firePropertyChange(PROPERTY_VALUE, oldValue, value); } /** * @see java.lang.Object#toString() */ public String toString() { return Format( "{} ({}, {}, {}, {})", super.toString(), minimum, maximum //$NON-NLS-2$ //$NON-NLS-1$ , extent, value ); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ } }