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"))
{
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")),
GetBitmap(wxT("bitmap")));

View File

@@ -88,7 +88,13 @@ wxObject *wxMenuXmlHandler::DoCreateResource()
kind = wxITEM_RADIO;
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;
}

View File

@@ -179,7 +179,12 @@ wxObject* wxSizerXmlHandler::Handle_sizeritem()
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();
SetSizerItemAttributes(sitem);
@@ -195,10 +200,13 @@ wxObject* wxSizerXmlHandler::Handle_sizer()
wxXmlNode *parentNode = m_node->GetParent();
wxCHECK_MSG(m_parentSizer != NULL ||
(parentNode && parentNode->GetType() == wxXML_ELEMENT_NODE &&
m_parentAsWindow), NULL,
wxT("Sizer must have a window parent node"));
if ( !m_parentSizer &&
(!parentNode || parentNode->GetType() != wxXML_ELEMENT_NODE ||
!m_parentAsWindow) )
{
wxLogError(_("XRC syntax error: sizer must have a window parent."));
return NULL;
}
if (m_class == wxT("wxBoxSizer"))
sizer = Handle_wxBoxSizer();

View File

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