def spawnMenu(self): sel = self.GetFirstSelected() menu = None sFit = Fit.getInstance() fit = sFit.getFit(self.mainFrame.getActiveFit()) if not fit: return if sel != -1: implant = fit.appliedImplants[sel] sMkt = Market.getInstance() sourceContext = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" itemContext = sMkt.getCategoryByItem(implant.item).name menu = ContextMenu.getMenu((implant,), (sourceContext, itemContext)) elif sel == -1 and fit.implantSource == ImplantLocation.FIT: fitID = self.mainFrame.getActiveFit() if fitID is None: return context = (("implantView",),) menu = ContextMenu.getMenu([], *context) if menu is not None: self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() menu = None if sel != -1: item = self.get(sel) sMkt = service.Market.getInstance() if isinstance(item, eos.types.Drone): srcContext = "projectedDrone" itemContext = sMkt.getCategoryByItem(item.item).name context = ((srcContext, itemContext),) elif isinstance(item, eos.types.Module): modSrcContext = "projectedModule" modItemContext = sMkt.getCategoryByItem(item.item).name modFullContext = (modSrcContext, modItemContext) if item.charge is not None: chgSrcContext = "projectedCharge" chgItemContext = sMkt.getCategoryByItem(item.charge).name chgFullContext = (chgSrcContext, chgItemContext) context = (modFullContext, chgFullContext) else: context = (modFullContext,) else: fitSrcContext = "projectedFit" fitItemContext = item.name context = ((fitSrcContext, fitItemContext),) context = context + (("projected",),) menu = ContextMenu.getMenu((item,), *context) elif sel == -1: fitID = self.mainFrame.getActiveFit() if fitID is None: return context = (("projected",),) menu = ContextMenu.getMenu([], *context) if menu is not None: self.PopupMenu(menu)
def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) pmainSizer = wx.BoxSizer(wx.VERTICAL) tree = self.skillTreeListCtrl = wx.gizmos.TreeListCtrl(self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) self.skillBookImageId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui")) tree.AddColumn("Skill") tree.AddColumn("Level") tree.SetMainColumn(0) self.root = tree.AddRoot("Skills") tree.SetItemText(self.root, "Levels", 1) tree.SetColumnWidth(0, 500) self.populateSkillTree() tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) self.statsMenu = ContextMenu.getMenu(None, context) self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() self.levelChangeMenu.AppendSeparator() self.levelIds = {} idUnlearned = wx.NewId() self.levelIds[idUnlearned] = "Not learned" self.levelChangeMenu.Append(idUnlearned, "Unlearn") for level in xrange(6): id = wx.NewId() self.levelIds[id] = level self.levelChangeMenu.Append(id, "Level %d" % level) self.levelChangeMenu.AppendSeparator() self.revertID = wx.NewId() self.levelChangeMenu.Append(self.revertID, "Revert") self.saveID = wx.NewId() self.levelChangeMenu.Append(self.saveID, "Save") self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) self.SetSizer(pmainSizer) self.Layout()
def addMode(self, menu, mode): label = mode.item.name.rsplit()[-2] id = ContextMenu.nextID() self.modeIds[id] = mode menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_RADIO) menu.Bind(wx.EVT_MENU, self.handleMode, menuItem) return menuItem
def getSubMenu(self, context, selection, rootMenu, i, pitem): msw = True if "wxMSW" in wx.PlatformInfo else False self.context = context self.fitMenuItemIds = {} sub = wx.Menu() if len(self.__class__.commandFits) < 15: for fit in sorted(self.__class__.commandFits, key=lambda x: x.name): menuItem = self.addFit(rootMenu if msw else sub, fit, True) sub.Append(menuItem) else: typeDict = {} for fit in self.__class__.commandFits: shipName = fit.ship.item.name if shipName not in typeDict: typeDict[shipName] = [] typeDict[shipName].append(fit) for ship in sorted(typeDict.keys()): shipItem = wx.MenuItem(sub, ContextMenu.nextID(), ship) grandSub = wx.Menu() shipItem.SetSubMenu(grandSub) for fit in sorted(typeDict[ship], key=lambda x: x.name): fitItem = self.addFit(rootMenu if msw else grandSub, fit, False) grandSub.Append(fitItem) sub.Append(shipItem) return sub
def addFit(self, menu, fit, includeShip=False): label = fit.name if not includeShip else "({}) {}".format(fit.ship.item.name, fit.name) id = ContextMenu.nextID() self.fitMenuItemIds[id] = fit menuItem = wx.MenuItem(menu, id, label) menu.Bind(wx.EVT_MENU, self.handleSelection, menuItem) return menuItem
def addAbility(self, menu, ability): label = ability.name id = ContextMenu.nextID() self.abilityIds[id] = ability menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK) menu.Bind(wx.EVT_MENU, self.handleMode, menuItem) return menuItem
def getSubMenu(self, context, selection, rootMenu, i, pitem): self.fitLookup = {} self.context = context sFit = Fit.getInstance() m = wx.Menu() # If on Windows we need to bind out events into the root menu, on other # platforms they need to go to our sub menu if "wxMSW" in wx.PlatformInfo: bindmenu = rootMenu else: bindmenu = m for page in self.mainFrame.fitMultiSwitch._pages: if isinstance(page, BlankPage): continue fit = sFit.getFit(page.activeFitID, basic=True) id = ContextMenu.nextID() mitem = wx.MenuItem(rootMenu, id, "{}: {}".format(fit.ship.item.name, fit.name)) bindmenu.Bind(wx.EVT_MENU, self.handleSelection, mitem) self.fitLookup[id] = fit m.Append(mitem) return m
def getSubMenu(self, context, selection, rootMenu, i, pitem): msw = True if "wxMSW" in wx.PlatformInfo else False sMkt = service.Market.getInstance() effdata = sMkt.getSystemWideEffects() self.idmap = {} sub = wx.Menu() for swType in sorted(effdata): subItem = wx.MenuItem(sub, wx.ID_ANY, swType) grandSub = wx.Menu() subItem.SetSubMenu(grandSub) sub.AppendItem(subItem) for swData in sorted(effdata[swType], key=lambda tpl: tpl[2]): wxid = ContextMenu.nextID() swObj, swName, swClass = swData self.idmap[wxid] = (swObj, swName) grandSubItem = wx.MenuItem(grandSub, wxid, swClass) if msw: rootMenu.Bind(wx.EVT_MENU, self.handleSelection, grandSubItem) else: grandSub.Bind(wx.EVT_MENU, self.handleSelection, grandSubItem) grandSub.AppendItem(grandSubItem) return sub
def spawnMenu(self, event): item = event.GetItem() self.skillTreeListCtrl.Select(item) thing = self.skillTreeListCtrl.GetFirstChild(item).IsOk() if thing: return id = self.skillTreeListCtrl.GetItemData(item)[1] eveItem = Market.getInstance().getItem(id) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) menu = ContextMenu.getMenu(eveItem, [eveItem], context) char = self.charEditor.entityEditor.getActiveEntity() if char.name not in ("All 0", "All 5"): menu.AppendSeparator() menu.Append(self.idUnlearned, "Unlearn") for level in range(6): menu.Append(self.idLevels[level], "Level %d" % level) # Doesn't make sense to have these menu items here, as they do not revert skill changes # done in an editor - because these changes are persisted anyway # menu.AppendSeparator() # menu.Append(self.revertID, "Revert") # menu.Append(self.saveID, "Save") menu.Bind(wx.EVT_MENU, self.changeLevel) self.PopupMenu(menu)
def addOption(self, menu, option): label = option id = ContextMenu.nextID() self.optionIds[id] = option menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK) menu.Bind(wx.EVT_MENU, self.handleMode, menuItem) return menuItem
def spawnMenu(self): if self.activeFitID is None: return sMkt = service.Market.getInstance() selection = [] sel = self.GetFirstSelected() contexts = [] while sel != -1: mod = self.mods[self.GetItemData(sel)] if not mod.isEmpty: srcContext = "fittingModule" itemContext = sMkt.getCategoryByItem(mod.item).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) if mod.charge is not None: srcContext = "fittingCharge" itemContext = sMkt.getCategoryByItem(mod.charge).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) selection.append(mod) sel = self.GetNextSelected(sel) contexts.append(("fittingShip", "Ship")) menu = ContextMenu.getMenu(selection, *contexts) self.PopupMenu(menu)
def getSubMenu(self, context, selection, rootMenu, i, pitem): """ A note on the selection here: Most context menus act on a fit, so it's easy enough to get the active fit from the MainFrame instance. There's never been a reason to get info from another window, so there's not common way of doing this. However, we use this context menu within the Character Editor to apply implant sets to a character, so we need to access the character editor. It is for these reasons that I hijack the selection parameter when calling the menu and pass a pointer to the Character Editor. This way we can use it to get current editing character ID and apply the implants. It would probably be better to have a function on the MainFrame to get the currently open Character Editor (as we do with the item stats window). Eventually... Until then, this long ass note will remain to remind me why stupid shit like this is even happening. """ m = wx.Menu() bindmenu = rootMenu if "wxMSW" in wx.PlatformInfo else m sIS = s_ImplantSets.getInstance() implantSets = sIS.getImplantSetList() self.context = context if len(selection) == 1: self.selection = selection[0] # dirty hack here self.idmap = {} for set in implantSets: id = ContextMenu.nextID() mitem = wx.MenuItem(rootMenu, id, set.name) bindmenu.Bind(wx.EVT_MENU, self.handleSelection, mitem) self.idmap[id] = set m.Append(mitem) return m
def click(self, event): event.Skip() row, _ = self.HitTest(event.Position) if row != -1: item = self.get(row) col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left") wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) elif event.Button == 3: if isinstance(item, eos.types.Drone): context = ("projectedDrone",) elif isinstance(item, eos.types.Module): if item.charge is not None: context = ("projectedModule", "projectedAmmo") else: context = ("projectedModule",) else: context = ("projectedFit",) menu = ContextMenu.getMenu((item,), *context) if menu is not None: self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: cFit = service.Fit.getInstance() fit = cFit.getFit(self.mainFrame.getActiveFit()) menu = ContextMenu.getMenu((fit.boosters[sel],), "booster") self.PopupMenu(menu)
def getSubMenu(self, context, selection, rootMenu, i, pitem): self.moduleLookup = {} def get_metalevel(x): if "metaLevel" not in x.attributes: return 0 return x.attributes["metaLevel"].value def get_metagroup(x): return x.metaGroup.ID if x.metaGroup is not None else 0 m = wx.Menu() # If on Windows we need to bind out events into the root menu, on other # platforms they need to go to our sub menu if "wxMSW" in wx.PlatformInfo: bindmenu = rootMenu else: bindmenu = m # Sort items by metalevel, and group within that metalevel items = list(self.variations) items.sort(key=get_metalevel) items.sort(key=get_metagroup) group = None for item in items: # Apparently no metaGroup for the Tech I variant: if item.metaGroup is None: thisgroup = "Tech I" else: thisgroup = item.metaGroup.name if thisgroup != group: group = thisgroup id = ContextMenu.nextID() m.Append(id, u'─ %s ─' % group) m.Enable(id, False) id = ContextMenu.nextID() mitem = wx.MenuItem(rootMenu, id, item.name) bindmenu.Bind(wx.EVT_MENU, self.handleModule, mitem) self.moduleLookup[id] = item m.AppendItem(mitem) return m
def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: sFit = Fit.getInstance() item = self.boosters[sel] srcContext = "boosterItem" itemContext = "Booster" menu = ContextMenu.getMenu((item,), (srcContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: fighter = self.fighters[sel] sMkt = service.Market.getInstance() sourceContext = "fighterItem" itemContext = sMkt.getCategoryByItem(fighter.item).name menu = ContextMenu.getMenu((fighter,), (sourceContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: drone = self.drones[sel] sMkt = service.Market.getInstance() sourceContext = "droneItem" itemContext = sMkt.getCategoryByItem(drone.item).name menu = ContextMenu.getMenu((drone,), (sourceContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): context = (("implantEditor",),) # f**k good coding practices, passing a pointer to the character editor here for [reasons] =D # (see implantSets context class for info) menu = ContextMenu.getMenu((self.Parent.Parent,), *context) if menu: self.PopupMenu(menu) else: pyfalog.debug("ContextMenu.getMenu returned false do not attempt PopupMenu")
def spawnMenu(self): sel = self.GetFirstSelected() menu = None if sel != -1: item = self.get(sel) if item is None: return sMkt = service.Market.getInstance() fitSrcContext = "commandFit" fitItemContext = item.name context = ((fitSrcContext,fitItemContext),) context = context + (("command",),) menu = ContextMenu.getMenu((item,), *context) elif sel == -1: fitID = self.mainFrame.getActiveFit() if fitID is None: return context = (("command",),) menu = ContextMenu.getMenu([], *context) if menu is not None: self.PopupMenu(menu)
def addSkill(self, rootMenu, skill, i): if i < 0: label = "Not Learned" else: label = "Level %s" % i id = ContextMenu.nextID() self.skillIds[id] = (skill, i) menuItem = wx.MenuItem(rootMenu, id, label, kind=wx.ITEM_RADIO) rootMenu.Bind(wx.EVT_MENU, self.handleSkillChange, menuItem) return menuItem
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: sFit = Fit.getInstance() fit = sFit.getFit(self.mainFrame.getActiveFit()) item = fit.boosters[sel] srcContext = "boosterItem" itemContext = "Booster" menu = ContextMenu.getMenu((item,), (srcContext, itemContext)) self.PopupMenu(menu)
def click(self, event): event.Skip() row, _ = self.HitTest(event.Position) if row != -1: item = self.get(row) col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() sFit = service.Fit.getInstance() sFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left") wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) elif event.Button == 3: sMkt = service.Market.getInstance() if isinstance(item, eos.types.Drone): srcContext = "projectedDrone" itemContext = sMkt.getCategoryByItem(item.item).name context = ((srcContext, itemContext),) elif isinstance(item, eos.types.Module): modSrcContext = "projectedModule" modItemContext = sMkt.getCategoryByItem(item.item).name modFullContext = (modSrcContext, modItemContext) if item.charge is not None: chgSrcContext = "projectedCharge" chgItemContext = sMkt.getCategoryByItem(item.charge).name chgFullContext = (chgSrcContext, chgItemContext) context = (modFullContext, chgFullContext) else: context = (modFullContext,) else: context = (("projectedFit",),) menu = ContextMenu.getMenu((item,), *context) if menu is not None: self.PopupMenu(menu) elif row == -1 and event.Button == 3: fitID = self.mainFrame.getActiveFit() if fitID is None: return context = (("projectedNone",),) menu = ContextMenu.getMenu([], *context) if menu is not None: self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: sFit = service.Fit.getInstance() fit = sFit.getFit(self.mainFrame.getActiveFit()) implant = fit.implants[sel] sMkt = service.Market.getInstance() sourceContext = "implantItem" itemContext = sMkt.getCategoryByItem(implant.item).name menu = ContextMenu.getMenu((implant,), (sourceContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): sel = self.GetFirstSelected() if sel != -1: cFit = service.Fit.getInstance() fit = cFit.getFit(self.mainFrame.getActiveFit()) cargo = fit.cargo[sel] sMkt = service.Market.getInstance() sourceContext = "cargoItem" itemContext = sMkt.getCategoryByItem(cargo.item).name menu = ContextMenu.getMenu((cargo,), (sourceContext, itemContext)) self.PopupMenu(menu)
def addCharge(self, menu, charge): id = ContextMenu.nextID() name = charge.name if charge is not None else "Empty" self.chargeIds[id] = charge item = wx.MenuItem(menu, id, name) menu.Bind(wx.EVT_MENU, self.handleAmmoSwitch, item) item.charge = charge if charge is not None and charge.icon is not None: bitmap = BitmapLoader.getBitmap(charge.icon.iconFile, "icons") if bitmap is not None: item.SetBitmap(bitmap) return item
def contextMenu(self, event): # Check if something is selected, if so, spawn the menu for it sel = self.GetFirstSelected() if sel == -1: return item = self.active[sel] sMkt = self.sMkt sourceContext = "marketItemGroup" if self.marketBrowser.searchMode is False else "marketItemMisc" itemContext = sMkt.getCategoryByItem(item).name menu = ContextMenu.getMenu((item,), (sourceContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): if self.activeFitID is None: return sMkt = service.Market.getInstance() selection = [] sel = self.GetFirstSelected() contexts = [] while sel != -1 and sel not in self.blanks: mod = self.mods[self.GetItemData(sel)] # Test if this is a mode, which is a special snowflake of a Module if isinstance(mod, Mode): srcContext = "fittingMode" itemContext = "Tactical Mode" fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) selection.append(mod) elif not mod.isEmpty: srcContext = "fittingModule" itemContext = sMkt.getCategoryByItem(mod.item).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) if mod.charge is not None: srcContext = "fittingCharge" itemContext = sMkt.getCategoryByItem(mod.charge).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) selection.append(mod) sel = self.GetNextSelected(sel) sFit = service.Fit.getInstance() fit = sFit.getFit(self.activeFitID) contexts.append(("fittingShip", "Ship" if not fit.isStructure else "Citadel")) menu = ContextMenu.getMenu(selection, *contexts) self.PopupMenu(menu)
def spawnMenu(self, item): self.affectedBy.SelectItem(item) stuff = self.affectedBy.GetPyData(item) # String is set as data when we are dealing with attributes, not stuff containers if stuff is None or isinstance(stuff, basestring): return contexts = [] # Skills are different in that they don't have itemModifiedAttributes, # which is needed if we send the container to itemStats dialog. So # instead, we send the item. type = stuff.__class__.__name__ contexts.append(("itemStats", type)) menu = ContextMenu.getMenu(stuff if type != "Skill" else stuff.item, *contexts) self.PopupMenu(menu)
def spawnMenu(self, event): selection = self.getSelectedDrones() clickedPos = self.getRowByAbs(event.Position) mainDrone = None if clickedPos != -1: try: drone = self.drones[clickedPos] except IndexError: pass else: if drone in self.original: mainDrone = drone sourceContext = "droneItem" itemContext = None if mainDrone is None else Market.getInstance().getCategoryByItem(mainDrone.item).name menu = ContextMenu.getMenu(mainDrone, selection, (sourceContext, itemContext)) if menu: self.PopupMenu(menu)
def spawnMenu(self, event): selection = self.getSelectedFighters() clickedPos = self.getRowByAbs(event.Position) mainFighter = None if clickedPos != -1: try: fighter = self.fighters[clickedPos] except IndexError: pass else: if fighter in self.original: mainFighter = fighter sourceContext = "fighterItem" itemContext = None if mainFighter is None else Market.getInstance().getCategoryByItem(mainFighter.item).name menu = ContextMenu.getMenu(self, mainFighter, selection, (sourceContext, itemContext)) if menu: self.PopupMenu(menu)
def getSubMenu(self, context, selection, rootMenu, i, pitem): msw = True if "wxMSW" in wx.PlatformInfo else False self.patternIds = {} self.subMenus = OrderedDict() self.singles = [] sub = wx.Menu() for pattern in self.patterns: start, end = pattern.name.find('['), pattern.name.find(']') if start is not -1 and end is not -1: currBase = pattern.name[start + 1:end] # set helper attr setattr(pattern, "_name", pattern.name[end + 1:].strip()) if currBase not in self.subMenus: self.subMenus[currBase] = [] self.subMenus[currBase].append(pattern) else: self.singles.append(pattern) sub.AppendItem(self.addPattern(rootMenu if msw else sub, None)) # Add reset sub.AppendSeparator() # Single items, no parent for pattern in self.singles: sub.AppendItem(self.addPattern(rootMenu if msw else sub, pattern)) # Items that have a parent for menuName, patterns in self.subMenus.items(): # Create parent item for root menu that is simply name of parent item = wx.MenuItem(rootMenu, ContextMenu.nextID(), menuName) # Create menu for child items grandSub = wx.Menu() # sub.Bind(wx.EVT_MENU, self.handleResistSwitch) # Apply child menu to parent item item.SetSubMenu(grandSub) # Append child items to child menu for pattern in patterns: grandSub.AppendItem( self.addPattern(rootMenu if msw else grandSub, pattern)) sub.AppendItem(item) # finally, append parent item to root menu return sub
def contextMenu(self, event): clickedPos = self.getRowByAbs(event.Position) self.ensureSelection(clickedPos) # Check if something is selected, if so, spawn the menu for it if clickedPos == -1: return item = self.active[clickedPos] sMkt = self.sMkt sourceContext = "marketItemMisc" if self.marketBrowser.mode in ( "search", "recent") else "marketItemGroup" itemContext = sMkt.getCategoryByItem(item).name menu = ContextMenu.getMenu(self, item, (item, ), (sourceContext, itemContext)) self.PopupMenu(menu)
def spawnMenu(self): fitID = self.mainFrame.getActiveFit() if fitID is None: return sel = self.GetFirstSelected() context = () item = self.get(sel) if item is not None: fitSrcContext = "commandFit" fitItemContext = item.name context = ((fitSrcContext, fitItemContext),) context += (("commandView",),) menu = ContextMenu.getMenu((item,) if item is not None else [], *context) if menu is not None: self.PopupMenu(menu)
def spawnMenu(self, event): item, _ = self.affectedBy.HitTest(self.ScreenToClient(event.Position)) self.affectedBy.SelectItem(item) stuff = self.affectedBy.GetItemData(item) # String is set as data when we are dealing with attributes, not stuff containers if stuff is None or isinstance(stuff, str): return contexts = [] # Skills are different in that they don't have itemModifiedAttributes, # which is needed if we send the container to itemStats dialog. So # instead, we send the item. type_ = stuff.__class__.__name__ contexts.append(("itemStats", type_)) stuff = stuff if type_ != "Skill" else stuff.item menu = ContextMenu.getMenu(self, stuff, (stuff, ), *contexts) self.PopupMenu(menu)
def spawnMenu(self, event): clickedPos = self.getRowByAbs(event.Position) self.ensureSelection(clickedPos) selection = self.getSelectedBoosters() mainBooster = None if clickedPos != -1: try: booster = self.boosters[clickedPos] except IndexError: pass else: if booster in self.original: mainBooster = booster itemContext = None if mainBooster is None else "Booster" menu = ContextMenu.getMenu(self, mainBooster, selection, ("boosterItem", itemContext), ("boosterItemMisc", itemContext)) if menu: self.PopupMenu(menu)
def spawnMenu(self, event): clickedPos = self.getRowByAbs(event.Position) self.ensureSelection(clickedPos) selection = self.getSelectedCargos() mainCargo = None if clickedPos != -1: try: cargo = self.cargo[clickedPos] except IndexError: pass else: if cargo in self.original: mainCargo = cargo itemContext = None if mainCargo is None else Market.getInstance().getCategoryByItem(mainCargo.item).name menu = ContextMenu.getMenu(self, mainCargo, selection, ("cargoItem", itemContext), ("cargoItemMisc", itemContext)) if menu: self.PopupMenu(menu)
def spawnMenu(self, event): clickedPos = self.getRowByAbs(event.Position) self.ensureSelection(clickedPos) selection = self.getSelectedCommandFits() mainCommandFit = None if clickedPos != -1: try: mainCommandFit = self.fits[clickedPos] except IndexError: pass contexts = [] if mainCommandFit is not None: contexts.append(('commandFit', 'Command Fit')) contexts.append(('commandView', )) menu = ContextMenu.getMenu(self, mainCommandFit, selection, *contexts) if menu: self.PopupMenu(menu)
def spawnMenu(self, event): fitID = self.mainFrame.getActiveFit() if fitID is None: return if self.getColumn(self.ScreenToClient(event.Position)) == self.getColIndex(State): return sel = self.GetFirstSelected() context = () item = self.get(sel) if item is not None: sMkt = Market.getInstance() if isinstance(item, es_Drone): srcContext = "projectedDrone" itemContext = sMkt.getCategoryByItem(item.item).name context = ((srcContext, itemContext),) elif isinstance(item, es_Fighter): srcContext = "projectedFighter" itemContext = sMkt.getCategoryByItem(item.item).name context = ((srcContext, itemContext),) elif isinstance(item, es_Module): modSrcContext = "projectedModule" modItemContext = sMkt.getCategoryByItem(item.item).name modFullContext = (modSrcContext, modItemContext) if item.charge is not None: chgSrcContext = "projectedCharge" chgItemContext = sMkt.getCategoryByItem(item.charge).name chgFullContext = (chgSrcContext, chgItemContext) context = (modFullContext, chgFullContext) else: context = (modFullContext,) else: fitSrcContext = "projectedFit" fitItemContext = "Fit" context = ((fitSrcContext, fitItemContext),) context += (("projected",),) menu = ContextMenu.getMenu((item,) if item is not None else [], *context) if menu is not None: self.PopupMenu(menu)
def buildMenu(self, data, local_menu, rootMenu, msw): for swType in sorted(data): subItem = wx.MenuItem(local_menu, wx.ID_ANY, swType) grandSub = wx.Menu() subItem.SetSubMenu(grandSub) local_menu.Append(subItem) for swData in sorted(data[swType], key=lambda tpl: tpl[2]): wxid = ContextMenu.nextID() swObj, swName, swClass = swData self.idmap[wxid] = (swObj, swName) grandSubItem = wx.MenuItem(grandSub, wxid, swClass) if msw: rootMenu.Bind(wx.EVT_MENU, self.handleSelection, grandSubItem) else: grandSub.Bind(wx.EVT_MENU, self.handleSelection, grandSubItem) grandSub.Append(grandSubItem)
def spawnMenu(self, event): selection = self.getSelectedImplants() clickedPos = self.getRowByAbs(event.Position) mainImplant = None if clickedPos != -1: try: implant = self.implants[clickedPos] except IndexError: pass else: if implant in self.original: mainImplant = implant fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) sourceContext1 = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" sourceContext2 = "implantView" if fit.implantSource == ImplantLocation.FIT else "implantViewChar" itemContext = None if mainImplant is None else Market.getInstance().getCategoryByItem(mainImplant.item).name menu = ContextMenu.getMenu(mainImplant, selection, (sourceContext1, itemContext), (sourceContext2, itemContext)) if menu: self.PopupMenu(menu)
def spawnMenu(self): if self.activeFitID is None: return cFit = service.Fit.getInstance() selection = [] sel = self.GetFirstSelected() contexts = [] if sel != -1: mod = self.mods[self.GetItemData(sel)] if not mod.isEmpty: contexts.append("module") if mod.charge is not None and "ammo" not in contexts: contexts.append("ammo") selection.append(mod) contexts.append("ship") menu = ContextMenu.getMenu(selection, *contexts) self.PopupMenu(menu)
def addPattern(self, rootMenu, pattern): id = ContextMenu.nextID() name = getattr(pattern, "_name", pattern.name) if pattern is not None else "No Profile" self.patternIds[id] = pattern item = wx.MenuItem(rootMenu, id, name) rootMenu.Bind(wx.EVT_MENU, self.handleResistSwitch, item) # set pattern attr to menu item item.pattern = pattern # determine active pattern sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() f = sFit.getFit(fitID) tr = f.targetResists if tr == pattern: bitmap = BitmapLoader.getBitmap("state_active_small", "gui") item.SetBitmap(bitmap) return item
def getSubMenu(self, context, selection, rootMenu, i, pitem): if selection[0].isMutated: return None msw = True if "wxMSW" in wx.PlatformInfo else False self.skillIds = {} sub = wx.Menu() mod = selection[0] menu = rootMenu if msw else sub for item in mod.item.mutaplasmids: label = item.item.name id = ContextMenu.nextID() self.eventIDs[id] = (item, mod) skillItem = wx.MenuItem(menu, id, label) menu.Bind(wx.EVT_MENU, self.handleMenu, skillItem) sub.Append(skillItem) return sub
def spawnMenu(self, event): clickedPos = self.getRowByAbs(event.Position) self.ensureSelection(clickedPos) mainDrone = None if clickedPos != -1: try: drone = self.drones[clickedPos] except IndexError: pass else: if drone in self.original: mainDrone = drone selection = self.getSelectedDrones() itemContext = None if mainDrone is None else Market.getInstance( ).getCategoryByItem(mainDrone.item).displayName menu = ContextMenu.getMenu(self, mainDrone, selection, ("droneItem", itemContext), ("droneItemMisc", itemContext)) if menu: self.PopupMenu(menu)
def updateControls(self, layout=True): if layout: self.Freeze() self._clearStoredValues() view = self.graphFrame.getView() self.refreshAxeLabels() # Vectors self._setVectorDefaults() if view.srcVectorDef is not None: self.srcVector.Show(True) self.srcVectorLabel.Show(True) self.srcVectorLabel.SetLabel(view.srcVectorDef.label) else: self.srcVector.Show(False) self.srcVectorLabel.Show(False) if view.tgtVectorDef is not None: self.tgtVector.Show(True) self.tgtVectorLabel.Show(True) self.tgtVectorLabel.SetLabel(view.tgtVectorDef.label) else: self.tgtVector.Show(False) self.tgtVectorLabel.Show(False) # Source and target list self.refreshColumns(layout=False) self.targetList.Show(view.hasTargets) # Inputs self._updateInputs(storeInputs=False) # Context icon self.contextIcon.Show( ContextMenu.hasMenu(self, None, None, (view.internalName, ))) if layout: self.graphFrame.Layout() self.graphFrame.UpdateWindowSize() self.Thaw()
def getSubMenu(self, context, selection, rootMenu, i, pitem): msw = True if "wxMSW" in wx.PlatformInfo else False self.skillIds = {} sub = wx.Menu() for skill in self.skills: skillItem = wx.MenuItem(sub, ContextMenu.nextID(), skill.item.name) grandSub = wx.Menu() skillItem.SetSubMenu(grandSub) if skill.learned: bitmap = BitmapLoader.getBitmap("lvl%s" % skill.level, "gui") if bitmap is not None: skillItem.SetBitmap(bitmap) for i in xrange(-1, 6): levelItem = self.addSkill(rootMenu if msw else grandSub, skill, i) grandSub.AppendItem(levelItem) if (not skill.learned and i == -1) or (skill.learned and skill.level == i): levelItem.Check(True) sub.AppendItem(skillItem) return sub
def spawnMenu(self, event): item = event.GetItem() self.skillTreeListCtrl.Select(item) thing = self.skillTreeListCtrl.GetFirstChild(item).IsOk() if thing: return id = self.skillTreeListCtrl.GetItemData(item)[1] eveItem = Market.getInstance().getItem(id) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) menu = ContextMenu.getMenu(self, eveItem, [eveItem], context) char = self.charEditor.entityEditor.getActiveEntity() if char.name not in ("All 0", "All 5"): menu.AppendSeparator() menu.Append(self.idUnlearned, "Unlearn") for level in range(6): menu.Append(self.idLevels[level], "Level %d" % level) menu.Bind(wx.EVT_MENU, self.changeLevel) self.PopupMenu(menu)
def spawnMenu(self): if self.activeFitID is None: return sMkt = service.Market.getInstance() selection = [] sel = self.GetFirstSelected() contexts = [] while sel != -1 and sel not in self.blanks: mod = self.mods[self.GetItemData(sel)] if not mod.isEmpty: srcContext = "fittingModule" itemContext = sMkt.getCategoryByItem(mod.item).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) if mod.charge is not None: srcContext = "fittingCharge" itemContext = sMkt.getCategoryByItem(mod.charge).name fullContext = (srcContext, itemContext) if not srcContext in tuple(fCtxt[0] for fCtxt in contexts): contexts.append(fullContext) selection.append(mod) sel = self.GetNextSelected(sel) sFit = service.Fit.getInstance() fit = sFit.getFit(self.activeFitID) contexts.append( ("fittingShip", "Ship" if not fit.isStructure else "Citadel")) menu = ContextMenu.getMenu(selection, *contexts) self.PopupMenu(menu)
def contextMenuHandler(self, event): viewName = self.graphFrame.getView().internalName menu = ContextMenu.getMenu(self, None, None, (viewName, )) if menu is not None: self.PopupMenu(menu) event.Skip()
def spawnMenu(self): context = (("implantEditor", ), ) # f**k good coding practices, passing a pointer to the character editor here for [reasons] =D # (see implantSets context class for info) menu = ContextMenu.getMenu((self.Parent.Parent, ), *context) self.PopupMenu(menu)
def __init__(self, parent): wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL) self.charEditor = self.Parent.Parent # first parent is Notebook, second is Character Editor self.SetBackgroundColour( wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) pmainSizer = wx.BoxSizer(wx.VERTICAL) tree = self.skillTreeListCtrl = wx.gizmos.TreeListCtrl( self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) self.skillBookImageId = self.imageList.Add( BitmapLoader.getBitmap("skill_small", "gui")) tree.AddColumn("Skill") tree.AddColumn("Level") tree.SetMainColumn(0) self.root = tree.AddRoot("Skills") tree.SetItemText(self.root, "Levels", 1) tree.SetColumnWidth(0, 500) self.populateSkillTree() tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) # bind the Character selection event self.charEditor.entityEditor.Bind(wx.EVT_CHOICE, self.populateSkillTree) self.charEditor.Bind(GE.CHAR_LIST_UPDATED, self.populateSkillTree) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) self.statsMenu = ContextMenu.getMenu(None, context) self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() self.levelChangeMenu.AppendSeparator() self.levelIds = {} idUnlearned = wx.NewId() self.levelIds[idUnlearned] = "Not learned" self.levelChangeMenu.Append(idUnlearned, "Unlearn") for level in xrange(6): id = wx.NewId() self.levelIds[id] = level self.levelChangeMenu.Append(id, "Level %d" % level) self.levelChangeMenu.AppendSeparator() self.revertID = wx.NewId() self.levelChangeMenu.Append(self.revertID, "Revert") self.saveID = wx.NewId() self.levelChangeMenu.Append(self.saveID, "Save") self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) self.SetSizer(pmainSizer) self.Layout()
def __init__(self, parent): wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL) self.charEditor = self.Parent.Parent # first parent is Notebook, second is Character Editor self.SetBackgroundColour( wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) pmainSizer = wx.BoxSizer(wx.VERTICAL) hSizer = wx.BoxSizer(wx.HORIZONTAL) self.clonesChoice = wx.Choice(self, wx.ID_ANY, style=0) i = self.clonesChoice.Append("Omega Clone", None) self.clonesChoice.SetSelection(i) hSizer.Add(self.clonesChoice, 5, wx.ALL | wx.EXPAND, 5) self.searchInput = PlaceholderTextCtrl(self, wx.ID_ANY, placeholder="Search...") hSizer.Add(self.searchInput, 1, wx.ALL | wx.EXPAND, 5) self.searchInput.Bind(wx.EVT_TEXT, self.delaySearch) sChar = Character.getInstance() self.alphaClones = sChar.getAlphaCloneList() char = self.charEditor.entityEditor.getActiveEntity() for clone in self.alphaClones: i = self.clonesChoice.Append(clone.alphaCloneName, clone.ID) if clone.ID == char.alphaCloneID: self.clonesChoice.SetSelection(i) self.clonesChoice.Bind(wx.EVT_CHOICE, self.cloneChanged) self.clonesChoice.SetToolTip( wx.ToolTip( "Setting an Alpha clone does not replace the character's skills, but rather caps them to Alpha levels." )) pmainSizer.Add(hSizer, 0, wx.EXPAND | wx.ALL, 5) # Set up timer for skill search self.searchTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.populateSkillTreeSkillSearch, self.searchTimer) tree = self.skillTreeListCtrl = wx.gizmos.TreeListCtrl( self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) self.skillBookImageId = self.imageList.Add( BitmapLoader.getBitmap("skill_small", "gui")) tree.AddColumn("Skill") tree.AddColumn("Level") tree.SetMainColumn(0) self.root = tree.AddRoot("Skills") tree.SetItemText(self.root, "Levels", 1) tree.SetColumnWidth(0, 500) self.btnSecStatus = wx.Button( self, wx.ID_ANY, "Sec Status: {0:.2f}".format(char.secStatus or 0.0)) self.btnSecStatus.Bind(wx.EVT_BUTTON, self.onSecStatus) self.populateSkillTree() tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) bSizerButtons.Add(self.btnSecStatus, 0, wx.ALL, 5) pmainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5) # bind the Character selection event self.charEditor.entityEditor.Bind(wx.EVT_CHOICE, self.charChanged) self.charEditor.Bind(GE.CHAR_LIST_UPDATED, self.populateSkillTree) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) self.statsMenu = ContextMenu.getMenu(None, context) self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() self.levelChangeMenu.AppendSeparator() self.levelIds = {} idUnlearned = wx.NewId() self.levelIds[idUnlearned] = "Not learned" self.levelChangeMenu.Append(idUnlearned, "Unlearn") for level in xrange(6): id = wx.NewId() self.levelIds[id] = level self.levelChangeMenu.Append(id, "Level %d" % level) self.levelChangeMenu.AppendSeparator() self.revertID = wx.NewId() self.levelChangeMenu.Append(self.revertID, "Revert") self.saveID = wx.NewId() self.levelChangeMenu.Append(self.saveID, "Save") self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) self.SetSizer(pmainSizer) self.Layout()
def getSubMenu(self, context, selection, rootMenu, i, pitem): self.moduleLookup = {} def get_metalevel(x): if "metaLevel" not in x.attributes: return 0 return x.attributes["metaLevel"].value def get_metagroup(x): return x.metaGroup.ID if x.metaGroup is not None else 0 def get_boosterrank(x): # If we're returning a lot of items, sort my name if len(self.variations) > 7: return x.name # Sort by booster chance to get some sort of pseudorank. elif 'boosterEffectChance1' in x.attributes: return x.attributes['boosterEffectChance1'].value # the "first" rank (Synth) doesn't have boosterEffectChance1. If we're not pulling back all boosters, return 0 for proper sorting else: return 0 m = wx.Menu() # If on Windows we need to bind out events into the root menu, on other # platforms they need to go to our sub menu if "wxMSW" in wx.PlatformInfo: bindmenu = rootMenu else: bindmenu = m # Sort items by metalevel, and group within that metalevel items = list(self.variations) print context if "implantItem" in context: # sort implants based on name items.sort(key=lambda x: x.name) elif "boosterItem" in context: # boosters don't have meta or anything concrete that we can rank by. Go by chance to inflict side effect items.sort(key=get_boosterrank) else: # sort by group and meta level items.sort(key=get_metalevel) items.sort(key=get_metagroup) group = None for item in items: # Apparently no metaGroup for the Tech I variant: if item.metaGroup is None: thisgroup = "Tech I" else: thisgroup = item.metaGroup.name if thisgroup != group and context not in ("implantItem", "boosterItem"): group = thisgroup id = ContextMenu.nextID() m.Append(id, u'─ %s ─' % group) m.Enable(id, False) id = ContextMenu.nextID() mitem = wx.MenuItem(rootMenu, id, item.name) bindmenu.Bind(wx.EVT_MENU, self.handleModule, mitem) self.moduleLookup[id] = item m.AppendItem(mitem) return m
def handler(event): menu = ContextMenu.getMenu(None, (viewName,)) if menu is not None: contentPanel.PopupMenu(menu) event.Skip()
def addSeperator(m, text): id_ = ContextMenu.nextID() m.Append(id_, '─ %s ─' % text) m.Enable(id_, False)
def __init__(self, parent): wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL) self.charEditor = self.Parent.Parent # first parent is Notebook, second is Character Editor self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW)) pmainSizer = wx.BoxSizer(wx.VERTICAL) hSizer = wx.BoxSizer(wx.HORIZONTAL) self.clonesChoice = wx.Choice(self, wx.ID_ANY, style=0) i = self.clonesChoice.Append("Omega Clone", None) self.clonesChoice.SetSelection(i) hSizer.Add(self.clonesChoice, 5, wx.ALL | wx.EXPAND, 5) self.searchInput = PlaceholderTextCtrl(self, wx.ID_ANY, placeholder="Search...") hSizer.Add(self.searchInput, 1, wx.ALL | wx.EXPAND, 5) self.searchInput.Bind(wx.EVT_TEXT, self.delaySearch) sChar = Character.getInstance() self.alphaClones = sChar.getAlphaCloneList() char = self.charEditor.entityEditor.getActiveEntity() for clone in self.alphaClones: i = self.clonesChoice.Append(clone.alphaCloneName, clone.ID) if clone.ID == char.alphaCloneID: self.clonesChoice.SetSelection(i) self.clonesChoice.Bind(wx.EVT_CHOICE, self.cloneChanged) self.clonesChoice.SetToolTip( wx.ToolTip("Setting an Alpha clone does not replace the character's skills, but rather caps them to Alpha levels.")) pmainSizer.Add(hSizer, 0, wx.EXPAND | wx.ALL, 5) # Set up timer for skill search self.searchTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.populateSkillTreeSkillSearch, self.searchTimer) tree = self.skillTreeListCtrl = TreeListCtrl(self, wx.ID_ANY, style=wx.dataview.TL_DEFAULT_STYLE) pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) self.skillBookImageId = self.imageList.Add(wx.Icon(BitmapLoader.getBitmap("skill_small", "gui"))) self.skillBookDirtyImageId = self.imageList.Add(wx.Icon(BitmapLoader.getBitmap("skill_small_red", "gui"))) tree.AppendColumn("Skill") tree.AppendColumn("Level") # tree.SetMainColumn(0) self.root = tree.GetRootItem() # self.root = tree.AppendItem(root, "Skills") # # tree.SetItemText(self.root, 1, "Levels") # tree.SetColumnWidth(0, 300) self.btnSecStatus = wx.Button(self, wx.ID_ANY, "Sec Status: {0:.2f}".format(char.secStatus or 0.0)) self.btnSecStatus.Bind(wx.EVT_BUTTON, self.onSecStatus) self.populateSkillTree() tree.Bind(wx.dataview.EVT_TREELIST_ITEM_EXPANDING, self.expandLookup) tree.Bind(wx.dataview.EVT_TREELIST_ITEM_CONTEXT_MENU, self.scheduleMenu) bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) bSizerButtons.Add(self.btnSecStatus, 0, wx.ALL, 5) bSizerButtons.AddStretchSpacer() importExport = (("Import", wx.ART_FILE_OPEN, "from"), ("Export", wx.ART_FILE_SAVE_AS, "to")) for name, art, direction in importExport: bitmap = wx.ArtProvider.GetBitmap(art, wx.ART_BUTTON) btn = wx.BitmapButton(self, wx.ID_ANY, bitmap) btn.SetMinSize(btn.GetSize()) btn.SetMaxSize(btn.GetSize()) btn.Layout() setattr(self, "{}Btn".format(name.lower()), btn) btn.Enable(True) btn.SetToolTip("%s skills %s clipboard" % (name, direction)) bSizerButtons.Add(btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_RIGHT | wx.ALL, 5) btn.Bind(wx.EVT_BUTTON, getattr(self, "{}Skills".format(name.lower()))) pmainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5) # bind the Character selection event self.charEditor.entityEditor.Bind(wx.EVT_CHOICE, self.charChanged) self.charEditor.Bind(GE.CHAR_LIST_UPDATED, self.populateSkillTree) srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) self.statsMenu = ContextMenu.getMenu(None, context) self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() self.levelChangeMenu.AppendSeparator() self.levelIds = {} idUnlearned = wx.NewId() self.levelIds[idUnlearned] = "Not learned" self.levelChangeMenu.Append(idUnlearned, "Unlearn") for level in range(6): id = wx.NewId() self.levelIds[id] = level self.levelChangeMenu.Append(id, "Level %d" % level) self.levelChangeMenu.AppendSeparator() self.revertID = wx.NewId() self.levelChangeMenu.Append(self.revertID, "Revert") self.saveID = wx.NewId() self.levelChangeMenu.Append(self.saveID, "Save") self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) self.SetSizer(pmainSizer) self.Layout()
def getSubMenu(self, context, selection, rootMenu, i, pitem): self.moduleLookup = {} sFit = Fit.getInstance() fit = sFit.getFit(self.mainFrame.getActiveFit()) def get_metalevel(x): if 'metaLevel' not in x.attributes: return 0 return x.attributes['metaLevel'].value def get_metagroup(x): # We want deadspace before officer mods remap = {5: 6, 6: 5} return remap.get(x.metaGroup.ID, x.metaGroup.ID) if x.metaGroup is not None else 0 def get_boosterrank(x): # If we're returning a lot of items, sort my name if len(self.variations) > 7: return x.name # Sort by booster chance to get some sort of pseudorank. elif 'boosterEffectChance1' in x.attributes: return x.attributes['boosterEffectChance1'].value # the "first" rank (Synth) doesn't have boosterEffectChance1. If we're not pulling back all boosters, return 0 for proper sorting else: return 0 m = wx.Menu() # If on Windows we need to bind out events into the root menu, on other # platforms they need to go to our sub menu if 'wxMSW' in wx.PlatformInfo: bindmenu = rootMenu else: bindmenu = m # Sort items by metalevel, and group within that metalevel items = list(self.variations) # Sort all items by name first items.sort(key=lambda x: x.name) # Do not do any extra sorting for implants if 'implantItem' in context: pass # Boosters don't have meta or anything concrete that we can rank by. Go by chance to inflict side effect elif 'boosterItem' in context: items.sort(key=get_boosterrank) else: # sort by group and meta level items.sort(key=get_metalevel) items.sort(key=get_metagroup) group = None for item in items: # Apparently no metaGroup for the Tech I variant: if 'subSystem' in item.effects: thisgroup = item.marketGroup.marketGroupName elif item.metaGroup is None: thisgroup = 'Tech I' else: thisgroup = item.metaGroup.name if thisgroup != group and context not in ('implantItem', 'boosterItem'): group = thisgroup id = ContextMenu.nextID() m.Append(id, '─ %s ─' % group) m.Enable(id, False) id = ContextMenu.nextID() mitem = wx.MenuItem(rootMenu, id, item.name) bindmenu.Bind(wx.EVT_MENU, self.handleModule, mitem) self.moduleLookup[id] = item, context m.Append(mitem) mitem.Enable(fit.canFit(item)) return m