package com.csound.wizard.layout.unit;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.csound.wizard.Const;
import com.csound.wizard.fragment.UiWatcherFragment;
import com.csound.wizard.layout.Json;
import com.csound.wizard.layout.Layout;
import com.csound.wizard.layout.LayoutContext;
import com.csound.wizard.layout.SetLayoutParam.LayoutParent;
import com.csound.wizard.layout.UnitUtils;
import com.csound.wizard.layout.Units.StatefulUnit;
import com.csound.wizard.layout.Units.Unit;
import com.csound.wizard.layout.param.Param;
import com.csound.wizard.model.TrackState;
import com.csound.wizard.view.unit.RectButton;
import com.example.proglayout.R;
public class Options implements Unit {
@Override
public String getTag() {
return Const.OPTIONS;
}
@Override
public View getView(LayoutContext ctx, Object tagValue, final Param param, final Param defaults, TrackState trackState, final LayoutParent layoutParent) {
if (Json.isArray(tagValue)) {
JSONArray alts = (JSONArray) tagValue;
String id = ctx.getFreshId();
LinearLayout ll = new LinearLayout(ctx.getContext());
ll.setOrientation(LinearLayout.VERTICAL);
for (Object rawEntry: alts) {
JSONObject entry = (JSONObject) rawEntry;
Iterator<String> it = entry.keySet().iterator();
String key = it.next();
ll.addView(optionItem(ctx, key, entry.get(key), defaults, trackState));
}
return ll;
} else {
return Layout.errorMalformedJson(ctx, getTag() + ": " + tagValue.toString(), defaults);
}
}
private View optionItem(final LayoutContext ctx, final String name, final Object screen, final Param defaults, TrackState trackState) {
RectButton b = new RectButton(ctx.getContext(), defaults.getColor(), defaults.getText());
final View v = Layout.getView(ctx, screen, defaults, LayoutParent.NONE, trackState);
final Fragment f = new UiWatcherFragment() {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
v.setBackgroundColor(defaults.getColor().getBkgColor());
setRetainInstance(true);
return v;
}
@Override
public void onDetach() {
super.onDetach();
}
};
b.setText(name);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = ((Activity) ctx.getContext()).getFragmentManager();
fm.beginTransaction()
.replace(R.id.container, f, name)
.addToBackStack(name)
.commit();
}
});
return b;
}
private static class Buttons extends LinearLayout implements StatefulUnit {
private String mid;
private int choice = -1;
public Buttons(Context context, String id) {
super(context);
}
@Override
public String getUnitId() {
return mid;
}
@Override
public double[] getUnitState() {
return UnitUtils.getUnitStateFloat(choice);
}
}
}