@@ -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