]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/menu.cpp
added wxHTML
[wxWidgets.git] / src / msw / menu.cpp
index ef870cc461e3072e41fe69e4ba2014df55b0924a..8ff9016a501b5de807aa9b4395716de87bc81aec 100644 (file)
@@ -78,9 +78,9 @@ static const int idMenuTitle = -2;
 // ---------------------------------------------------------------------------
 
 // Construct a menu with optional title (then use append)
 // ---------------------------------------------------------------------------
 
 // Construct a menu with optional title (then use append)
-wxMenu::wxMenu(const wxString& title, const wxFunction func)
-      : m_title(title)
+void wxMenu::Init(const wxString& title, const wxFunction func )
 {
 {
+    m_title = title;
     m_parent = NULL;
     m_eventHandler = this;
     m_pInvokingWindow = NULL;
     m_parent = NULL;
     m_eventHandler = this;
     m_pInvokingWindow = NULL;
@@ -98,9 +98,7 @@ wxMenu::wxMenu(const wxString& title, const wxFunction func)
         AppendSeparator() ;
     }
 
         AppendSeparator() ;
     }
 
-#if WXWIN_COMPATIBILITY
     Callback(func);
     Callback(func);
-#endif
 }
 
 // The wxWindow destructor will take care of deleting the submenus.
 }
 
 // The wxWindow destructor will take care of deleting the submenus.
@@ -533,14 +531,12 @@ bool wxMenu::ProcessCommand(wxCommandEvent & event)
 {
     bool processed = FALSE;
 
 {
     bool processed = FALSE;
 
-#if WXWIN_COMPATIBILITY
     // Try a callback
     if (m_callback)
     {
         (void)(*(m_callback))(*this, event);
         processed = TRUE;
     }
     // Try a callback
     if (m_callback)
     {
         (void)(*(m_callback))(*this, event);
         processed = TRUE;
     }
-#endif // WXWIN_COMPATIBILITY
 
     // Try the menu's event handler
     if ( !processed && GetEventHandler())
 
     // Try the menu's event handler
     if ( !processed && GetEventHandler())
@@ -701,6 +697,9 @@ void wxMenuBar::Refresh()
 
 WXHMENU wxMenuBar::Create()
 {
 
 WXHMENU wxMenuBar::Create()
 {
+    if (m_hMenu != 0 )
+    return m_hMenu;
+
     wxCHECK_MSG( !m_hMenu, TRUE, _T("menubar already created") );
 
     m_hMenu = (WXHMENU)::CreateMenu();
     wxCHECK_MSG( !m_hMenu, TRUE, _T("menubar already created") );
 
     m_hMenu = (WXHMENU)::CreateMenu();
@@ -782,7 +781,8 @@ bool wxMenuBar::IsEnabled(int id) const
 
     int flag = ::GetMenuState(GetHmenuOf(itemMenu), id, MF_BYCOMMAND) ;
 
 
     int flag = ::GetMenuState(GetHmenuOf(itemMenu), id, MF_BYCOMMAND) ;
 
-    return (flag & MF_ENABLED) != 0;
+    // don't "and" with MF_ENABLED because its value is 0
+    return (flag & MF_DISABLED) == 0;
 }
 
 void wxMenuBar::SetLabel(int id, const wxString& label)
 }
 
 void wxMenuBar::SetLabel(int id, const wxString& label)
@@ -927,6 +927,75 @@ bool wxMenuBar::OnAppend(wxMenu *a_menu, const wxChar *title)
 // ---------------------------------------------------------------------------
 // wxMenuBar construction
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // wxMenuBar construction
 // ---------------------------------------------------------------------------
+int wxMenuBar::FindMenu(const wxString& title)
+{
+    wxString menuTitle = wxStripMenuCodes(title);
+    for ( int i = 0; i < m_menuCount; i++ )
+    {
+        wxString title = wxStripMenuCodes(m_titles[i]);
+        if ( menuTitle == title )
+            return i; 
+    }
+
+    return wxNOT_FOUND;
+
+}
+
+
+void wxMenuBar::ReplaceMenu(int pos, wxMenu * new_menu, const wxString& title)
+{
+    if (m_menuBarFrame) return;
+
+    if ( pos >= 0 && pos < m_menuCount )
+    {
+       wxMenu *old_menu = m_menus[pos];
+       m_menus[pos] = new_menu; 
+       delete old_menu;
+    }
+
+}
+
+
+void wxMenuBar::Insert(int pos, wxMenu * menu, const wxString& title)
+{
+    if (m_menuBarFrame) return;
+    if ( pos < 0 && pos >= m_menuCount ) return;
+
+    m_menuCount ++;
+    wxMenu **new_menus = new wxMenu *[m_menuCount];
+    wxString *new_titles = new wxString[m_menuCount];
+    int i;
+
+    for (i = 0; i < pos; i++)
+    {
+        new_menus[i] = m_menus[i];
+        m_menus[i] = NULL;
+        new_titles[i] = m_titles[i];
+        m_titles[i] = _T("");
+    }
+
+    new_menus[pos] = (wxMenu *)menu;
+    new_titles[i] = title; 
+
+    for (i = pos+1; i < m_menuCount; i++)
+    {
+        new_menus[i] = m_menus[i-1];
+        m_menus[i-1] = NULL;
+        new_titles[i] = m_titles[i-1];
+        m_titles[i-1] = _T("");
+    }
+    if (m_menus)
+    {
+        delete[]m_menus;
+        delete[]m_titles;
+    }
+    m_menus = new_menus;
+    m_titles = new_titles;
+
+    menu->SetParent(this);
+
+}
+
 
 void wxMenuBar::Append (wxMenu * menu, const wxString& title)
 {
 
 void wxMenuBar::Append (wxMenu * menu, const wxString& title)
 {
@@ -1022,6 +1091,14 @@ void wxMenuBar::Attach(wxFrame *frame)
 #endif // wxUSE_ACCEL
 }
 
 #endif // wxUSE_ACCEL
 }
 
+void wxMenuBar::Detach()
+{
+//    ::DestroyMenu((HMENU)m_hMenu);
+    m_hMenu = NULL;
+    m_menuBarFrame = NULL;
+}
+
+
 // ---------------------------------------------------------------------------
 // wxMenuBar searching for menu items
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // wxMenuBar searching for menu items
 // ---------------------------------------------------------------------------