diff --git a/gui/builtinContextMenus/targetResists.py b/gui/builtinContextMenus/targetResists.py index 24904b429..d88e0685a 100644 --- a/gui/builtinContextMenus/targetResists.py +++ b/gui/builtinContextMenus/targetResists.py @@ -18,6 +18,7 @@ class TargetResists(ContextMenu): sTR = service.TargetResists.getInstance() self.patterns = sTR.getTargetResistsList() self.patterns.sort( key=lambda p: (p.name in ["None"], p.name) ) + return len(self.patterns) > 0 def getText(self, itmContext, selection): @@ -39,14 +40,22 @@ class TargetResists(ContextMenu): def addPattern(self, menu, pattern, currBase = None): id = wx.NewId() - name = pattern.name if pattern is not None else "No Profile" - self.patternIds[id] = pattern - if currBase: - item = wx.MenuItem(menu, id, currBase) - else: - item = wx.MenuItem(menu, id, name) + name = getattr(pattern, "_name", pattern.name) if pattern is not None else "No Profile" + self.patternIds[id] = pattern + item = wx.MenuItem(menu, id, name) + # set pattern attr to menu item item.pattern = pattern + + # determine active pattern + sFit = service.Fit.getInstance() + fitID = self.mainFrame.getActiveFit() + f = sFit.getFit(fitID) + tr = f.targetResists + + if tr == pattern: + bitmap = bitmapLoader.getBitmap("state_active_small", "icons") + item.SetBitmap(bitmap) return item def addSeperator(self, m, text): @@ -61,38 +70,45 @@ class TargetResists(ContextMenu): m.Bind(wx.EVT_MENU, self.handleResistSwitch) self.patternIds = {} - # @todo: this whole thing is a mess, please fix - # Maybe look into processing resists into a dict and iterating through - # dict to make submenus instead of this shitty logic - items = [] - nameBase = None - sub = None + self.subMenus = {} + self.singles = [] - m.AppendItem(self.addPattern(m, None)) # Add reset - m.AppendSeparator() - for pattern in self.patterns: + 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: - currBase = None + self.singles.append(pattern) - if nameBase is None or nameBase != currBase: - sub = None - base = pattern - nameBase = currBase - item = self.addPattern(m, pattern, currBase) - items.append(item) - else: - if sub is None: - sub = wx.Menu() - sub.Bind(wx.EVT_MENU, self.handleResistSwitch) - item.SetSubMenu(sub) - sub.AppendItem(self.addPattern(sub, base)) + m.AppendItem(self.addPattern(m, None)) # Add reset + m.AppendSeparator() + # Single items, no parent + for pattern in self.singles: + m.AppendItem(self.addPattern(m, 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(menu, wx.NewId(), menuName) + + # Create menu for child items + sub = wx.Menu() + sub.Bind(wx.EVT_MENU, self.handleResistSwitch) + + # Apply child menu to parent item + item.SetSubMenu(sub) + + # Append child items to child menu + for pattern in patterns: sub.AppendItem(self.addPattern(sub, pattern)) - for item in items: - m.AppendItem(item) + m.AppendItem(item) #finally, append parent item to root menu + return m TargetResists.register()