package gueei.binding.v30.widget;
import gueei.binding.Binder;
import gueei.binding.IObservableCollection;
import gueei.binding.menu.AbsMenuBridge;
import gueei.binding.menu.MenuGroupBridge;
import gueei.binding.menu.MenuItemBridge;
import gueei.binding.menu.MenuItemViemodel;
import java.io.IOException;
import java.util.Hashtable;
import org.xmlpull.v1.XmlPullParserException;
import android.content.res.XmlResourceParser;
import android.util.AttributeSet;
import android.util.Xml;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.PopupMenu;
public class PopupMenuBinderV30 implements OnMenuItemClickListener {
private Hashtable<Integer, AbsMenuBridge> items =
new Hashtable<Integer, AbsMenuBridge>();
public void bindPopupMenu(PopupMenu popup, IObservableCollection<MenuItemViemodel> menuItems) {
Menu menu = popup.getMenu();
Menu subMenu = null;
MenuItem mi = null;
int count=0;
int groups=0;
for(int i=0; i<menuItems.size(); i++) {
MenuItemViemodel vm = menuItems.getItem(i);
String title = "";
if( vm.title != null && vm.title.get() != null)
title = vm.title.get().toString();
if( vm.group == null ) {
mi = menu.add(Menu.FIRST+groups, Menu.FIRST+count, Menu.NONE, title);
mi.setOnMenuItemClickListener(this);
items.put(Menu.FIRST+count, new MenuItemBridge(Menu.FIRST+count, vm));
count++;
} else {
subMenu = menu.addSubMenu(Menu.FIRST+groups, Menu.FIRST+count, Menu.NONE, title);
items.put(Menu.FIRST+count, new MenuGroupBridge(Menu.FIRST+count, vm));
count++;
for(int k=0; k<vm.group.size(); k++) {
MenuItemViemodel vmChild = vm.group.getItem(k);
title = "";
if( vmChild.title != null && vmChild.title.get() != null)
title = vmChild.title.get().toString();
mi = subMenu.add(Menu.FIRST+groups, Menu.FIRST+count, Menu.NONE, title);
mi.setOnMenuItemClickListener(this);
items.put(Menu.FIRST+count, new MenuItemBridge(Menu.FIRST+count, vmChild));
count++;
}
groups++;
}
}
for(AbsMenuBridge item: items.values()){
item.onCreateOptionItem(popup.getMenu());
item.onPrepareOptionItem(popup.getMenu());
}
}
public void createAndBindPopupMenu(View v, PopupMenu popup, int menuResId, Object viewModel) {
// First inflate the menu - default action
Activity activity = (Activity)v.getContext();
if(menuResId>0)
popup.getMenuInflater().inflate(menuResId, popup.getMenu());
// Now, parse the menu
XmlResourceParser parser = activity.getResources().getXml(menuResId);
try{
int eventType= parser.getEventType();
while(eventType != XmlResourceParser.END_DOCUMENT){
if (eventType==XmlResourceParser.START_TAG){
int id = parser.getAttributeResourceValue(Binder.ANDROID_NAMESPACE, "id", -1);
MenuItem mi = popup.getMenu().findItem(id);
if (mi!=null){
mi.setOnMenuItemClickListener(this);
String nodeName = parser.getName();
if (id>0){
AttributeSet attrs = Xml.asAttributeSet(parser);
AbsMenuBridge item = null;
if ("item".equals(nodeName)){
item = new MenuItemBridge(id, attrs, activity, viewModel);
}else if ("group".equals(nodeName)){
item = new MenuGroupBridge(id, attrs, activity, viewModel);
}
if (item!=null){
items.put(id, item);
}
}
}
}
eventType = parser.next();
}
}catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
for(AbsMenuBridge item: items.values()){
item.onCreateOptionItem(popup.getMenu());
item.onPrepareOptionItem(popup.getMenu());
}
}
public boolean onMenuItemClick(MenuItem mi) {
AbsMenuBridge item = items.get(mi.getItemId());
if (item!=null){
return item.onOptionsItemSelected(mi);
}
return false;
}
}