package com.csound.wizard.layout.unit; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; 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.Units.Unit; import com.csound.wizard.layout.param.Param; import com.csound.wizard.model.TrackState; import com.example.proglayout.R; public class Tabs implements Unit { @Override public String getTag() { return Const.TABS; } @Override public View getView(LayoutContext ctx, Object tagValue, final Param param, final Param defaults, TrackState trackState, final LayoutParent layoutParent) { if (isTabs(tagValue)) { ActionBar bar = ((Activity) ctx.getContext()).getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); JSONArray alts = (JSONArray) tagValue; for (Object rawEntry: alts) { JSONObject entry = (JSONObject) rawEntry; Iterator<String> it = entry.keySet().iterator(); String key = it.next(); bar.addTab(initTab(bar, ctx, key, Layout.getView(ctx, entry.get(key), defaults, LayoutParent.NONE, trackState))); } return new View(ctx.getContext()); } else { return Layout.errorMalformedTabs(ctx, getTag() + ": " + tagValue.toString(), defaults); } } private Tab initTab(ActionBar bar, LayoutContext ctx, final String name, final View view) { Tab res = bar.newTab(); res.setText(name); res.setTabListener(new TabListener() { @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { ft.replace(R.id.container, new UiWatcherFragment() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); return view; } }, name); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } }); return res; } private boolean isTabs(Object tagValue) { boolean res = true; if (Json.isArray(tagValue)) { for (Object item: (JSONArray) tagValue) { if (!Json.isObject(item)) { return false; } } } else { return false; } return res; } }