def unpackMetaData(self, buf): metadata = {} try: x = Standard("B").unpack(buf)[0] while x != 127: index = x & 0x1F # Lower 5 bits ty = x >> 5 # Upper 3 bits if ty == 0: val = Standard("b").unpack(buf)[0] elif ty == 1: val = Standard("h").unpack(buf)[0] elif ty == 2: val = Standard("i").unpack(buf)[0] elif ty == 3: val = Standard("f").unpack(buf)[0] elif ty == 4: val = String("S").unpack(buf)[0] elif ty == 5: val = {} val["id"] = Standard("h").unpack(buf)[0] val["count"] = Standard("b").unpack(buf)[0] val["damage"] = Standard("h").unpack(buf)[0] elif ty == 6: val = [] for i in range(3): val.append(Standard("i").unpack(buf))[0] else: global debug debug.error("Unknown type ty=%d for x=ox%02X" % (ty, x)) metadata[index] = (ty, val) x = Standard("B").unpack(buf)[0] except IOError: raise IOError return metadata,
def insertmenu(mlist, insertmlist, sortedmenukey, win, accel=None, imagelist=None): # debug.info('[makemenu] Inserting dynamic menu...') # makemenu.printmenu(insertmlist) keys = sortedmenukey[:] while len(keys) > 0: key = keys[0] if key == None: for order, idname, caption, kind, func, message in insertmlist[ key]: id = Id.makeid(win, idname) menu = makemenu.makesubmenu(insertmlist, win, idname, accel, imagelist) makemenu.setmenutext(win, accel) win.menubar.Insert(findpos(mlist, key, idname), menu, caption) win.menuitems[idname] = menu removekey(insertmlist, keys, key) else: menu = win.menuitems[key] for order, idname, caption, kind, func, message in insertmlist[ key]: pos = findpos(mlist, key, idname) if insertmlist.has_key(idname): #submenu id = Id.makeid(win, idname) submenu = makemenu.makesubmenu(mlist, win, idname, accel, imagelist) menu.InsertMenu(pos, id, caption, submenu) win.menuitems[idname] = submenu else: if kind == wx.ITEM_SEPARATOR: menu.InsertSeparator(pos) else: id = Id.makeid(win, idname) mitem = wx.MenuItem(menu, id, caption, message, kind) if imagelist and makemenu.disableimage == False: imagename = imagelist.get(idname, '') if imagename: image = common.getpngimage(imagename) if kind == wx.ITEM_CHECK: mitem.SetBitmaps(image) else: mitem.SetBitmap(image) menu.InsertItem(pos, mitem) win.menuitems[idname] = mitem if kind in (wx.ITEM_NORMAL, wx.ITEM_CHECK, wx.ITEM_RADIO): if func: try: f = getattr(win, func) wx.EVT_MENU(win, id, f) except: debug.error( "[makemenu] Can't find function [%s] in class %s" % (func, win.__class__.__name__)) removekey(insertmlist, keys, key)
def makesubmenu(mlist, win, pid, accel=None, imagelist=None): menu = wx.Menu() if not mlist.has_key(pid): return menu for m in mlist[pid]: order, idname, caption, kind, func, message = m if mlist.has_key(idname): id = Id.makeid(win, idname) submenu = makesubmenu(mlist, win, idname, accel, imagelist) menu.AppendMenu(id, caption, submenu) win.menuitems[idname] = submenu else: if kind == wx.ITEM_SEPARATOR: menu.AppendSeparator() else: id = Id.makeid(win, idname) if accel and accel.has_key(idname): caption = caption.split('\t')[0] mitem = wx.MenuItem(menu, id, caption, message, kind) #mitem.SetText(caption + '\t' + accel[idname][0]) else: pos = caption.find('\t') if pos > -1: a, b = caption.split('\t') #caption = a + '\t' + b.replace('+', ',') mitem = wx.MenuItem(menu, id, caption, message, kind) if imagelist and disableimage == False: imagename = imagelist.get(idname, '') if imagename: image = common.getpngimage(imagename) if kind == wx.ITEM_CHECK: mitem.SetBitmaps(image) else: mitem.SetBitmap(image) # else: # print 'nobitmap' # if wx.Platform == '__WXMSW__': # mitem.SetBitmap(common.getpngimage('images/empty.gif')) menu.AppendItem(mitem) win.menuitems[idname] = mitem if kind in (wx.ITEM_NORMAL, wx.ITEM_CHECK, wx.ITEM_RADIO): if func: try: f = getattr(win, func) wx.EVT_MENU(win, id, f) except: debug.error("[makemenu] Can't find function [%s] in class %s" % (func, win.__class__.__name__)) return menu
def insertmenu(mlist, insertmlist, sortedmenukey, win, accel=None, imagelist=None): # debug.info('[makemenu] Inserting dynamic menu...') # makemenu.printmenu(insertmlist) keys = sortedmenukey[:] while len(keys) > 0: key = keys[0] if key == None: for order, idname, caption, kind, func, message in insertmlist[key]: id = Id.makeid(win, idname) menu = makemenu.makesubmenu(insertmlist, win, idname, accel, imagelist) makemenu.setmenutext(win, accel) win.menubar.Insert(findpos(mlist, key, idname), menu, caption) win.menuitems[idname] = menu removekey(insertmlist, keys, key) else: menu = win.menuitems[key] for order, idname, caption, kind, func, message in insertmlist[key]: pos = findpos(mlist, key, idname) if insertmlist.has_key(idname): #submenu id = Id.makeid(win, idname) submenu = makemenu.makesubmenu(mlist, win, idname, accel, imagelist) menu.InsertMenu(pos, id, caption, submenu) win.menuitems[idname] = submenu else: if kind == wx.ITEM_SEPARATOR: menu.InsertSeparator(pos) else: id = Id.makeid(win, idname) mitem = wx.MenuItem(menu, id, caption, message, kind) if imagelist and makemenu.disableimage == False: imagename = imagelist.get(idname, '') if imagename: image = common.getpngimage(imagename) if kind == wx.ITEM_CHECK: mitem.SetBitmaps(image) else: mitem.SetBitmap(image) menu.InsertItem(pos, mitem) win.menuitems[idname] = mitem if kind in (wx.ITEM_NORMAL, wx.ITEM_CHECK, wx.ITEM_RADIO): if func: try: f = getattr(win, func) wx.EVT_MENU(win, id, f) except: debug.error("[makemenu] Can't find function [%s] in class %s" % (func, win.__class__.__name__)) removekey(insertmlist, keys, key)