package gueei.binding.converters;
import gueei.binding.Binder;
import gueei.binding.Binder.InflateResult;
import gueei.binding.BindingLog;
import gueei.binding.Converter;
import gueei.binding.DynamicObject;
import gueei.binding.IObservable;
import gueei.binding.v30.viewAttributes.adapterView.viewPager.PagerAdapterObservable;
import gueei.binding.viewAttributes.templates.Layout;
import android.view.View;
import android.view.ViewGroup;
/**
* PAGERADAPTER accepts unlimited number of DynamicObjects
* It will return a PagerAdapter
*
* @usage params
*
* @arg params DynamicObject
*
* @item template gueei.binding.viewAttributes.templates.Layout
* @item item Object Item View Model
* @item @optional width float
* @item @optional title String
*
* @return android.widget.Adapter
*
* @author andy
*
*/
public class PAGERITEMS extends Converter<PagerAdapterObservable> {
public PAGERITEMS(IObservable<?>[] dependents) {
super(PagerAdapterObservable.class, dependents);
}
@Override
public PagerAdapterObservable calculateValue(Object... args) throws Exception {
DynamicObject[] dobjs = new DynamicObject[args.length];
System.arraycopy(args, 0, dobjs, 0, args.length);
return new ObsPagerAdapter(dobjs);
}
private static class ObsPagerAdapter extends PagerAdapterObservable{
@Override
public CharSequence getPageTitle(int position) {
return items[position].tryGetObservableValue("title", "");
}
private final DynamicObject[] items;
public ObsPagerAdapter(DynamicObject... objs){
items = objs;
}
@Override
public float getPageWidth(int position) {
return items[position].tryGetObservableValue("width", 1.0f);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO: cache the view, handle the destroy also
try {
Layout layout;
layout = (Layout)items[position].getObservableByName("template").get();
InflateResult result =
Binder.inflateView(container.getContext(), layout.getDefaultLayoutId(), container, false);
View root =
Binder.bindView(container.getContext(), result, items[position].getObservableByName("item").get());
container.addView(root);
return root;
} catch (Exception e) {
BindingLog.exception("PAGERADAPTER", e);
return null;
}
}
@Override
public void notifyDataSetChanged() {
// TODO Auto-generated method stub
super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public int getCount() {
return items.length;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0.equals(arg1);
}
}
}