From f702dfc372f6b2f39cbce1aace229778690352af Mon Sep 17 00:00:00 2001
From: Maxime Graulich <maxime.graulich@gmail.com>
Date: Wed, 9 Apr 2014 13:13:45 +0000
Subject: [PATCH] Android: add stepper

---
 .../src/org/geuz/onelab/ParameterNumber.java  | 17 +++++
 .../Android/src/org/geuz/onelab/Stepper.java  | 65 +++++++++++++++++++
 2 files changed, 82 insertions(+)
 create mode 100644 contrib/mobile/Android/src/org/geuz/onelab/Stepper.java

diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
index 7e85b1b2eb..379f2b1835 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
@@ -27,6 +27,7 @@ public class ParameterNumber extends Parameter{
 	private Spinner _spinner;
 	private CheckBox _checkbox;
 	private EditText _edittext;
+	private Stepper _stepper;
 	
 	public ParameterNumber(Context context, Gmsh gmsh, String name){
 		super(context, gmsh, name);
@@ -71,6 +72,12 @@ public class ParameterNumber extends Parameter{
 		{
 			_edittext.setText(""+Math.round(_value*Math.pow(10, nDecimal))/Math.pow(10, nDecimal));
 		}
+		else if(_stepper != null)
+		{
+			_stepper.setMaximum((int)Math.round(_max));
+			_stepper.setMinimum((int)Math.round(_min));
+			_stepper.setValue((int)Math.round(_value));
+		}
 	}
 	
 	public void setValue(double value) {
@@ -154,6 +161,8 @@ public class ParameterNumber extends Parameter{
 		// ...
 		if(nLabels < 1 && _step == 0)
 			_edittext = new EditText(_context);
+		else if(_step == 1)
+			_stepper = new Stepper(_context);
 		else if(nLabels < 1)
 			_bar = new SeekBar(_context);
 		this.update();
@@ -236,6 +245,14 @@ public class ParameterNumber extends Parameter{
 
 			});
 		}
+		else if(_stepper != null) {
+			paramLayout.addView(_stepper);
+			_stepper.setOnValueChangedListener(new Stepper.OnValueChangedListener() {
+				public void onValueChanged() {
+					setValue(_stepper.getValue());
+				}
+			});
+		}
 		return paramLayout;
 	}
 	private OnParameterChangedListener mListener;
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Stepper.java b/contrib/mobile/Android/src/org/geuz/onelab/Stepper.java
new file mode 100644
index 0000000000..afcdb6a761
--- /dev/null
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Stepper.java
@@ -0,0 +1,65 @@
+package org.geuz.onelab;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.Button;
+import android.widget.EditText;
+
+
+class Stepper extends LinearLayout{
+
+	private int _min, _max, _val;
+	private Button _incBtn, _decBtn;
+	private EditText _valTxt;
+	private OnValueChangedListener _listener;
+
+	public Stepper(Context context){
+		super(context);
+		_max = _min = _val = 0;
+		_incBtn = new Button(context);
+		_decBtn = new Button(context);
+		_valTxt = new EditText(context);
+		_incBtn.setText("+");
+		_decBtn.setText("-");
+		_valTxt.setText(Integer.toString(_val));
+		this.addView(_decBtn);
+		this.addView(_valTxt);
+		this.addView(_incBtn);
+		_incBtn.setOnClickListener(new OnClickListener() {
+			public void onClick(View v) {
+				inc();
+			}
+		});
+		_decBtn.setOnClickListener(new OnClickListener() {
+			public void onClick(View v) {
+				dec();
+			}
+		});
+	}
+
+	public interface OnValueChangedListener {
+		public void onValueChanged();
+	}
+
+
+	public void inc(){setValue(_val+1);}
+	public void dec(){setValue(_val-1);}
+
+	public void setOnValueChangedListener(OnValueChangedListener listener) {_listener = listener;}
+	public void setMaximum(int max){_max = max;}
+	public void setMinimum(int min){_min = min;}
+	public void setValue(int val){
+		if(_max > _min) {
+			if(val == _max) _incBtn.setEnabled(false);
+			else if(val == _min) _decBtn.setEnabled(false);
+			else {_incBtn.setEnabled(true); _decBtn.setEnabled(true);} 
+		}
+		_val = val;
+		_valTxt.setText(Integer.toString(_val));
+		if(_listener != null) _listener.onValueChanged();
+	}
+	public int getMaximum(){return _max;}
+	public int getMinimum(){return _min;}
+	public int getValue(){return _val;}
+}
-- 
GitLab