//! called when a property is selected void PropertyListContainer::OnPropertySelected(wxPGProperty* pWxProperty) { if( pWxProperty && pWxProperty->GetParent()->IsRoot() && pWxProperty->GetLabel() != "ID" && pWxProperty->GetLabel() != "Type" && m_pPropertyList->GetSelectedObject()->IsA(Entity::TypeID)) { Entity* pEntity = DYNAMIC_CAST(m_pPropertyList->GetSelectedObject(), Entity); bool bIsTemplate = pEntity && !pEntity->GetTemplatePath().empty(); bool bOverriden = (pEntity->GetOverridenProperties().GetProperty(std::string(pWxProperty->GetName())) != NULL); m_pOverrideToggle->Enable(bIsTemplate); m_pOverrideToggle->SetValue(bOverriden); } else { m_pOverrideToggle->Enable(false); } }
// event handlers void PropertyListContainer::OnToggleOverride(wxCommandEvent& event) { SHOOT_ASSERT(m_pPropertyList->GetSelectedObject()->IsA(Entity::TypeID), "Tring to override a property of a non-entity"); Entity* pEntity = static_cast<Entity*>(m_pPropertyList->GetSelectedObject()); bool bOverride = event.IsChecked(); wxPGProperty* pWxProperty = m_pPropertyList->GetSelection(); SHOOT_ASSERT(pWxProperty, "Toggling override flag on NULL property"); const char* strPropertyName = pWxProperty->GetLabel().c_str(); PropertyStream& overridenProperties = pEntity->GetOverridenProperties(); if(bOverride) { PropertyStream stream(SM_Write); pEntity->Serialize(stream); overridenProperties.AddProperty(stream.GetProperty(strPropertyName)->Copy()); m_pPropertyList->EnableProperty(pWxProperty); } else { overridenProperties.RemoveProperty(overridenProperties.GetProperty(strPropertyName)); m_pPropertyList->DisableProperty(pWxProperty); } }