5 import java.text.DecimalFormat;
6 import java.util.ArrayList;
9 import android.app.Activity;
10 import android.app.AlertDialog;
11 import android.app.AlertDialog.Builder;
12 import android.app.Dialog;
13 import android.content.DialogInterface;
14 import android.text.Html;
15 import android.text.InputType;
16 import android.util.Log;
17 import android.view.View;
18 import android.widget.Button;
19 import android.widget.EditText;
20 import android.widget.LinearLayout;
21 import android.widget.SeekBar;
22 import android.widget.TableLayout;
23 import android.widget.TableRow;
24 import android.widget.TableRow.LayoutParams;
25 import android.widget.TextView;
26 import android.widget.Toast;
39 private Activity activity;
41 private List<Button> buttons;
42 private List<SeekBar> bars;
43 private List<TextView> labels;
47 private int mSweepIndex = -1;
50 this.activity = activity;
59 int np = p.getNumParams();
65 parent.removeAllViews();
67 buttons =
new ArrayList<Button>(np);
68 bars =
new ArrayList<SeekBar>(np);
69 labels =
new ArrayList<TextView>(np);
71 for (
int i = 0; i < np; i++) {
72 TableRow row =
new TableRow(activity);
73 row.setLayoutParams(
new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
76 TextView t =
new TextView(activity);
78 t.setLayoutParams(
new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
79 TableRow.LayoutParams.WRAP_CONTENT));
80 t.setPadding(0, 0, 4, 0);
85 SeekBar b =
new SeekBar(activity);
86 b.setLayoutParams(
new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
87 b.setPadding(10, 10, 10, 0);
96 Button btn =
new Button(activity);
97 btn.setOnClickListener(
new View.OnClickListener() {
98 public void onClick(View v) {
99 showParamValueSetDialog(buttons.indexOf(v));
107 parent.addView(row,
new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
109 }
catch (Exception e) {
110 Log.e(
"RBActivity",
"Failed init param bars", e);
114 addParamBarListeners();
118 parent.removeAllViews();
119 Button sweepButton =
new Button(activity);
120 sweepButton.setText(
"\u00B5 Sweep");
121 sweepButton.setTextSize(22);
122 sweepButton.setOnClickListener(
new View.OnClickListener() {
123 public void onClick(View view) {
124 showParamSweepDialog();
127 parent.addView(sweepButton,
new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
130 private void displayParamValue(
int index,
double current_param) {
131 String current_param_str;
132 double abs = Math.abs(current_param);
133 if ((abs < 0.1) && (current_param != 0.)) {
134 DecimalFormat decimal_format =
new DecimalFormat(
"0.###E0");
135 current_param_str = decimal_format.format(current_param);
136 }
else if ((abs < 1) && (abs >= 0)) {
137 DecimalFormat decimal_format =
new DecimalFormat(
"@@@");
138 current_param_str = decimal_format.format(current_param);
140 DecimalFormat decimal_format =
new DecimalFormat(
"@@@@");
141 current_param_str = decimal_format.format(current_param);
144 labels.get(index).setText(Html.fromHtml(p.
getLabel(index)));
145 buttons.get(index).setText(Html.fromHtml(current_param_str));
148 private void addParamBarListeners() {
150 for (
int i = 0; i < p.getNumParams(); i++) {
151 bars.get(i).setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
153 public void onProgressChanged(SeekBar seekBar,
int progress,
boolean fromUser) {
155 int index = bars.indexOf(seekBar);
157 double param_range = p.getMaxValue(index) - p.
getMinValue(index);
159 double current_param = p.getMinValue(index) + param_range * progress / seekBar.getMax();
161 p.setCurrent(index, current_param);
163 displayParamValue(index, current_param);
167 public void onStartTrackingTouch(SeekBar seekBar) {
170 public void onStopTrackingTouch(SeekBar seekBar) {
177 private void showParamValueSetDialog(
final int index) {
178 final Dialog dialog =
new Dialog(activity);
179 dialog.setContentView(R.layout.rb_param_dialog);
180 dialog.setTitle(
"Minimum: " + p.getMinValue(index) +
" Maximum: " + p.
getMaxValue(index));
181 dialog.setCancelable(
false);
183 final EditText paramInputField = (EditText) dialog.findViewById(R.id.param_input_textview);
186 paramInputField.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL
187 | InputType.TYPE_NUMBER_FLAG_SIGNED);
191 Button okButton2 = (Button) dialog.findViewById(R.id.param_okButton);
192 okButton2.setOnClickListener(
new View.OnClickListener() {
194 public void onClick(View view) {
197 String userParamString = paramInputField.getText().toString();
200 userParam = Double.parseDouble(userParamString);
201 }
catch (NumberFormatException e) {
204 userParam = p.getMinValue(index) - 1;
207 if (userParam <= p.
getMaxValue(index) && userParam >= p.getMinValue(index)) {
209 double slopeVal = (100 / (p.getMaxValue(index) - p.
getMinValue(index)));
210 Double progressVal = Double.valueOf((slopeVal * userParam) - (p.
getMinValue(index) * slopeVal));
211 bars.get(index).setProgress(progressVal.intValue());
214 displayParamValue(index, userParam);
216 Toast.makeText(activity.getApplicationContext(),
"Invalid Value", Toast.LENGTH_SHORT).show();
226 private void showParamSweepDialog() {
227 final int np = p.getNumParams();
229 final String[] paramStrings =
new String[np + 1];
231 paramStrings[0] =
"No Sweep";
232 for (
int i = 0; i < paramStrings.length; i++) {
234 paramStrings[i] =
"Parameter " + i;
238 Builder builder =
new AlertDialog.Builder(activity);
239 builder.setTitle(
"Pick sweep parameter");
240 builder.setItems(paramStrings,
new DialogInterface.OnClickListener() {
242 public void onClick(DialogInterface dialog,
int item) {
244 Toast.makeText(activity.getApplicationContext(), paramStrings[item], Toast.LENGTH_SHORT).show();
245 mSweepIndex = item - 1;
250 for (
int i = 0; i < np; i++) {
251 bars.get(i).setEnabled(
true);
252 double slopeVal = (100 / (p.getMaxValue(i) - p.
getMinValue(i)));
253 Double progressVal = Double.valueOf((slopeVal * p.getCurrent()[i])
254 - (p.getMinValue(i) * slopeVal));
255 bars.get(i).setProgress(progressVal.intValue());
257 if (mSweepIndex > -1) {
258 bars.get(mSweepIndex).setProgress(0);
259 bars.get(mSweepIndex).setEnabled(
false);
261 for (
int i = 0; i < np; i++) {
263 buttons.get(i).setEnabled(
true);
265 if (mSweepIndex > -1) {
266 buttons.get(mSweepIndex).setText(
"Sweep");
267 buttons.get(mSweepIndex).setEnabled(
false);
273 final Dialog dialog = builder.create();
275 }
catch (Exception e) {
276 Log.e(
"ParamBars",
"Exception thrown during creation of Sweep dialog");
String getLabel(int i)
Returns the label for the i-th parameter.
A helper class for a collection of UI elements regarding model parameter display. ...
double[] getCurrent()
Gets the current parameter.
void createSweepButton(LinearLayout parent)
ParamBars(Activity activity, Parameters p)
double getMinValue(int i)
A class for model parameters.
void createBars(TableLayout parent)
double getMaxValue(int i)