#include "wx/menu.h"
#include "wx/menuitem.h"
+#include <wx/mac/uma.h>
// ============================================================================
// implementation
// ============================================================================
// 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 ) ;
// ----------------------------------------------------------------------------
// wxMenuItem
// ----------------------------------------------------------------------------
// -----------
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_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 ) { // normal menu item
- // TODO
+ if ( m_isEnabled != bDoEnable ) {
+ if ( m_subMenu == NULL )
+ {
+ // normal menu item
+ if ( m_parentMenu->GetHMenu() )
+ {
+ int index = m_parentMenu->MacGetIndexFromItem( this ) ;
+ if ( index >= 1 )
+ {
+ if ( bDoEnable )
+ UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ;
+ else
+ UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ;
+ }
+ }
}
- else // submenu
+ else
{
- // TODO
+ // submenu
+ if ( m_parentMenu->GetHMenu() )
+ {
+ int index = m_parentMenu->MacGetIndexFromItem( this ) ;
+ if ( index >= 1 )
+ {
+ if ( bDoEnable )
+ UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ;
+ else
+ UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ;
+ }
+ }
}
- m_bEnabled = bDoEnable;
+ m_isEnabled = bDoEnable;
}
}
{
wxCHECK_RET( IsCheckable(), "only checkable items may be checked" );
- if ( m_bChecked != bDoCheck ) {
- // TODO
- m_bChecked = bDoCheck;
+ if ( m_isChecked != bDoCheck )
+ {
+ m_isChecked = bDoCheck;
+ if ( m_parentMenu->GetHMenu() )
+ {
+ int index = m_parentMenu->MacGetIndexFromItem( this ) ;
+ if ( index >= 1 )
+ {
+ if ( bDoCheck )
+ ::SetItemMark( m_parentMenu->GetHMenu() , index , 0x12 ) ; // checkmark
+ else
+ ::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);
+}