X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b935c45dee0e6036de3e83c44015d14d3958ac7f..7d6a4d96961eac84d05db8bb24c64d39003f6e54:/src/xrc/xh_toolb.cpp?ds=inline diff --git a/src/xrc/xh_toolb.cpp b/src/xrc/xh_toolb.cpp index b6f518d4af..c6e75a3615 100644 --- a/src/xrc/xh_toolb.cpp +++ b/src/xrc/xh_toolb.cpp @@ -57,8 +57,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() { if ( !m_toolbar ) { - wxLogError(_("XRC syntax error: \"tool\" only allowed inside a " - "toolbar")); + ReportError("tool only allowed inside a wxToolBar"); return NULL; } @@ -70,14 +69,17 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() { if ( kind != wxITEM_NORMAL ) { - wxLogWarning(_("XRC syntax error: tool can't have both " - "\"radio\" and \"toggle\" properties, " - "ignoring the former.")); + ReportParamError + ( + "toggle", + "tool can't have both and properties" + ); } kind = wxITEM_CHECK; } +#if wxUSE_MENUS // check whether we have dropdown tag inside wxMenu *menu = NULL; // menu for drop down items wxXmlNode * const nodeDropdown = GetParamNode("dropdown"); @@ -85,9 +87,11 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() { if ( kind != wxITEM_NORMAL ) { - wxLogWarning(_("XRC syntax error: drop-down tool can't have " - "neither \"radio\" nor \"toggle\" properties, " - "ignoring them.")); + ReportParamError + ( + "dropdown", + "drop-down tool can't have neither nor properties" + ); } kind = wxITEM_DROPDOWN; @@ -102,48 +106,76 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() menu = wxDynamicCast(res, wxMenu); if ( !menu ) { - wxLogError(_("XRC syntax error: invalid drop-down tool " - "contents (expected a menu).")); + ReportError + ( + nodeMenu, + "drop-down tool contents can only be a wxMenu" + ); } if ( nodeMenu->GetNext() ) { - wxLogWarning(_("XRC syntax error: unexpected extra " - "contents under drop-down tool.")); + ReportError + ( + nodeMenu->GetNext(), + "unexpected extra contents under drop-down tool" + ); } } } - - wxToolBarToolBase * const - tool = m_toolbar->AddTool - ( - GetID(), - GetText(wxT("label")), - GetBitmap(wxT("bitmap"), wxART_TOOLBAR), - GetBitmap(wxT("bitmap2"), wxART_TOOLBAR), - kind, - GetText(wxT("tooltip")), - GetText(wxT("longhelp")) - ); +#endif + wxToolBarToolBase * const tool = + m_toolbar->AddTool + ( + GetID(), + GetText(wxT("label")), + GetBitmap(wxT("bitmap"), wxART_TOOLBAR, m_toolSize), + GetBitmap(wxT("bitmap2"), wxART_TOOLBAR, m_toolSize), + kind, + GetText(wxT("tooltip")), + GetText(wxT("longhelp")) + ); if ( GetBool(wxT("disabled")) ) m_toolbar->EnableTool(GetID(), false); + if ( GetBool(wxS("checked")) ) + { + if ( kind == wxITEM_NORMAL ) + { + ReportParamError + ( + "checked", + "only nor tools can be checked" + ); + } + else + { + m_toolbar->ToggleTool(GetID(), true); + } + } + +#if wxUSE_MENUS if ( menu ) tool->SetDropdownMenu(menu); +#endif return m_toolbar; // must return non-NULL } - else if (m_class == wxT("separator")) + else if (m_class == wxT("separator") || m_class == wxT("space")) { if ( !m_toolbar ) { - wxLogError(_("XRC syntax error: \"separator\" only allowed inside a " - "toolbar")); + ReportError("separators only allowed inside wxToolBar"); return NULL; } - m_toolbar->AddSeparator(); + + if ( m_class == wxT("separator") ) + m_toolbar->AddSeparator(); + else + m_toolbar->AddStretchableSpace(); + return m_toolbar; // must return non-NULL } @@ -164,9 +196,9 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() GetName()); SetupWindow(toolbar); - wxSize bmpsize = GetSize(wxT("bitmapsize")); - if (!(bmpsize == wxDefaultSize)) - toolbar->SetToolBitmapSize(bmpsize); + m_toolSize = GetSize(wxT("bitmapsize")); + if (!(m_toolSize == wxDefaultSize)) + toolbar->SetToolBitmapSize(m_toolSize); wxSize margins = GetSize(wxT("margins")); if (!(margins == wxDefaultSize)) toolbar->SetMargins(margins.x, margins.y); @@ -197,6 +229,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() wxControl *control = wxDynamicCast(created, wxControl); if (!IsOfClass(n, wxT("tool")) && !IsOfClass(n, wxT("separator")) && + !IsOfClass(n, wxT("space")) && control != NULL) toolbar->AddControl(control); } @@ -223,6 +256,7 @@ bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node) { return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) || (m_isInside && IsOfClass(node, wxT("tool"))) || + (m_isInside && IsOfClass(node, wxT("space"))) || (m_isInside && IsOfClass(node, wxT("separator")))); }