package com.csound.wizard.view.unit; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import com.csound.wizard.layout.Layout; import com.csound.wizard.layout.UnitUtils; import com.csound.wizard.layout.Units.StatefulUnit; import com.csound.wizard.layout.param.ColorParam; import com.csound.wizard.layout.param.TextParam; import com.csound.wizard.view.GraphUtils.Rect; import com.csound.wizard.view.Listener; import com.csound.wizard.view.Listener.OnTap; import com.csound.wizard.view.Listener.OnTapListener; public class CsdSpinner extends Spinner implements AdapterView.OnItemSelectedListener, OnTapListener, StatefulUnit { private Rect mRect = new Rect(); private Paint paint = new Paint(); private OnTap mListener = Listener.defaultOnTap(); private List<String> mNames; private String mid; private int mSelected; public CsdSpinner(Context context) { super(context); } public CsdSpinner(Context context, String id, int initVal, List<String> names, ColorParam color, final TextParam textParam) { super(context); mid = id; mSelected = initVal; mNames = names; paint.setColor(color.getSndColor()); paint.setAlpha(80); ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, mNames) { @Override public View getView(int position, View convertView, ViewGroup parent) { return applyTextParam(super.getView(position, convertView, parent)); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return applyTextParam(super.getDropDownView(position, convertView, parent)); } private View applyTextParam(View x) { TextView res = (TextView) x; Layout.setTextProperties(res, textParam); return res; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); this.setAdapter(adapter); this.setSelection(initVal); this.setOnItemSelectedListener(this); } @Override protected void onDraw(Canvas canvas) { mRect.setView(this); mRect.draw(canvas, paint); super.onDraw(canvas); } @Override public String getUnitId() { return mid; } @Override public double[] getUnitState() { return UnitUtils.getUnitStateFloat(mSelected); } @Override public void setOnTapListener(OnTap listener) { mListener = listener; } @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { mSelected = pos; mListener.tap(mSelected); } @Override public void onNothingSelected(AdapterView<?> parent) { } public static Integer defaultState() { return 0; } }