package it.angelic.soulissclient.views;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.NumberPicker;
import it.angelic.soulissclient.Constants;
/**
* serve a nascondere la complessita di un number picker che mostra float,
* ma si basa su int come appunto @link{NumberPicker}
* <p/>
* Created by shine@angelic.it on 19/04/2016.
*/
public class NumberPickerT6 extends NumberPicker {
private String[] dispVal;
private float increment;
private int max;
private int min;
private int model;
private float realVal;
public NumberPickerT6(Context context) {
super(context);
init();
}
public NumberPickerT6(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public NumberPickerT6(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/*
* GENERA i valori dello spinner da mostrare
* sono 100, uso una finestra di calcolo
* */
public int generateDisplayValues(float curVal) {
Log.i(Constants.Typicals.TAG, "generateDisplayValues, min=" + min + " max=" + max + " Typical" + Long.toHexString(model));
int selIdx = dispVal.length;
float winIdxIn;
float winIdxOut = curVal;
//finestra di selezione
winIdxIn = winIdxOut - (dispVal.length * increment);
//Float tempArray[] = new Float[100];
int pivotIdx = 51;
for (int t = pivotIdx; t < dispVal.length; t++) {
if (winIdxOut + increment > max)
break;//ho finito
winIdxOut += increment;
winIdxIn += increment;
selIdx--;
}//nel caso ideal usciamo a 50
while (winIdxIn < min) {
winIdxOut += increment;
winIdxIn += increment;
selIdx--;
}//impedisce sforamento
while (winIdxOut > max) {
winIdxOut -= increment;
//riduci array
dispVal = new String[dispVal.length - 1];
setMaxValue(dispVal.length - 1);
}
//a questo punto crea
for (int j = 0; j < dispVal.length; j++) {
dispVal[j] = String.format(java.util.Locale.US, "%.2f", winIdxIn);
winIdxIn += increment;
}
setDisplayedValues(dispVal);
return selIdx;
}
public float getIncrement() {
return increment;
}
public void setIncrement(float increment) {
this.increment = increment;
}
public int getModel() {
return model;
}
public void setModel(int model) {
this.model = model;
init();
}
public float getRealVal() {
return realVal;
}
public void setRealVal(float realVal) {
this.realVal = realVal;
int sel = generateDisplayValues(realVal);
setValue(sel);
}
private void init() {
setMinValue(0);
int WINDOW_SIZE = 100;
dispVal = new String[WINDOW_SIZE];
setMaxValue(WINDOW_SIZE - 1);
// float wkVal = curVal;
if (model == Constants.Typicals.Souliss_T68) {
min = 10;
max = 1500;
increment = 0.5f;
} else if (model == Constants.Typicals.Souliss_T67) {
min = 0;
max = 6500;
increment = 25f;
} else if (model == Constants.Typicals.Souliss_T66) {
min = 0;
max = 25;
increment = 0.25f;
} else if (model == Constants.Typicals.Souliss_T65) {
min = 0;
max = 400;
increment = 10f;
} else if (model == Constants.Typicals.Souliss_T64) {
min = 0;
max = 40;
increment = 0.2f;
} else if (model == Constants.Typicals.Souliss_T63) {
min = 0;
max = 100;
increment = 0.5f;
} else if (model == Constants.Typicals.Souliss_T62) {
min = -20;
max = +50;
increment = 0.5f;
} else if (model == Constants.Typicals.Souliss_T31) {
min = -20;
max = +200;
increment = 0.5f;
} else {//T61
min = -65519;
max = 65519;
increment = 1;
}
}
}