package v2.simpleUi;
import java.util.List;
import android.R;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
public abstract class M_ListWrapper<T> implements ModifierInterface {
private List<T> myList;
private String addItemText;
private M_Container currentContainer;
private LinearLayout linLayContainer;
public M_ListWrapper(List<T> list, String addItemText) {
myList = list;
this.addItemText = addItemText;
}
@Override
public View getView(Context context) {
linLayContainer = new LinearLayout(context);
linLayContainer.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
linLayContainer.setOrientation(LinearLayout.VERTICAL);
linLayContainer.addView(generateList(context));
return linLayContainer;
}
public View generateList(Context context) {
currentContainer = new M_Container();
if (addItemText != null)
currentContainer.add(createAddButton(context));
if (myList != null) {
for (final T item : myList) {
int lw = 3;
int rw = 1;
M_LeftRight h = new M_LeftRight(getModifierFor(item), lw,
new M_IconButtonWithText(R.drawable.ic_delete) {
@Override
public void onClick(Context context,
ImageView clickedButton) {
onDelete(item);
refreshListContent(context);
}
}, rw);
currentContainer.add(h);
}
}
return currentContainer.getView(context);
}
public void refreshListContent(Context context) {
linLayContainer.removeAllViews();
linLayContainer.addView(generateList(context));
linLayContainer.invalidate();
}
private ModifierInterface createAddButton(Context context) {
return new M_Button(addItemText) {
@Override
public void onClick(Context context, Button clickedButton) {
if (addNewObjectToList(context, myList)) {
refreshListContent(context);
}
}
};
}
public abstract boolean addNewObjectToList(Context context, List<T> list);
public abstract ModifierInterface getModifierFor(T item);
public abstract boolean onDelete(T item);
@Override
public boolean save() {
if (currentContainer != null)
return currentContainer.save();
return false;
}
}