SpinnerNumberModel.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:5k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit.spinner;
  26. import com.sun.lwuit.events.DataChangedListener;
  27. import com.sun.lwuit.events.SelectionListener;
  28. import com.sun.lwuit.list.ListModel;
  29. import com.sun.lwuit.util.EventDispatcher;
  30. /**
  31.  * Represents a numeric model for the spinner
  32.  *
  33.  * @author Shai Almog
  34.  */
  35. class SpinnerNumberModel implements ListModel {
  36.     private EventDispatcher dataListener = new EventDispatcher();
  37.     private EventDispatcher selectionListener = new EventDispatcher();
  38.     private double min;
  39.     private double max;
  40.     private double currentValue;
  41.     private double step;
  42.     boolean realValues;
  43.     void setValue(Object value) {
  44.         if(value instanceof Integer) {
  45.             currentValue = ((Integer)value).doubleValue();
  46.         } else {
  47.             currentValue = ((Double)value).doubleValue();
  48.         }
  49.     }
  50.     Object getValue() {
  51.         if(realValues) {
  52.             return new Double(currentValue);
  53.         }
  54.         return new Integer((int)currentValue);
  55.     }
  56.     /**
  57.      * Indicates the range of the spinner
  58.      * 
  59.      * @param min lowest value allowed
  60.      * @param max maximum value allowed
  61.      * @param currentValue the starting value for the mode
  62.      * @param step the value by which we increment the entries in the model
  63.      */
  64.     public SpinnerNumberModel(int min, int max, int currentValue, int step) {
  65.         this.max = max;
  66.         this.min = min;
  67.         this.currentValue = currentValue;
  68.         this.step = step;
  69.     }
  70.     /**
  71.      * Indicates the range of the spinner
  72.      *
  73.      * @param min lowest value allowed
  74.      * @param max maximum value allowed
  75.      * @param currentValue the starting value for the mode
  76.      * @param step the value by which we increment the entries in the model
  77.      */
  78.     public SpinnerNumberModel(double min, double max, double currentValue, double step) {
  79.         this.max = max;
  80.         this.min = min;
  81.         this.currentValue = currentValue;
  82.         this.step = step;
  83.         realValues = true;
  84.     }
  85.     /**
  86.      * @inheritDoc
  87.      */
  88.     public Object getItemAt(int index) {
  89.         if(realValues) {
  90.             return new Double(min + step * index);
  91.         }
  92.         return new Integer((int)(min + step * index));
  93.     }
  94.     /**
  95.      * @inheritDoc
  96.      */
  97.     public int getSize() {
  98.         return (int)((max - min) / step);
  99.     }
  100.     /**
  101.      * @inheritDoc
  102.      */
  103.     public int getSelectedIndex() {
  104.         // equivalent to round
  105.         double d = Math.floor((max - currentValue) / step + 0.5);
  106.         int v = getSize() - (int)d;
  107.         return v;
  108.     }
  109.     /**
  110.      * @inheritDoc
  111.      */
  112.     public void setSelectedIndex(int index) {
  113.         int oldIndex = getSelectedIndex();
  114.         currentValue = min + index * step;
  115.         int newIndex = getSelectedIndex();
  116.         selectionListener.fireSelectionEvent(oldIndex, newIndex);
  117.     }
  118.     /**
  119.      * @inheritDoc
  120.      */
  121.     public void addDataChangedListener(DataChangedListener l) {
  122.         dataListener.addListener(l);
  123.     }
  124.     /**
  125.      * @inheritDoc
  126.      */
  127.     public void removeDataChangedListener(DataChangedListener l) {
  128.         dataListener.removeListener(l);
  129.     }
  130.     /**
  131.      * @inheritDoc
  132.      */
  133.     public void addSelectionListener(SelectionListener l) {
  134.         selectionListener.addListener(l);
  135.     }
  136.     /**
  137.      * @inheritDoc
  138.      */
  139.     public void removeSelectionListener(SelectionListener l) {
  140.         selectionListener.removeListener(l);
  141.     }
  142.     /**
  143.      * @inheritDoc
  144.      */
  145.     public void addItem(Object item) {
  146.     }
  147.     /**
  148.      * @inheritDoc
  149.      */
  150.     public void removeItem(int index) {
  151.     }
  152.     /**
  153.      * @return the min
  154.      */
  155.     public double getMin() {
  156.         return min;
  157.     }
  158.     /**
  159.      * @return the max
  160.      */
  161.     public double getMax() {
  162.         return max;
  163.     }
  164. }