package v2.simpleUi;
import java.util.List;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
public abstract class M_Spinner implements ModifierInterface {
private static Handler myHandler = new Handler(Looper.getMainLooper());
public static class SpinnerItem {
private int id;
private String text;
public SpinnerItem(int id, String text) {
this.id = id;
this.text = text;
}
public String getText() {
return text;
}
public int getId() {
return id;
}
@Override
public String toString() {
return getText();
}
}
private Spinner s;
private boolean editable = true;
private int selectedItemPos;
private float weightOfDescription = 1;
private float weightOfSpinner = 1;
public void setWeightOfDescription(float weightOfDescription) {
this.weightOfDescription = weightOfDescription;
}
public void setWeightOfInputText(float weightOfInputText) {
this.weightOfSpinner = weightOfInputText;
}
@Override
public View getView(Context context) {
LinearLayout container = new LinearLayout(context);
container.setPadding(DEFAULT_PADDING, DEFAULT_PADDING, DEFAULT_PADDING,
DEFAULT_PADDING);
container.setGravity(Gravity.CENTER_VERTICAL);
LayoutParams p = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,
weightOfDescription);
LinearLayout.LayoutParams p2 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,
weightOfSpinner);
TextView nameText = new TextView(context);
nameText.setText(getVarName());
nameText.setLayoutParams(p);
container.addView(nameText);
s = new Spinner(context);
s.setLayoutParams(p2);
ArrayAdapter<SpinnerItem> a = new ArrayAdapter<SpinnerItem>(context,
android.R.layout.simple_spinner_item, loadListToDisplay());
a.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(a);
s.setPrompt(getVarName());
setEditable(isEditable());
setSelectedItemId(loadSelectedItemId());
if (selectedItemPos != 0) {
selectInSpinner(selectedItemPos);
}
container.addView(s);
return container;
}
public abstract int loadSelectedItemId();
public void setEditable(boolean editable) {
this.editable = editable;
if (s != null) {
myHandler.post(new Runnable() {
@Override
public void run() {
s.setEnabled(isEditable());
s.setFocusable(isEditable());
}
});
}
}
public boolean isEditable() {
return editable;
}
@Override
public boolean save() {
return save((SpinnerItem) s.getSelectedItem());
}
public abstract boolean save(SpinnerItem selectedItem);
public abstract String getVarName();
public abstract List<SpinnerItem> loadListToDisplay();
public boolean setSelectedItemId(int selectedItemId) {
List<SpinnerItem> list = loadListToDisplay();
if (selectedItemId < list.size()
&& list.get(selectedItemId).getId() == selectedItemId) {
selectInSpinner(selectedItemId);
return true;
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId() == selectedItemId) {
selectInSpinner(i);
return true;
}
}
return false;
}
public void selectInSpinner(int posInList) {
this.selectedItemPos = posInList;
if (s != null) {
myHandler.post(new Runnable() {
@Override
public void run() {
s.setSelection(selectedItemPos);
}
});
}
}
}