/*
 * android-spinnerwheel
 * https://github.com/ai212983/android-spinnerwheel
 *
 * based on
 *
 * Android Wheel Control.
 * https://code.google.com/p/android-wheel/
 *
 * Copyright 2011 Yuri Kanivets
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package antistatic.spinnerwheel.adapters;

import android.content.Context;

/**
 * Numeric Wheel adapter.
 */
public class NumericWheelAdapter extends AbstractWheelTextAdapter {
    
    /** The default min value */
    public static final int DEFAULT_MAX_VALUE = 9;

    /** The default max value */
    private static final int DEFAULT_MIN_VALUE = 0;
    
    // Values
    private int minValue;
    private int maxValue;
    
    // format
    private String format;
    
    /**
     * Constructor
     * @param context the current context
     */
    public NumericWheelAdapter(Context context) {
        this(context, DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
    }

    /**
     * Constructor
     * @param context the current context
     * @param minValue the spinnerwheel min value
     * @param maxValue the spinnerwheel max value
     */
    public NumericWheelAdapter(Context context, int minValue, int maxValue) {
        this(context, minValue, maxValue, null);
    }

    /**
     * Constructor
     * @param context the current context
     * @param minValue the spinnerwheel min value
     * @param maxValue the spinnerwheel max value
     * @param format the format string
     */
    public NumericWheelAdapter(Context context, int minValue, int maxValue, String format) {
        super(context);
        
        this.minValue = minValue;
        this.maxValue = maxValue;
        this.format = format;
    }

    public void setMinValue(int minValue) {
        this.minValue = minValue;
        notifyDataInvalidatedEvent();
    }

    public void setMaxValue(int maxValue) {
        this.maxValue = maxValue;
        notifyDataInvalidatedEvent();
    }

    @Override
    public CharSequence getItemText(int index) {
        if (index >= 0 && index < getItemsCount()) {
            int value = minValue + index;
            return format != null ? String.format(format, value) : Integer.toString(value);
        }
        return null;
    }

    @Override
    public int getItemsCount() {
        return maxValue - minValue + 1;
    }    
}

@@ -933,24 +933,99 @@
 pter %7B%0A    %0A
+%0A    public interface IntParamFunction%3CR%3E %7B%0A        R apply(int i);%0A    %7D%0A%0A
     /** The 
@@ -1288,27 +1288,49 @@
 ate 
+IntParamFunction%3C
 String
+%3E
  format
-;%0A    
+Function;%0A
 %0A   
@@ -1817,16 +1817,25 @@
 axValue,
+ (String)
  null);%0A
@@ -2132,16 +2132,22 @@
 axValue,
+ final
  String 
@@ -2152,24 +2152,455 @@
 g format) %7B%0A
+        this(context, minValue, maxValue, new IntParamFunction%3CString%3E() %7B%0A            @Override public String apply(int i) %7B%0A                if (format == null) %7B%0A                    return Integer.toString(i);%0A                %7D%0A                return String.format(format, i);%0A            %7D%0A        %7D);%0A    %7D%0A%0A    public NumericWheelAdapter(Context context, int minValue, int maxValue, IntParamFunction%3CString%3E formatFunction) %7B%0A
         supe
@@ -2615,17 +2615,9 @@
 t);%0A
-        
 %0A
+
     
@@ -2699,16 +2699,24 @@
 s.format
+Function
  = forma
@@ -2716,18 +2716,27 @@
 = format
+Function
 ;%0A
+%0A
     %7D%0A%0A 
@@ -2985,36 +2985,32 @@
 %7D%0A%0A    @Override
-%0A   
  public CharSequ
@@ -3159,16 +3159,24 @@
 n format
+Function
  != null
@@ -3178,38 +3178,37 @@
  null ? 
-String.format(format, 
+formatFunction.apply(
 value) :

add int->String function support instead of only format ( cuz String.format() is quite an inefficient method).