//! 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);
		}
	}