X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b71e90034f872d9fcad61abcdc000ab7cb4cfcd2..7d6a4d96961eac84d05db8bb24c64d39003f6e54:/src/xrc/xh_menu.cpp?ds=sidebyside diff --git a/src/xrc/xh_menu.cpp b/src/xrc/xh_menu.cpp index 5b13b5be3c..275c78aa62 100644 --- a/src/xrc/xh_menu.cpp +++ b/src/xrc/xh_menu.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: xh_menu.cpp +// Name: src/xrc/xh_menu.cpp // Purpose: XRC resource for menus and menubars // Author: Vaclav Slavik // Created: 2000/03/05 @@ -15,11 +15,15 @@ #pragma hdrstop #endif -#if wxUSE_XRC +#if wxUSE_XRC && wxUSE_MENUS #include "wx/xrc/xh_menu.h" -#include "wx/menu.h" -#include "wx/frame.h" + +#ifndef WX_PRECOMP + #include "wx/frame.h" + #include "wx/log.h" + #include "wx/menu.h" +#endif IMPLEMENT_DYNAMIC_CLASS(wxMenuXmlHandler, wxXmlResourceHandler) @@ -33,7 +37,9 @@ wxObject *wxMenuXmlHandler::DoCreateResource() { if (m_class == wxT("wxMenu")) { - wxMenu *menu = new wxMenu(GetStyle()); + wxMenu *menu = m_instance ? wxStaticCast(m_instance, wxMenu) + : new wxMenu(GetStyle()); + wxString title = GetText(wxT("label")); wxString help = GetText(wxT("help")); @@ -75,7 +81,7 @@ wxObject *wxMenuXmlHandler::DoCreateResource() wxString label = GetText(wxT("label")); wxString accel = GetText(wxT("accel"), false); wxString fullLabel = label; - if (!accel.IsEmpty()) + if (!accel.empty()) fullLabel << wxT("\t") << accel; wxItemKind kind = wxITEM_NORMAL; @@ -83,7 +89,15 @@ wxObject *wxMenuXmlHandler::DoCreateResource() kind = wxITEM_RADIO; if (GetBool(wxT("checkable"))) { - wxASSERT_MSG( kind == wxITEM_NORMAL, _T("can't have both checkable and radion button at once") ); + if ( kind != wxITEM_NORMAL ) + { + ReportParamError + ( + "checkable", + "menu item can't have both and properties" + ); + } + kind = wxITEM_CHECK; } @@ -92,7 +106,17 @@ wxObject *wxMenuXmlHandler::DoCreateResource() #if (!defined(__WXMSW__) && !defined(__WXPM__)) || wxUSE_OWNER_DRAWN if (HasParam(wxT("bitmap"))) - mitem->SetBitmap(GetBitmap(wxT("bitmap"), wxART_MENU)); + { + // currently only wxMSW has support for using different checked + // and unchecked bitmaps for menu items +#ifdef __WXMSW__ + if (HasParam(wxT("bitmap2"))) + mitem->SetBitmaps(GetBitmap(wxT("bitmap2"), wxART_MENU), + GetBitmap(wxT("bitmap"), wxART_MENU)); + else +#endif // __WXMSW__ + mitem->SetBitmap(GetBitmap(wxT("bitmap"), wxART_MENU)); + } #endif p_menu->Append(mitem); mitem->Enable(GetBool(wxT("enabled"), true)); @@ -124,7 +148,17 @@ wxMenuBarXmlHandler::wxMenuBarXmlHandler() : wxXmlResourceHandler() wxObject *wxMenuBarXmlHandler::DoCreateResource() { - wxMenuBar *menubar = new wxMenuBar(GetStyle()); + wxMenuBar *menubar = NULL; + + const int style = GetStyle(); + wxASSERT_MSG(!style || !m_instance, + "cannot use