replace asserts in XRC code with wxLogError/Warning() calls as XRC can come from an external source and doesn't necessarily indicate a programming error

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57074 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-12-02 18:23:22 +00:00
parent e2517f176b
commit 07acc3cc57
4 changed files with 61 additions and 17 deletions

View File

@@ -41,7 +41,12 @@ wxObject *wxBitmapComboBoxXmlHandler::DoCreateResource()
{ {
if (m_class == wxT("ownerdrawnitem")) if (m_class == wxT("ownerdrawnitem"))
{ {
wxCHECK_MSG(m_combobox, NULL, wxT("Incorrect syntax of XRC resource: ownerdrawnitem not within a bitmapcombobox!")); if ( !m_combobox )
{
wxLogError(_("XRC syntex error: ownerdrawnitem only allowed within "
" a bitmapcombobox!"));
return NULL;
}
m_combobox->Append(GetText(wxT("text")), m_combobox->Append(GetText(wxT("text")),
GetBitmap(wxT("bitmap"))); GetBitmap(wxT("bitmap")));

View File

@@ -88,7 +88,13 @@ wxObject *wxMenuXmlHandler::DoCreateResource()
kind = wxITEM_RADIO; kind = wxITEM_RADIO;
if (GetBool(wxT("checkable"))) if (GetBool(wxT("checkable")))
{ {
wxASSERT_MSG( kind == wxITEM_NORMAL, _T("can't have both checkable and radio button at once") ); if ( kind != wxITEM_NORMAL )
{
wxLogWarning(_("XRC syntax error: a menu item can't have "
"both \"radio\" and \"checkable\" "
"properties, ignoring the former."));
}
kind = wxITEM_CHECK; kind = wxITEM_CHECK;
} }

View File

@@ -179,7 +179,12 @@ wxObject* wxSizerXmlHandler::Handle_sizeritem()
wxObject* wxSizerXmlHandler::Handle_spacer() wxObject* wxSizerXmlHandler::Handle_spacer()
{ {
wxCHECK_MSG(m_parentSizer, NULL, wxT("Incorrect syntax of XRC resource: spacer not within sizer!")); if ( !m_parentSizer )
{
wxLogError(_("XRC syntax error: \"spacer\" only allowed inside a "
"sizer"));
return NULL;
}
wxSizerItem* sitem = MakeSizerItem(); wxSizerItem* sitem = MakeSizerItem();
SetSizerItemAttributes(sitem); SetSizerItemAttributes(sitem);
@@ -195,10 +200,13 @@ wxObject* wxSizerXmlHandler::Handle_sizer()
wxXmlNode *parentNode = m_node->GetParent(); wxXmlNode *parentNode = m_node->GetParent();
wxCHECK_MSG(m_parentSizer != NULL || if ( !m_parentSizer &&
(parentNode && parentNode->GetType() == wxXML_ELEMENT_NODE && (!parentNode || parentNode->GetType() != wxXML_ELEMENT_NODE ||
m_parentAsWindow), NULL, !m_parentAsWindow) )
wxT("Sizer must have a window parent node")); {
wxLogError(_("XRC syntax error: sizer must have a window parent."));
return NULL;
}
if (m_class == wxT("wxBoxSizer")) if (m_class == wxT("wxBoxSizer"))
sizer = Handle_wxBoxSizer(); sizer = Handle_wxBoxSizer();

View File

@@ -53,7 +53,12 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
{ {
if (m_class == wxT("tool")) if (m_class == wxT("tool"))
{ {
wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: tool not within a toolbar!")); if ( !m_toolbar )
{
wxLogError(_("XRC syntax error: \"tool\" only allowed inside a "
"toolbar"));
return NULL;
}
wxItemKind kind = wxITEM_NORMAL; wxItemKind kind = wxITEM_NORMAL;
if (GetBool(wxT("radio"))) if (GetBool(wxT("radio")))
@@ -61,8 +66,13 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
if (GetBool(wxT("toggle"))) if (GetBool(wxT("toggle")))
{ {
wxASSERT_MSG( kind == wxITEM_NORMAL, if ( kind != wxITEM_NORMAL )
_T("can't have both toggle and radio button at once") ); {
wxLogWarning(_("XRC syntax error: tool can't have both "
"\"radio\" and \"toggle\" properties, "
"ignoring the former."));
}
kind = wxITEM_CHECK; kind = wxITEM_CHECK;
} }
@@ -71,9 +81,12 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
wxXmlNode * const nodeDropdown = GetParamNode("dropdown"); wxXmlNode * const nodeDropdown = GetParamNode("dropdown");
if ( nodeDropdown ) if ( nodeDropdown )
{ {
wxASSERT_MSG( kind == wxITEM_NORMAL, if ( kind != wxITEM_NORMAL )
"drop down button can't be a check/radio " {
"button too" ); wxLogWarning(_("XRC syntax error: drop-down tool can't have "
"neither \"radio\" nor \"toggle\" properties, "
"ignoring them."));
}
kind = wxITEM_DROPDOWN; kind = wxITEM_DROPDOWN;
@@ -85,10 +98,17 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
{ {
wxObject *res = CreateResFromNode(nodeMenu, NULL); wxObject *res = CreateResFromNode(nodeMenu, NULL);
menu = wxDynamicCast(res, wxMenu); menu = wxDynamicCast(res, wxMenu);
wxASSERT_MSG( menu, "invalid drop down object contents" ); if ( !menu )
{
wxLogError(_("XRC syntax error: invalid drop-down tool "
"contents (expected a menu)."));
}
wxASSERT_MSG( !nodeMenu->GetNext(), if ( nodeMenu->GetNext() )
"only single menu tag allowed inside dropdown" ); {
wxLogWarning(_("XRC syntax error: unexpected extra "
"contents under drop-down tool."));
}
} }
} }
@@ -115,7 +135,12 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
else if (m_class == wxT("separator")) else if (m_class == wxT("separator"))
{ {
wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: separator not within a toolbar!")); if ( !m_toolbar )
{
wxLogError(_("XRC syntax error: \"separator\" only allowed inside a "
"toolbar"));
return NULL;
}
m_toolbar->AddSeparator(); m_toolbar->AddSeparator();
return m_toolbar; // must return non-NULL return m_toolbar; // must return non-NULL
} }