X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/519cb848a8f4c91c73421bb75314754284e593a4..dc5c1114e12c45b61f7243057ba522a1c51da602:/src/mac/menuitem.cpp diff --git a/src/mac/menuitem.cpp b/src/mac/menuitem.cpp index 9195fdc50a..22b07f575d 100644 --- a/src/mac/menuitem.cpp +++ b/src/mac/menuitem.cpp @@ -25,9 +25,14 @@ // dynamic classes implementation // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject) -#endif //USE_SHARED_LIBRARY + +void wxMacBuildMenuString(StringPtr outMacItemText, char *outMacShortcutChar , short *outMacModifiers , const char *inItemName , bool useShortcuts ) ; + +wxString wxMenuItemBase::GetLabelFromText(const wxString& text) +{ + return wxStripMenuCodes(text); +} // ---------------------------------------------------------------------------- // wxMenuItem @@ -37,80 +42,108 @@ // ----------- wxMenuItem::wxMenuItem(wxMenu *pParentMenu, int id, - const wxString& strName, const wxString& strHelp, + const wxString& text, const wxString& strHelp, bool bCheckable, - wxMenu *pSubMenu) : - m_bCheckable(bCheckable), - m_strName(strName), - m_strHelp(strHelp) + wxMenu *pSubMenu) { - wxASSERT( pParentMenu != NULL ); + wxASSERT( pParentMenu != NULL ); - m_pParentMenu = pParentMenu; - m_pSubMenu = pSubMenu; - m_idItem = id; - m_bEnabled = TRUE; + m_parentMenu = pParentMenu; + m_subMenu = pSubMenu; + m_isEnabled = TRUE; + m_isChecked = FALSE; + m_id = id; + m_text = text; + m_isCheckable = bCheckable; + m_help = strHelp; - if ( m_strName == "E&xit" ||m_strName == "Exit" ) - { - m_strName = "Quit\tCtrl+Q" ; - } + + if ( m_text == "E&xit" ||m_text == "Exit" ) + { + m_text = "Quit\tCtrl+Q" ; + } } wxMenuItem::~wxMenuItem() { } +bool wxMenuItem::IsChecked() const +{ + return wxMenuItemBase::IsChecked() ; +} + +wxString wxMenuItem::GetLabel() const +{ + return wxStripMenuCodes(m_text); +} + +// accelerators +// ------------ + +#if wxUSE_ACCEL + +wxAcceleratorEntry *wxMenuItem::GetAccel() const +{ + return wxGetAccelFromString(GetText()); +} + +#endif // wxUSE_ACCEL + // misc // ---- +/* + // delete the sub menu void wxMenuItem::DeleteSubMenu() { - wxASSERT( m_pSubMenu != NULL ); + wxASSERT( m_subMenu != NULL ); - delete m_pSubMenu; - m_pSubMenu = NULL; + delete m_subMenu; + m_subMenu = NULL; } +*/ + // change item state // ----------------- void wxMenuItem::Enable(bool bDoEnable) { - if ( m_bEnabled != bDoEnable ) { - if ( m_pSubMenu == NULL ) + if ( m_isEnabled != bDoEnable ) { + if ( m_subMenu == NULL ) { // normal menu item - if ( m_pParentMenu->m_macMenuHandle ) + if ( m_parentMenu->GetHMenu() ) { - int index = m_pParentMenu->MacGetIndexFromItem( this ) ; + int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoEnable ) - UMAEnableMenuItem( m_pParentMenu->m_macMenuHandle , index ) ; + UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ; else - UMADisableMenuItem( m_pParentMenu->m_macMenuHandle , index ) ; + UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ; } } } else { // submenu - if ( m_pParentMenu->m_macMenuHandle ) + if ( m_parentMenu->GetHMenu() ) { - int index = m_pParentMenu->MacGetIndexFromItem( this ) ; + int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoEnable ) - UMAEnableMenuItem( m_pParentMenu->m_macMenuHandle , index ) ; + UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ; else - UMADisableMenuItem( m_pParentMenu->m_macMenuHandle , index ) ; + UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ; } } } - m_bEnabled = bDoEnable; + m_isEnabled = bDoEnable; } } @@ -118,19 +151,65 @@ void wxMenuItem::Check(bool bDoCheck) { wxCHECK_RET( IsCheckable(), "only checkable items may be checked" ); - if ( m_bChecked != bDoCheck ) + if ( m_isChecked != bDoCheck ) { - m_bChecked = bDoCheck; - if ( m_pParentMenu->m_macMenuHandle ) + m_isChecked = bDoCheck; + if ( m_parentMenu->GetHMenu() ) { - int index = m_pParentMenu->MacGetIndexFromItem( this ) ; + int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoCheck ) - ::SetItemMark( m_pParentMenu->m_macMenuHandle , index , 0x12 ) ; // checkmark + ::SetItemMark( m_parentMenu->GetHMenu() , index , 0x12 ) ; // checkmark else - ::SetItemMark( m_pParentMenu->m_macMenuHandle , index , 0 ) ; // no mark + ::SetItemMark( m_parentMenu->GetHMenu() , index , 0 ) ; // no mark } } } -} \ No newline at end of file +} + +void wxMenuItem::SetText(const wxString& text) +{ + // don't do anything if label didn't change + if ( m_text == text ) + return; + + wxMenuItemBase::SetText(text); +// OWNER_DRAWN_ONLY( wxOwnerDrawn::SetName(text) ); + + wxCHECK_RET( m_parentMenu && m_parentMenu->GetHMenu(), wxT("menuitem without menu") ); + if ( m_parentMenu->GetHMenu() ) + { + int index = m_parentMenu->MacGetIndexFromItem( this ) ; + if ( index >= 1 ) + { + Str255 label; + wxMacBuildMenuString( label , NULL , NULL , text ,false); + ::SetMenuItemText( m_parentMenu->GetHMenu() , index , label ) ; // checkmark + } + } + +#if wxUSE_ACCEL + m_parentMenu->UpdateAccel(this); +#endif // wxUSE_ACCEL + +} +void wxMenuItem::SetCheckable(bool checkable) +{ + wxMenuItemBase::SetCheckable(checkable); + // OWNER_DRAWN_ONLY( wxOwnerDrawn::SetCheckable(checkable) ); +} + +// ---------------------------------------------------------------------------- +// wxMenuItemBase +// ---------------------------------------------------------------------------- + +wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu, + int id, + const wxString& name, + const wxString& help, + bool isCheckable, + wxMenu *subMenu) +{ + return new wxMenuItem(parentMenu, id, name, help, isCheckable, subMenu); +}