]>
git.saurik.com Git - wxWidgets.git/blob - src/xrc/xh_menu.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/xrc/xh_menu.cpp 
   3 // Purpose:     XRC resource for menus and menubars 
   4 // Author:      Vaclav Slavik 
   7 // Copyright:   (c) 2000 Vaclav Slavik 
   8 // Licence:     wxWindows licence 
   9 ///////////////////////////////////////////////////////////////////////////// 
  11 // For compilers that support precompilation, includes "wx.h". 
  12 #include "wx/wxprec.h" 
  20 #include "wx/xrc/xh_menu.h" 
  27 IMPLEMENT_DYNAMIC_CLASS(wxMenuXmlHandler
, wxXmlResourceHandler
) 
  29 wxMenuXmlHandler::wxMenuXmlHandler() : 
  30         wxXmlResourceHandler(), m_insideMenu(false) 
  32     XRC_ADD_STYLE(wxMENU_TEAROFF
); 
  35 wxObject 
*wxMenuXmlHandler::DoCreateResource() 
  37     if (m_class 
== wxT("wxMenu")) 
  39         wxMenu 
*menu 
= m_instance 
? wxStaticCast(m_instance
, wxMenu
) 
  40                                   : new wxMenu(GetStyle()); 
  42         wxString title 
= GetText(wxT("label")); 
  43         wxString help 
= GetText(wxT("help")); 
  45         bool oldins 
= m_insideMenu
; 
  47         CreateChildren(menu
, true/*only this handler*/); 
  48         m_insideMenu 
= oldins
; 
  50         wxMenuBar 
*p_bar 
= wxDynamicCast(m_parent
, wxMenuBar
); 
  53             p_bar
->Append(menu
, title
); 
  57             wxMenu 
*p_menu 
= wxDynamicCast(m_parent
, wxMenu
); 
  60                 p_menu
->Append(GetID(), title
, menu
, help
); 
  61                 if (HasParam(wxT("enabled"))) 
  62                     p_menu
->Enable(GetID(), GetBool(wxT("enabled"))); 
  71         wxMenu 
*p_menu 
= wxDynamicCast(m_parent
, wxMenu
); 
  73         if (m_class 
== wxT("separator")) 
  74             p_menu
->AppendSeparator(); 
  75         else if (m_class 
== wxT("break")) 
  80             wxString label 
= GetText(wxT("label")); 
  81             wxString accel 
= GetText(wxT("accel"), false); 
  82             wxString fullLabel 
= label
; 
  84                 fullLabel 
<< wxT("\t") << accel
; 
  86             wxItemKind kind 
= wxITEM_NORMAL
; 
  87             if (GetBool(wxT("radio"))) 
  89             if (GetBool(wxT("checkable"))) 
  91                 wxASSERT_MSG( kind 
== wxITEM_NORMAL
, _T("can't have both checkable and radion button at once") ); 
  95             wxMenuItem 
*mitem 
= new wxMenuItem(p_menu
, id
, fullLabel
, 
  96                                                GetText(wxT("help")), kind
); 
  98 #if (!defined(__WXMSW__) && !defined(__WXPM__)) || wxUSE_OWNER_DRAWN 
  99             if (HasParam(wxT("bitmap"))) 
 100                 mitem
->SetBitmap(GetBitmap(wxT("bitmap"), wxART_MENU
)); 
 102             p_menu
->Append(mitem
); 
 103             mitem
->Enable(GetBool(wxT("enabled"), true)); 
 104             if (kind 
== wxITEM_CHECK
) 
 105                 mitem
->Check(GetBool(wxT("checked"))); 
 113 bool wxMenuXmlHandler::CanHandle(wxXmlNode 
*node
) 
 115     return IsOfClass(node
, wxT("wxMenu")) || 
 117                (IsOfClass(node
, wxT("wxMenuItem")) || 
 118                 IsOfClass(node
, wxT("break")) || 
 119                 IsOfClass(node
, wxT("separator"))) 
 123 IMPLEMENT_DYNAMIC_CLASS(wxMenuBarXmlHandler
, wxXmlResourceHandler
) 
 125 wxMenuBarXmlHandler::wxMenuBarXmlHandler() : wxXmlResourceHandler() 
 127     XRC_ADD_STYLE(wxMB_DOCKABLE
); 
 130 wxObject 
*wxMenuBarXmlHandler::DoCreateResource() 
 132     wxMenuBar 
*menubar 
= new wxMenuBar(GetStyle()); 
 133     CreateChildren(menubar
); 
 135     if (m_parentAsWindow
) 
 137         wxFrame 
*parentFrame 
= wxDynamicCast(m_parent
, wxFrame
); 
 139             parentFrame
->SetMenuBar(menubar
); 
 147 bool wxMenuBarXmlHandler::CanHandle(wxXmlNode 
*node
) 
 149     return IsOfClass(node
, wxT("wxMenuBar"));