Skip to content

Commit e95b139

Browse files
committed
Fix to PowerPickerMenu not knowing about its Profile
1 parent 14eecae commit e95b139

1 file changed

Lines changed: 71 additions & 67 deletions

File tree

UI/PowerPicker.py

Lines changed: 71 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def SetValue(self, value):
9393
self.IconFilename = iconfile
9494
self.SetIconFromFilename(iconfile)
9595

96-
class PowerPickerMenu(FM.FlatMenu):
96+
class PowerPickerMenu(ProfileAwareControlMixin, FM.FlatMenu):
9797
def __init__(self, parent):
9898
super().__init__(parent)
9999
self.Bind(FM.EVT_FLAT_MENU_SELECTED, parent.OnMenuSelected)
@@ -105,85 +105,89 @@ def SetSize(self, size):
105105
super().SetSize(size)
106106

107107
def BuildMenu(self) -> None:
108-
gen = self.Profile.General
109-
110-
# primary / secondary / epic powers
111-
archdata = GameData.Archetypes[gen.GetState('Archetype')]
112-
for category in ['Primary', 'Secondary', 'Epic']:
113-
submenu = PowerPickerMenu(self.Parent)
114-
powerset = gen.GetState(category)
115-
if not powerset: continue
116-
self.AppendSubMenu(submenu, f"{category}: {powerset}")
117-
118-
powers = archdata[category][powerset]
119-
for power in powers:
120-
if isinstance(power, dict): # for sub sub menus like Corruptor -> Dual Pistols -> Swap Ammo
121-
[(subsubname, items)] = power.items()
122-
subsubmenu = PowerPickerMenu(self.Parent)
123-
for power in items:
124-
if not self.ShowPower(category, power): continue
125-
icon = GetIcon('Powers', f'{powerset}_{power}')
126-
menuitem = PowerMenuItem(self, power, icon)
127-
subsubmenu.AppendItem(menuitem)
128-
subitem = submenu.AppendSubMenu(subsubmenu, subsubname)
129-
# little bit of wx.Font hoop-jumping just for this corner case, sigh
130-
subitem.SetFont(UI.COHFont())
131-
icon = GetIcon('Powers', f'{powerset}_{subsubname}')
132-
if icon:
133-
subitem.SetNormalBitmap(icon.GetBitmap(wx.Size(32,32)))
134-
135-
else:
136-
if not self.ShowPower(category, power): continue
137-
icon = GetIcon('Powers', f'{powerset}_{power}')
138-
menuitem = PowerMenuItem(self, power, icon)
139-
submenu.AppendItem(menuitem)
108+
if self.Profile:
109+
gen = self.Profile.General
140110

141-
# Pool powers
142-
for poolpicker in ["Pool1", "Pool2", "Pool3", "Pool4"]:
143-
poolname = gen.GetState(poolpicker)
144-
if poolname:
111+
# primary / secondary / epic powers
112+
archdata = GameData.Archetypes[gen.GetState('Archetype')]
113+
for category in ['Primary', 'Secondary', 'Epic']:
145114
submenu = PowerPickerMenu(self.Parent)
146-
self.AppendSubMenu(submenu, "Pool: " + poolname)
115+
powerset = gen.GetState(category)
116+
if not powerset: continue
117+
self.AppendSubMenu(submenu, f"{category}: {powerset}")
147118

148-
powers = GameData.PoolPowers[poolname]
119+
powers = archdata[category][powerset]
149120
for power in powers:
150-
if not self.ShowPower(poolpicker, power): continue
151-
icon = GetIcon('Powers', f'{poolname}_{power}')
152-
menuitem = PowerMenuItem(self, power, icon)
153-
submenu.AppendItem(menuitem)
121+
if isinstance(power, dict): # for sub sub menus like Corruptor -> Dual Pistols -> Swap Ammo
122+
[(subsubname, items)] = power.items()
123+
subsubmenu = PowerPickerMenu(self.Parent)
124+
for power in items:
125+
if not self.ShowPower(category, power): continue
126+
icon = GetIcon('Powers', f'{powerset}_{power}')
127+
menuitem = PowerMenuItem(self, power, icon)
128+
subsubmenu.AppendItem(menuitem)
129+
subitem = submenu.AppendSubMenu(subsubmenu, subsubname)
130+
# little bit of wx.Font hoop-jumping just for this corner case, sigh
131+
subitem.SetFont(UI.COHFont())
132+
icon = GetIcon('Powers', f'{powerset}_{subsubname}')
133+
if icon:
134+
subitem.SetNormalBitmap(icon.GetBitmap(wx.Size(32,32)))
135+
136+
else:
137+
if not self.ShowPower(category, power): continue
138+
icon = GetIcon('Powers', f'{powerset}_{power}')
139+
menuitem = PowerMenuItem(self, power, icon)
140+
submenu.AppendItem(menuitem)
141+
142+
# Pool powers
143+
for poolpicker in ["Pool1", "Pool2", "Pool3", "Pool4"]:
144+
poolname = gen.GetState(poolpicker)
145+
if poolname:
146+
submenu = PowerPickerMenu(self.Parent)
147+
self.AppendSubMenu(submenu, "Pool: " + poolname)
148+
149+
powers = GameData.PoolPowers[poolname]
150+
for power in powers:
151+
if not self.ShowPower(poolpicker, power): continue
152+
icon = GetIcon('Powers', f'{poolname}_{power}')
153+
menuitem = PowerMenuItem(self, power, icon)
154+
submenu.AppendItem(menuitem)
154155

