package com.csound.wizard.layout;
import com.csound.wizard.layout.param.LayoutParam;
import com.csound.wizard.layout.param.Types.Sides;
import android.app.ActionBar.LayoutParams;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
public class SetLayoutParam {
public static enum LayoutParent {
NONE, HOR, VER, TABLE, TABLE_ROW
}
public static View setParams(View view, LayoutParam param, LayoutParent layoutParent) {
int defaultWidth = getDefaultWidth(layoutParent);
int defaultHeight = getDefaultHeight(layoutParent);
Sizes sizes = new Sizes(defaultWidth, defaultHeight);
if (param == null) {
view.setLayoutParams(new ViewGroup.LayoutParams(defaultWidth, defaultHeight));
} else {
setPadding(view, param.getPadding());
switch (layoutParent) {
case NONE:
setNoneParentParams(view, param, sizes);
break;
case VER: case HOR:
setLinearLayoutParentParams(view, param, sizes);
break;
case TABLE:
setTableParentParams(view, param, sizes);
break;
case TABLE_ROW:
setTableRowParentParams(view, param, sizes);
break;
default:
break;
}
}
return view;
}
private static void setTableRowParentParams(View view, LayoutParam param, Sizes sizes) {
setSizes(param, sizes);
TableRow.LayoutParams lp = new TableRow.LayoutParams(sizes.width, sizes.height);
setMargin(lp, param);
setGravity(lp, param);
setWeight(lp, param);
view.setLayoutParams(lp);
}
private static void setTableParentParams(View view, LayoutParam param, Sizes sizes) {
setSizes(param, sizes);
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(sizes.width, sizes.height);
setMargin(lp, param);
setGravity(lp, param);
setWeight(lp, param);
view.setLayoutParams(lp);
}
private static void setLinearLayoutParentParams(View view, LayoutParam param, Sizes sizes) {
setSizes(param, sizes);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams (sizes.width, sizes.height);
setMargin(lp, param);
setGravity(lp, param);
setWeight(lp, param);
view.setLayoutParams(lp);
}
private static void setNoneParentParams(View view, LayoutParam param, Sizes sizes) {
view.setLayoutParams(new ViewGroup.LayoutParams(sizes.width, sizes.height));
}
private static void setPadding(View view, Sides padding) {
if (padding != null) {
Sides p = Sides.merge(padding, new Sides(0));
view.setPadding(p.getLeft(), p.getTop(), p.getRight(), p.getBottom());
}
}
private static void setMargin(ViewGroup.MarginLayoutParams layoutParams, LayoutParam param) {
if (param != null && param.getMargin() != null) {
Sides p = Sides.merge(param.getMargin(), new Sides(0));
layoutParams.setMargins(p.getLeft(), p.getTop(), p.getRight(), p.getBottom());
}
}
private static void setGravity(LinearLayout.LayoutParams layoutParams, LayoutParam param) {
if (param != null && param.getGravity() != null) {
layoutParams.gravity = param.getGravity();
}
}
private static void setWeight(LinearLayout.LayoutParams layoutParams, LayoutParam param) {
if (param != null && param.getWeight() != null) {
layoutParams.weight = param.getWeight();
}
}
private static void setSizes(LayoutParam param, Sizes sizes) {
if (param != null) {
if (param.getWidth() != null) {
sizes.width = param.getWidth().getInteger();
}
if (param.getHeight() != null) {
sizes.height = param.getHeight().getInteger();
}
}
}
public static int getDefaultWidth(LayoutParent layoutParent) {
if (layoutParent.equals(LayoutParent.VER) || layoutParent.equals(LayoutParent.NONE)) {
return LayoutParams.MATCH_PARENT;
} else {
return LayoutParams.WRAP_CONTENT;
}
}
public static int getDefaultHeight(LayoutParent layoutParent) {
if (layoutParent.equals(LayoutParent.HOR) || layoutParent.equals(LayoutParent.NONE)) {
return LayoutParams.MATCH_PARENT;
} else {
return LayoutParams.WRAP_CONTENT;
}
}
private static class Sizes {
public Integer width, height;
public Sizes(Integer w, Integer h) {
width = w;
height = h;
}
}
}