fix so wxMenu::InsertItem actually inserts rather than overwrites

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20974 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-06-06 23:46:36 +00:00
parent c69279ef70
commit 58751a8685
4 changed files with 178 additions and 178 deletions

View File

@@ -69,7 +69,7 @@ void wxMenu::Init()
m_startRadioGroup = -1;
// create the menu
m_macMenuId = s_macNextMenuId++;
m_macMenuId = s_macNextMenuId++;
m_hMenu = UMANewMenu(m_macMenuId, m_title);
if ( !m_hMenu )
@@ -116,19 +116,19 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
else
MacInsertMenuItem(MAC_WXHMENU(m_hMenu), "\p-" , pos);
}
else
else
{
wxMenu *pSubMenu = pItem->GetSubMenu() ;
if ( pSubMenu != NULL )
{
wxASSERT_MSG( pSubMenu->m_hMenu != NULL , wxT("invalid submenu added"));
pSubMenu->m_menuParent = this ;
if (wxMenuBar::MacGetInstalledMenuBar() == m_menuBar)
if (wxMenuBar::MacGetInstalledMenuBar() == m_menuBar)
{
pSubMenu->MacBeforeDisplay( true ) ;
}
if ( pos == (size_t)-1 )
UMAAppendSubMenuItem(MAC_WXHMENU(m_hMenu), pItem->GetText(), pSubMenu->m_macMenuId);
else
@@ -148,12 +148,12 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
UMAInsertMenuItem(MAC_WXHMENU(m_hMenu), wxT("a") , pos);
}
SetMenuItemCommandID( MAC_WXHMENU(m_hMenu) , pos , pItem->GetId() ) ;
SetMenuItemCommandID( MAC_WXHMENU(m_hMenu) , pos+1 , pItem->GetId() ) ;
pItem->UpdateItemText() ;
pItem->UpdateItemBitmap() ;
pItem->UpdateItemStatus() ;
if ( pItem->GetId() == idMenuTitle )
if ( pItem->GetId() == idMenuTitle )
{
UMAEnableMenuItem(MAC_WXHMENU(m_hMenu) , pos , false ) ;
}
@@ -311,10 +311,10 @@ wxWindow *wxMenu::GetWindow() const
return NULL;
}
// helper functions returning the mac menu position for a certain item, note that this is
// helper functions returning the mac menu position for a certain item, note that this is
// mac-wise 1 - based, i.e. the first item has index 1 whereas on MSWin it has pos 0
int wxMenu::MacGetIndexFromId( int id )
int wxMenu::MacGetIndexFromId( int id )
{
size_t pos;
wxMenuItemList::Node *node = GetMenuItems().GetFirst();
@@ -325,14 +325,14 @@ int wxMenu::MacGetIndexFromId( int id )
node = node->GetNext();
}
if (!node)
return 0;
return pos + 1 ;
}
int wxMenu::MacGetIndexFromItem( wxMenuItem *pItem )
int wxMenu::MacGetIndexFromItem( wxMenuItem *pItem )
{
size_t pos;
wxMenuItemList::Node *node = GetMenuItems().GetFirst();
@@ -346,31 +346,31 @@ int wxMenu::MacGetIndexFromItem( wxMenuItem *pItem )
if (!node)
return 0;
return pos + 1 ;
}
void wxMenu::MacEnableMenu( bool bDoEnable )
void wxMenu::MacEnableMenu( bool bDoEnable )
{
UMAEnableMenuItem(MAC_WXHMENU(m_hMenu) , 0 , bDoEnable ) ;
::DrawMenuBar() ;
}
// MacOS needs to know about submenus somewhere within this menu
// before it can be displayed , also hide special menu items like preferences
// that are handled by the OS
void wxMenu::MacBeforeDisplay( bool isSubMenu )
void wxMenu::MacBeforeDisplay( bool isSubMenu )
{
wxMenuItem* previousItem = NULL ;
size_t pos ;
wxMenuItemList::Node *node;
wxMenuItem *item;
for (pos = 0, node = GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
for (pos = 0, node = GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
{
item = (wxMenuItem *)node->GetData();
wxMenu* subMenu = item->GetSubMenu() ;
if (subMenu)
if (subMenu)
{
subMenu->MacBeforeDisplay( true ) ;
}
@@ -390,7 +390,7 @@ void wxMenu::MacBeforeDisplay( bool isSubMenu )
}
}
}
#endif
#endif
}
previousItem = item ;
}
@@ -400,7 +400,7 @@ void wxMenu::MacBeforeDisplay( bool isSubMenu )
}
// undo all changes from the MacBeforeDisplay call
void wxMenu::MacAfterDisplay( bool isSubMenu )
void wxMenu::MacAfterDisplay( bool isSubMenu )
{
if ( isSubMenu )
::DeleteMenu(MacGetMenuId());
@@ -409,11 +409,11 @@ void wxMenu::MacAfterDisplay( bool isSubMenu )
int pos ;
wxMenuItemList::Node *node;
wxMenuItem *item;
for (pos = 0, node = GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
for (pos = 0, node = GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
{
item = (wxMenuItem *)node->GetData();
wxMenu* subMenu = item->GetSubMenu() ;
if (subMenu)
if (subMenu)
{
subMenu->MacAfterDisplay( true ) ;
}
@@ -427,7 +427,7 @@ void wxMenu::MacAfterDisplay( bool isSubMenu )
// Menu Bar
/*
/*
Mac Implementation note :
@@ -435,11 +435,11 @@ The Mac has only one global menubar, so we attempt to install the currently
active menubar from a frame, we currently don't take into account mdi-frames
which would ask for menu-merging
Secondly there is no mac api for changing a menubar that is not the current
Secondly there is no mac api for changing a menubar that is not the current
menubar, so we have to wait for preparing the actual menubar until the
wxMenubar is to be used
We can in subsequent versions use MacInstallMenuBar to provide some sort of
We can in subsequent versions use MacInstallMenuBar to provide some sort of
auto-merge for MDI in case this will be necessary
*/
@@ -496,13 +496,13 @@ void wxMenuBar::Refresh(bool WXUNUSED(eraseBackground), const wxRect *WXUNUSED(r
DrawMenuBar();
}
void wxMenuBar::MacInstallMenuBar()
void wxMenuBar::MacInstallMenuBar()
{
if ( s_macInstalledMenuBar == this )
return ;
wxStAppResource resload ;
Handle menubar = ::GetNewMBar( kwxMacMenuBarResource ) ;
wxString message ;
wxCHECK_RET( menubar != NULL, wxT("can't read MBAR resource") );
@@ -520,7 +520,7 @@ void wxMenuBar::MacInstallMenuBar()
::AppendResMenu(menu, 'DRVR');
}
#endif
// clean-up the help menu before adding new items
MenuHandle mh = NULL ;
if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) == noErr )
@@ -557,16 +557,16 @@ void wxMenuBar::MacInstallMenuBar()
{
continue ;
}
for (pos = 0 , node = menu->GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
for (pos = 0 , node = menu->GetMenuItems().GetFirst(); node; node = node->GetNext(), pos++)
{
item = (wxMenuItem *)node->GetData();
subMenu = item->GetSubMenu() ;
if (subMenu)
if (subMenu)
{
// we don't support hierarchical menus in the help menu yet
}
else
else
{
if ( item->IsSeparator() )
{
@@ -578,7 +578,7 @@ void wxMenuBar::MacInstallMenuBar()
wxAcceleratorEntry* entry = wxGetAccelFromString( item->GetText() ) ;
if ( item->GetId() == wxApp::s_macAboutMenuItemId )
{
{
UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetText() );
UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetId() ) ;
@@ -592,7 +592,7 @@ void wxMenuBar::MacInstallMenuBar()
SetMenuItemCommandID( mh , CountMenuItems(mh) , item->GetId() ) ;
}
}
delete entry ;
}
}
@@ -652,7 +652,7 @@ int wxMenuBar::FindMenu(const wxString& title)
{
wxString title = wxStripMenuCodes(m_titles[i]);
if ( menuTitle == title )
return i;
return i;
}
return wxNOT_FOUND;
@@ -762,7 +762,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
return FALSE;
m_titles.Add(title);
UMASetMenuTitle( MAC_WXHMENU(menu->GetHMenu()) , title ) ;
if ( IsAttached() )