From: Vadim Zeitlin Date: Tue, 2 Dec 2008 18:23:22 +0000 (+0000) Subject: replace asserts in XRC code with wxLogError/Warning() calls as XRC can come from... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/07acc3cc570b75b625234225bf2e3b3be2ad3a97 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 --- diff --git a/src/xrc/xh_bmpcbox.cpp b/src/xrc/xh_bmpcbox.cpp index 138d2ee58b..87c4c20e19 100644 --- a/src/xrc/xh_bmpcbox.cpp +++ b/src/xrc/xh_bmpcbox.cpp @@ -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"))); diff --git a/src/xrc/xh_menu.cpp b/src/xrc/xh_menu.cpp index c278e30691..f836539c69 100644 --- a/src/xrc/xh_menu.cpp +++ b/src/xrc/xh_menu.cpp @@ -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; } diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index 8b86cce220..ea64786b64 100644 --- a/src/xrc/xh_sizer.cpp +++ b/src/xrc/xh_sizer.cpp @@ -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(); diff --git a/src/xrc/xh_toolb.cpp b/src/xrc/xh_toolb.cpp index 0fa523baa0..fe7a6aa01a 100644 --- a/src/xrc/xh_toolb.cpp +++ b/src/xrc/xh_toolb.cpp @@ -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" ); - - wxASSERT_MSG( !nodeMenu->GetNext(), - "only single menu tag allowed inside dropdown" ); + if ( !menu ) + { + wxLogError(_("XRC syntax error: invalid drop-down tool " + "contents (expected a menu).")); + } + + 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 }