package org.itsnat.droid.impl.xmlinflater.layout.classtree;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.view.ContextThemeWrapper;
import org.itsnat.droid.impl.dom.DOMAttr;
import org.itsnat.droid.impl.util.MiscUtil;
import org.itsnat.droid.impl.util.NamespaceUtil;
import org.itsnat.droid.impl.xmlinflater.layout.ClassDescViewMgr;
import org.itsnat.droid.impl.xmlinflater.layout.attr.OrientationUtil;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_LinearLayout_baselineAlignedChildIndex;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_LinearLayout_showDividers;
import org.itsnat.droid.impl.xmlinflater.shared.GravityUtil;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodBoolean;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodDimensionIntRound;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodDrawable;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodFloat;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodNameMultiple;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodNameSingle;
import java.util.List;
/**
* Created by jmarranz on 30/04/14.
*/
public class ClassDescView_widget_LinearLayout extends ClassDescViewBased
{
private static final int[] layoutParamsAttrs = new int[]{android.R.attr.layout_weight,android.R.attr.layout_gravity};
private static final String[] layoutParamsNames = new String[] {"layout_weight","layout_gravity"};
public ClassDescView_widget_LinearLayout(ClassDescViewMgr classMgr,ClassDescView_view_ViewGroup parentClass)
{
super(classMgr,"android.widget.LinearLayout",parentClass);
}
public static void getLinearLayoutLayoutParamsFromStyleId(int styleId, List<DOMAttr> styleLayoutParamsAttribs, ContextThemeWrapper ctx)
{
if (styleId == 0) throw MiscUtil.internalError();
Configuration configuration = ctx.getResources().getConfiguration();
TypedArray a = ctx.obtainStyledAttributes(styleId, layoutParamsAttrs);
for(int i = 0; i < layoutParamsAttrs.length; i++)
{
if (!a.hasValue(i))
continue;
String name = layoutParamsNames[i];
String value;
if ("layout_gravity".equals(name))
{
int valueInt = a.getInt(i,0);
value = GravityUtil.getNameFromValue(valueInt);
}
else
{
// layout_weight es un entero normal no dimensión
value = a.getString(i);
}
DOMAttr attr = DOMAttr.createDOMAttr(NamespaceUtil.XMLNS_ANDROID, name, value);
styleLayoutParamsAttribs.add(attr);
}
a.recycle();
// Llamamos a la clase base
ClassDescView_view_ViewGroup.getViewGroupMarginLayoutParamsFromStyleId(styleId,styleLayoutParamsAttribs, ctx);
}
@SuppressWarnings("unchecked")
protected void init()
{
super.init();
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "baselineAligned", true));
addAttrDescAN(new AttrDescView_widget_LinearLayout_baselineAlignedChildIndex(this));
addAttrDescAN(new AttrDescReflecMethodDrawable(this, "divider", "setDividerDrawable", "@null")); // Hay un drawable por defecto de Android
// showDividers y dividerPadding atributos los he descubierto por casualidad en StackOverflow y resulta que son atributos NO documentados de LinearLayout (se ven en el código fuente)
addAttrDescAN(new AttrDescView_widget_LinearLayout_showDividers(this)); // showDividers NO está documentado pero se usa internamente
addAttrDescAN(new AttrDescReflecMethodDimensionIntRound(this, "dividerPadding", 0f)); // dividerPadding NO está documentado pero se usa internamente
addAttrDescAN(new AttrDescReflecMethodNameMultiple(this, "gravity", GravityUtil.nameValueMap, "start|top"));
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "measureWithLargestChild", "setMeasureWithLargestChildEnabled", false));
addAttrDescAN(new AttrDescReflecMethodNameSingle(this, "orientation", int.class, OrientationUtil.nameValueMap, "horizontal"));
addAttrDescAN(new AttrDescReflecMethodFloat(this, "weightSum", -1.0f));
}
}