package org.itsnat.droid.impl.xmlinflater.layout.attr.view;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import org.itsnat.droid.impl.dom.DOMAttr;
import org.itsnat.droid.impl.xmlinflater.layout.AttrLayoutContext;
import org.itsnat.droid.impl.xmlinflater.layout.PendingViewPostCreateProcess;
import org.itsnat.droid.impl.xmlinflater.layout.PendingViewPostCreateProcessChildGridLayout;
import org.itsnat.droid.impl.xmlinflater.layout.attr.GridLayout_columnSpec;
import org.itsnat.droid.impl.xmlinflater.layout.attr.GridLayout_rowSpec;
import org.itsnat.droid.impl.xmlinflater.layout.classtree.ClassDescViewBased;
import org.itsnat.droid.impl.xmlinflater.shared.GravityUtil;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDesc;
/**
* Created by jmarranz on 30/04/14.
*/
public class AttrDescView_view_View_layout_gravity extends AttrDesc<ClassDescViewBased,View,AttrLayoutContext>
{
public AttrDescView_view_View_layout_gravity(ClassDescViewBased parent)
{
super(parent,"layout_gravity");
}
@Override
public void setAttribute(final View view, DOMAttr attr, AttrLayoutContext attrCtx)
{
final int valueInt = parseMultipleName(attr.getValue(), GravityUtil.nameValueMap);
final PendingViewPostCreateProcess pendingViewPostCreateProcess = attrCtx.getPendingViewPostCreateProcess();
Runnable task = new Runnable(){
@Override
public void run()
{
// Objetos LayoutParams diferentes pero mismos valores: http://developer.android.com/reference/android/R.attr.html#layout_gravity
ViewGroup.LayoutParams params = view.getLayoutParams();
if (params instanceof LinearLayout.LayoutParams)
((LinearLayout.LayoutParams)params).gravity = valueInt;
else if (params instanceof FrameLayout.LayoutParams)
((FrameLayout.LayoutParams)params).gravity = valueInt;
else if (params instanceof GridLayout.LayoutParams)
{
if (pendingViewPostCreateProcess != null)
{
PendingViewPostCreateProcessChildGridLayout pendingViewPostCreateProcessGrid = (PendingViewPostCreateProcessChildGridLayout) pendingViewPostCreateProcess;
if (pendingViewPostCreateProcessGrid.gridLayout_columnSpec == null) pendingViewPostCreateProcessGrid.gridLayout_columnSpec = new GridLayout_columnSpec();
if (pendingViewPostCreateProcessGrid.gridLayout_rowSpec == null) pendingViewPostCreateProcessGrid.gridLayout_rowSpec = new GridLayout_rowSpec();
pendingViewPostCreateProcessGrid.gridLayout_columnSpec.layout_gravity = valueInt;
pendingViewPostCreateProcessGrid.gridLayout_rowSpec.layout_gravity = valueInt;
}
else
{
((GridLayout.LayoutParams)params).setGravity(valueInt);
}
}
}};
if (pendingViewPostCreateProcess != null)
{
pendingViewPostCreateProcess.addPendingLayoutParamsTask(task);
}
else
{
task.run();
PendingViewPostCreateProcess.onChangedLayoutParams(view);
}
}
@Override
public void removeAttribute(View view, AttrLayoutContext attrCtx)
{
ViewGroup.LayoutParams params = view.getLayoutParams();
if (params instanceof LinearLayout.LayoutParams)
((LinearLayout.LayoutParams)params).gravity = Gravity.LEFT;
else if (params instanceof FrameLayout.LayoutParams)
((FrameLayout.LayoutParams)params).gravity = Gravity.LEFT;
else if (params instanceof GridLayout.LayoutParams)
((GridLayout.LayoutParams)params).setGravity(Gravity.LEFT); // La doc habla tambiƩn de un BASELINE pero no lo encuentro como Gravity
PendingViewPostCreateProcess.onChangedLayoutParams(view);
}
}