66 for(
auto subitem : GetMenuItems() )
67 subitem->SetBitmap( wxNullBitmap );
72 for(
auto menuItem : GetMenuItems() )
73 menuItem->SetBitmap( wxNullBitmap );
75 menu->SetParent(
nullptr );
114 wxMenuItem* item = FindItemByPosition( 0 );
115 wxASSERT( item->GetItemLabelText() ==
GetTitle() );
116 item->SetBitmap( wxNullBitmap );
120 item = FindItemByPosition( 0 );
121 wxASSERT( item->IsSeparator() );
126 else if( aDisplay && !
m_title.IsEmpty() )
131 FindItemByPosition( 0 )->SetItemLabel(
m_title );
136 InsertSeparator( 0 );
137 Insert( 0,
new wxMenuItem(
this, wxID_NONE,
m_title, wxEmptyString, wxITEM_NORMAL ) );
414 wxEventType type = aEvent.GetEventType();
415 wxWindow* focus = wxWindow::FindFocus();
418 if( type == wxEVT_MENU_OPEN )
423 wxMenu* parent =
dynamic_cast<wxMenu*
>( GetParent() );
426 if( !parent && !IsAttached() && toolMgr )
431 else if( type == wxEVT_MENU_HIGHLIGHT )
433 if( aEvent.GetId() > 0 )
438 else if( type == wxEVT_COMMAND_MENU_SELECTED )
444 if(
dynamic_cast<wxTextEntry*
>( focus )
445 ||
dynamic_cast<wxStyledTextCtrl*
>( focus )
446 ||
dynamic_cast<wxListView*
>( focus )
447 ||
dynamic_cast<wxGrid*
>( focus ) )
451 wxMenuItem* menuItem = FindItem( aEvent.GetId() );
452 wxAcceleratorEntry* acceleratorKey = menuItem ? menuItem->GetAccel() :
nullptr;
456 wxKeyEvent keyEvent( wxEVT_CHAR_HOOK );
457 keyEvent.m_keyCode = acceleratorKey->GetKeyCode();
458 keyEvent.m_controlDown = ( acceleratorKey->GetFlags() & wxMOD_CONTROL ) > 0;
459 keyEvent.m_shiftDown = ( acceleratorKey->GetFlags() & wxMOD_SHIFT ) > 0;
460 keyEvent.m_altDown = ( acceleratorKey->GetFlags() & wxMOD_ALT ) > 0;
462 if( wxTextEntry* ctrl =
dynamic_cast<wxTextEntry*
>( focus ) )
465 focus->HandleWindowEvent( keyEvent );
467 if( keyEvent.GetSkipped() )
469 keyEvent.SetEventType( wxEVT_CHAR );
475 int keyCode = keyEvent.GetKeyCode();
477 if( keyCode >=
'A' && keyCode <=
'Z' )
479 bool shiftActive = wxGetKeyState( WXK_SHIFT );
480 bool capsActive = wxGetKeyState( WXK_CAPITAL );
482 if( !( shiftActive ^ capsActive ) )
483 keyEvent.m_keyCode = keyCode + 32;
487 keyEvent.m_uniChar = keyEvent.m_keyCode;
490 focus->HandleWindowEvent( keyEvent );
495 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( focus );
496 bool isLetter = keyCode >=
'A' && keyCode <=
'Z';
498 if( textEntry && textEntry->IsEditable() && keyEvent.GetSkipped() && !keyEvent.ControlDown()
499 && !keyEvent.AltDown() && keyCode >= WXK_SPACE && keyCode < WXK_START
500 && ( isLetter || !keyEvent.ShiftDown() ) )
502 textEntry->WriteText( wxString( wxUniChar( keyEvent.m_keyCode ) ) );
509 if( keyEvent.GetKeyCode() == WXK_BACK || keyEvent.GetKeyCode() == WXK_DELETE )
515 if( !keyEvent.GetSkipped() )
528 parent =
dynamic_cast<ACTION_MENU*
>( parent->GetParent() );
541 wxMenu* menu =
nullptr;
560 #define ID_CONTEXT_MENU_ID_MAX wxID_LOWEST
568 menuText = GetHelpString( aEvent.GetId() );
570 menuText = GetLabelText( aEvent.GetId() );
573 evt->SetParameter( &menuText );
599 evt->SetHasPosition(
false );
688 wxMenuItem* newItem =
new wxMenuItem(
this, aSource->GetId(), aSource->GetItemLabel(),
689 aSource->GetHelp(), aSource->GetKind() );
696#if defined( __WXMSW__ )
700 bool use_checked_bm = ( aSource->GetKind() == wxITEM_CHECK ||
701 aSource->GetKind() == wxITEM_RADIO ) ? false :
true;
702 const wxBitmap& src_bitmap = aSource->GetBitmap( use_checked_bm );
704 const wxBitmap& src_bitmap = aSource->GetBitmap();
707 if( src_bitmap.IsOk() && src_bitmap.GetHeight() > 1 )
710 if( aSource->IsSubMenu() )
713 wxASSERT_MSG( menu, wxS(
"Submenus are expected to be a ACTION_MENU" ) );
718 newItem->SetSubMenu( menuCopy );
726 if( aSource->IsCheckable() )
727 newItem->Check( aSource->IsChecked() );
729 newItem->Enable( aSource->IsEnabled() );
static void OnCharHook(wxTextEntry *aTextEntry, wxKeyEvent &aEvent)