From 1cf27c63497d5b4e435f90691ca83a0bb75a8426 Mon Sep 17 00:00:00 2001 From: "Unknown (MT)" Date: Mon, 13 Sep 1999 07:13:16 +0000 Subject: [PATCH] Add detachmenu, insert menu, replace menu. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3631 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/menu.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 87c892530b..8ff9016a50 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -697,6 +697,9 @@ void wxMenuBar::Refresh() WXHMENU wxMenuBar::Create() { + if (m_hMenu != 0 ) + return m_hMenu; + wxCHECK_MSG( !m_hMenu, TRUE, _T("menubar already created") ); m_hMenu = (WXHMENU)::CreateMenu(); @@ -924,6 +927,75 @@ bool wxMenuBar::OnAppend(wxMenu *a_menu, const wxChar *title) // --------------------------------------------------------------------------- // 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) { @@ -1019,6 +1091,14 @@ void wxMenuBar::Attach(wxFrame *frame) #endif // wxUSE_ACCEL } +void wxMenuBar::Detach() +{ +// ::DestroyMenu((HMENU)m_hMenu); + m_hMenu = NULL; + m_menuBarFrame = NULL; +} + + // --------------------------------------------------------------------------- // wxMenuBar searching for menu items // ---------------------------------------------------------------------------