package roman10.tutorial.tabmenu;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class TabMenu extends roman10.tutorial.tabmenu.PopupWindow {
private GridView mGridMenu, mGridMenuItem;
private LinearLayout mLayout;
private MneuAdapter mMenuAdapter;
public TabMenu(Context pContext, OnItemClickListener pMenuClick,
OnItemClickListener pMenuItemClick, MneuAdapter pMenuAdapter,
int pBgColor, int pAniTabMenu) {
super(pContext);
/*layout*/
mLayout = new LinearLayout(pContext);
mLayout.setOrientation(LinearLayout.VERTICAL);
/*menu initialization*/
mGridMenu = new GridView(pContext);
mGridMenu.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
mGridMenu.setNumColumns(pMenuAdapter.getCount());
mGridMenu.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
mGridMenu.setVerticalSpacing(1);
mGridMenu.setHorizontalSpacing(1);
mGridMenu.setGravity(Gravity.CENTER);
mGridMenu.setOnItemClickListener(pMenuClick);
mGridMenu.setAdapter(pMenuAdapter);
mGridMenu.setSelector(new ColorDrawable(Color.TRANSPARENT));
this.mMenuAdapter = pMenuAdapter;
/*menu item initialization*/
mGridMenuItem = new GridView(pContext);
mGridMenuItem.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
mGridMenuItem.setSelector(new ColorDrawable(Color.TRANSPARENT));
mGridMenuItem.setNumColumns(4); //4 menu items for each row
mGridMenuItem.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
mGridMenuItem.setVerticalSpacing(10);
mGridMenuItem.setHorizontalSpacing(10);
mGridMenuItem.setPadding(10, 10, 10, 10);
mGridMenuItem.setGravity(Gravity.CENTER);
mGridMenuItem.setOnItemClickListener(pMenuItemClick);
/*add the two grids to the layout*/
mLayout.addView(mGridMenu);
mLayout.addView(mGridMenuItem);
/*other initialization*/
this.setContentView(mLayout);
this.setWidth(LayoutParams.FILL_PARENT);
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setBackgroundDrawable(new ColorDrawable(pBgColor));
this.setAnimationStyle(pAniTabMenu);
this.setOutsideTouchable(true);
this.setFocusable(true);
}
public void setMenuSelected(int pIndex) {
mGridMenu.setSelection(pIndex);
this.mMenuAdapter.setFocus(pIndex);
}
public void setMenuItemSelected(int pIndex, int pColorSelMenuItem) {
int lCount = mGridMenuItem.getChildCount();
for (int i = 0; i < lCount; ++i) {
if (i != pIndex) {
((LinearLayout)mGridMenuItem.getChildAt(i)).setBackgroundColor(Color.TRANSPARENT);
}
}
((LinearLayout)mGridMenuItem.getChildAt(pIndex)).setBackgroundColor(pColorSelMenuItem);
}
public void setMenuItemAdapter(MenuItemAdapter pAdapter) {
mGridMenuItem.setAdapter(pAdapter);
}
static public class MenuItemAdapter extends BaseAdapter {
private Context mContext;
private int mFontColor, mFontSize;
private String[] mTexts;
private int[] mResId;
public MenuItemAdapter(Context pContext, String[] pTexts,
int[] pResId, int pFontSize, int pFontColor) {
this.mContext = pContext;
this.mFontColor = pFontColor;
this.mTexts = pTexts;
this.mFontSize = pFontSize;
this.mResId = pResId;
}
@Override
public int getCount() {
return mTexts.length;
}
@Override
public Object getItem(int position) {
return makeMenuItem(position);
}
private LinearLayout makeMenuItem(int position) {
LinearLayout lLayout = new LinearLayout(this.mContext);
lLayout.setOrientation(LinearLayout.VERTICAL);
lLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
lLayout.setPadding(10, 10, 10, 10);
TextView lView = new TextView(this.mContext);
lView.setText(mTexts[position]);
lView.setTextSize(mFontSize);
lView.setTextColor(mFontColor);
lView.setGravity(Gravity.CENTER);
lView.setPadding(5, 5, 5, 5);
ImageView lImageView = new ImageView(this.mContext);
lImageView.setBackgroundResource(this.mResId[position]);
lLayout.addView(lImageView, new LinearLayout.LayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)));
lLayout.addView(lView);
return lLayout;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return makeMenuItem(position);
}
}
static public class MneuAdapter extends BaseAdapter {
private Context mContext;
private int mFontColor, mUnselectedColor, mSelectedColor;
private TextView[] mMenuView;
public MneuAdapter(Context pContext, String[] pTitles, int pFontSize,
int pFontColor, int pUnselectedColor, int pSelectedColor) {
this.mContext = pContext;
this.mFontColor = pFontColor;
this.mUnselectedColor = pUnselectedColor;
this.mSelectedColor = pSelectedColor;
int lLen = pTitles.length;
this.mMenuView = new TextView[lLen];
for (int i = 0; i < lLen; ++i) {
this.mMenuView[i] = new TextView(mContext);
this.mMenuView[i].setText(pTitles[i]);
this.mMenuView[i].setTextSize(pFontSize);
this.mMenuView[i].setTextColor(pFontColor);
this.mMenuView[i].setGravity(Gravity.CENTER);
this.mMenuView[i].setPadding(10, 10, 10, 10);
}
}
@Override
public int getCount() {
return this.mMenuView.length;
}
@Override
public Object getItem(int arg0) {
return this.mMenuView[arg0];
}
@Override
public long getItemId(int arg0) {
return this.mMenuView[arg0].getId();
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
View v;
if (arg1 == null) {
v = this.mMenuView[arg0];
} else {
v = arg1;
}
return v;
}
private void setFocus(int pIndex) {
int lLen = this.mMenuView.length;
for (int i = 0; i < lLen; ++i) {
if (i != pIndex) {
this.mMenuView[i].setBackgroundDrawable(new ColorDrawable(mUnselectedColor));
this.mMenuView[i].setTextColor(mFontColor);
} else {
this.mMenuView[i].setBackgroundColor(0x00);
this.mMenuView[i].setTextColor(mSelectedColor);
}
}
}
}
}