155-
# Incarnate Powers
156-
menu = PowerPickerMenu(self.Parent)
157-
for slot, slotdata in GameData.IncarnatePowers.items():
158-
if 'Powers' in slotdata:
159-
submenu = PowerPickerMenu(self.Parent)
160-
menu.AppendSubMenu(submenu, slot)
161-
for inc_type in slotdata['Types']:
162-
subsubmenu = PowerPickerMenu(self.Parent)
163-
submenu.AppendSubMenu(subsubmenu, inc_type)
156+
# Incarnate Powers
157+
menu = PowerPickerMenu(self.Parent)
158+
for slot, slotdata in GameData.IncarnatePowers.items():
159+
if 'Powers' in slotdata:
160+
submenu = PowerPickerMenu(self.Parent)
161+
menu.AppendSubMenu(submenu, slot)
162+
for inc_type in slotdata['Types']:
163+
subsubmenu = PowerPickerMenu(self.Parent)
164+
submenu.AppendSubMenu(subsubmenu, inc_type)
164165

165-
for index, power in enumerate(slotdata['Powers']):
166-
rarity = Rarities[ index ]
166+
for index, power in enumerate(slotdata['Powers']):
167+
rarity = Rarities[ index ]
167168

168-
# aliases for the Lore types ie "Polar Lights" => "Lights" to match the icons
169-
aliasedtype = Aliases.get(inc_type, inc_type)
169+
# aliases for the Lore types ie "Polar Lights" => "Lights" to match the icons
170+
aliasedtype = Aliases.get(inc_type, inc_type)
170171

171-
icon = GetIcon('Incarnate', f'{slot}_{aliasedtype}_{rarity}')
172-
menuitem = PowerMenuItem(self, f"{inc_type} {power}", icon)
173-
subsubmenu.AppendItem(menuitem)
174-
self.AppendSubMenu(menu, "Incarnate")
172+
icon = GetIcon('Incarnate', f'{slot}_{aliasedtype}_{rarity}')
173+
menuitem = PowerMenuItem(self, f"{inc_type} {power}", icon)
174+
subsubmenu.AppendItem(menuitem)
175+
self.AppendSubMenu(menu, "Incarnate")
175176

176-
# Misc Powers
177-
submenu = self.MakeRecursiveMenu(GameData.MiscPowers)
178-
self.AppendSubMenu(submenu, "Misc")
177+
# Misc Powers
178+
submenu = self.MakeRecursiveMenu(GameData.MiscPowers)
179+
self.AppendSubMenu(submenu, "Misc")
179180

180181
def ShowPower(self, category:str, power:str) -> bool:
181182
# This next line is uuuuugly. What is the right way to do this?
182183
# Answer: a method on General? On Profile?
183-
powerlist = self.Profile.General.Ctrls[f'{category}Powers'].GetValue()
184-
if powerlist == [] : return True # we haven't picked powers, show them all
185-
elif power in powerlist : return True # we have picked this one, show it
186-
else : return False
184+
if self.Profile:
185+
powerlist = self.Profile.General.Ctrls[f'{category}Powers'].GetValue()
186+
if powerlist == [] : return True # we haven't picked powers, show them all
187+
elif power in powerlist : return True # we have picked this one, show it
188+
else : return False
189+
else:
190+
return False
187191

188192
def MakeRecursiveMenu(self, menustruct) -> FM.FlatMenu:
189193

0 commit comments

Comments
 (0)