X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/78d14f80e9a72041ede52c30d912ec5cef21b1b3..6edf1107031284fdcf5e6eabc6b87a7367e28185:/src/xrc/xh_menu.cpp diff --git a/src/xrc/xh_menu.cpp b/src/xrc/xh_menu.cpp index 86a27e88f7..5df0d5f8d5 100644 --- a/src/xrc/xh_menu.cpp +++ b/src/xrc/xh_menu.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: xh_menu.cpp -// Purpose: XML resource for menus and menubars +// Purpose: XRC resource for menus and menubars // Author: Vaclav Slavik // Created: 2000/03/05 // RCS-ID: $Id$ @@ -21,16 +21,16 @@ #include "wx/xrc/xh_menu.h" #include "wx/menu.h" +#include "wx/frame.h" +IMPLEMENT_DYNAMIC_CLASS(wxMenuXmlHandler, wxXmlResourceHandler) wxMenuXmlHandler::wxMenuXmlHandler() : wxXmlResourceHandler(), m_insideMenu(FALSE) { - ADD_STYLE(wxMENU_TEAROFF); + XRC_ADD_STYLE(wxMENU_TEAROFF); } - - wxObject *wxMenuXmlHandler::DoCreateResource() { if (m_class == wxT("wxMenu")) @@ -66,25 +66,34 @@ wxObject *wxMenuXmlHandler::DoCreateResource() else if (m_class == wxT("break")) p_menu->Break(); else /*wxMenuItem*/ - { + { int id = GetID(); - bool checkable = GetBool(wxT("checkable")); wxString label = GetText(wxT("label")); - wxString accel = GetText(wxT("accel")); + wxString accel = GetText(wxT("accel"), FALSE); wxString fullLabel = label; if (!accel.IsEmpty()) fullLabel << wxT("\t") << accel; + wxItemKind kind = wxITEM_NORMAL; + if (GetBool(wxT("radio"))) + kind = wxITEM_RADIO; + if (GetBool(wxT("checkable"))) + { + wxASSERT_MSG( kind == wxITEM_NORMAL, _T("can't have both checkable and radion button at once") ); + kind = wxITEM_CHECK; + } + wxMenuItem *mitem = new wxMenuItem(p_menu, id, fullLabel, - GetText(wxT("help")), checkable); + GetText(wxT("help")), kind); -#if wxCHECK_VERSION(2,3,0) || defined(__WXMSW__) - if (HasParam(wxT("bitmap"))) - mitem->SetBitmap(GetBitmap(wxT("bitmap"))); +#if wxCHECK_VERSION(2,3,0) || (defined(__WXMSW__) && wxUSE_OWNER_DRAWN) + if (HasParam(wxT("bitmap"))) + mitem->SetBitmap(GetBitmap(wxT("bitmap"), wxART_MENU)); #endif p_menu->Append(mitem); mitem->Enable(GetBool(wxT("enabled"), TRUE)); - if (checkable) mitem->Check(GetBool(wxT("checked"))); + if (kind == wxITEM_CHECK) + mitem->Check(GetBool(wxT("checked"))); } return NULL; } @@ -102,27 +111,25 @@ bool wxMenuXmlHandler::CanHandle(wxXmlNode *node) ); } - - - - - - - - - +IMPLEMENT_DYNAMIC_CLASS(wxMenuBarXmlHandler, wxXmlResourceHandler) wxMenuBarXmlHandler::wxMenuBarXmlHandler() : wxXmlResourceHandler() { - ADD_STYLE(wxMB_DOCKABLE); + XRC_ADD_STYLE(wxMB_DOCKABLE); } - - wxObject *wxMenuBarXmlHandler::DoCreateResource() { wxMenuBar *menubar = new wxMenuBar(GetStyle()); CreateChildren(menubar); + + if (m_parentAsWindow) + { + wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame); + if (parentFrame) + parentFrame->SetMenuBar(menubar); + } + return menubar; } @@ -132,4 +139,3 @@ bool wxMenuBarXmlHandler::CanHandle(wxXmlNode *node) { return IsOfClass(node, wxT("wxMenuBar")); } -