| 234 | |
| 235 | |
| 236 | class AttributeGrid(wxpg.PropertyGrid): |
| 237 | def __init__(self, parent): |
| 238 | wxpg.PropertyGrid.__init__(self, parent, |
| 239 | style=wxpg.PG_HIDE_MARGIN | wxpg.PG_HIDE_CATEGORIES | wxpg.PG_BOLD_MODIFIED | wxpg.PG_TOOLTIPS) |
| 240 | self.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS) |
| 241 | |
| 242 | self.item = None |
| 243 | |
| 244 | self.itemView = parent.Parent.itemView |
| 245 | |
| 246 | self.btn = parent.Parent.btnRemoveOverrides |
| 247 | |
| 248 | self.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange) |
| 249 | self.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect) |
| 250 | self.Bind(wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick) |
| 251 | |
| 252 | self.itemView.Bind(wx.EVT_LIST_ITEM_SELECTED, self.itemActivated) |
| 253 | self.itemView.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated) |
| 254 | |
| 255 | def itemActivated(self, event): |
| 256 | self.Clear() |
| 257 | self.btn.Enable(True) |
| 258 | sel = event.EventObject.GetFirstSelected() |
| 259 | self.item = item = self.itemView.activeItems[sel] |
| 260 | |
| 261 | for key in sorted(item.attributes.keys()): |
| 262 | override = item.overrides.get(key, None) |
| 263 | default = item.attributes[key].value |
| 264 | if override and override.value != default: |
| 265 | prop = wxpg.FloatProperty(key, value=override.value) |
| 266 | prop.SetModifiedStatus(True) |
| 267 | else: |
| 268 | prop = wxpg.FloatProperty(key, value=default) |
| 269 | |
| 270 | prop.SetClientData(item.attributes[key]) # set this so that we may access it later |
| 271 | prop.SetHelpString("%s\n%s" % (item.attributes[key].displayName or key, _t("Default Value: %0.3f") % default)) |
| 272 | self.Append(prop) |
| 273 | |
| 274 | def removeOverrides(self, event): |
| 275 | if self.item is None: |
| 276 | return |
| 277 | |
| 278 | for x in list(self.item.overrides.values()): |
| 279 | self.item.deleteOverride(x.attr) |
| 280 | self.itemView.updateItems(True) |
| 281 | self.ClearModifiedStatus() |
| 282 | self.itemView.Select(self.itemView.GetFirstSelected(), on=False) |
| 283 | self.Clear() |
| 284 | |
| 285 | def Clear(self): |
| 286 | self.item = None |
| 287 | self.btn.Enable(False) |
| 288 | wxpg.PropertyGrid.Clear(self) |
| 289 | |
| 290 | def OnPropGridChange(self, event): |
| 291 | p = event.GetProperty() |
| 292 | attr = p.GetClientData() |
| 293 | if p.GetValue() == attr.value: |