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.graphics.Paint.Align;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
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;
import com.csound.wizard.view.ViewUtils;
public class CsdNames extends Button implements OnTapListener, StatefulUnit {
private OnTap mListener = Listener.defaultOnTap();
private List<String> mNames;
private String mid;
private int mSelected;
private Rect mRect = new Rect();
private Paint paint = new Paint();
private ColorParam colors;
private int textColor;
private int mn;
public CsdNames(Context context, String id, int initVal, List<String> names, ColorParam colorParam, TextParam textParam) {
super(context);
mid = id;
if (initVal < 0 || initVal >= names.size()) {
mSelected = 0;
} else {
mSelected = initVal;
}
mNames = names;
mn = names.size();
ViewUtils.initPaint(paint);
paint.setStrokeWidth(5);
colors = colorParam;
textColor = textParam.getColor();
paint.setTextSize(textParam.getSize());
paint.setTextAlign(textParam.getAlign());
setBackgroundColor(Color.TRANSPARENT);
paint.setTextAlign(Align.CENTER);
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSelected++;
if (mSelected >= mn) {
mSelected = 0;
}
mListener.tap(mSelected);
invalidate();
}
});
}
public CsdNames(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas c) {
mRect.setRect(5, 5, getWidth() - 10, getHeight() - 10);
paint.setColor(colors.getFstColor());
mRect.drawRounded(c, paint);
paint.setColor(colors.getSndColor());
mRect.drawRimRounded(c, paint);
paint.setColor(textColor);
mRect.drawText(c, mNames.get(mSelected), paint);
}
@Override
public String getUnitId() {
return mid;
}
@Override
public double[] getUnitState() {
return UnitUtils.getUnitStateFloat(mSelected);
}
@Override
public void setOnTapListener(OnTap listener) {
mListener = listener;
}
public static int defaultState() {
return 0;
}
}