32#include <wx/stc/stc.h> 
   33#include <wx/settings.h> 
   55                 const wxEventType& aUpEvent, 
const wxEventType& aDblClickEvent ) :
 
 
  104        wxMouseState mouseState = wxGetMouseState();
 
  109            return mouseState.LeftIsDown();
 
  112            return mouseState.MiddleIsDown();
 
  115            return mouseState.RightIsDown();
 
  118            return mouseState.Aux1IsDown();
 
  121            return mouseState.Aux2IsDown();
 
  124            wxFAIL_MSG( wxT( 
"unknown button" ) );
 
 
 
  141                         wxEVT_LEFT_UP, wxEVT_LEFT_DCLICK ) );
 
  143                         wxEVT_RIGHT_UP, wxEVT_RIGHT_DCLICK ) );
 
  145                         wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DCLICK ) );
 
  147                         wxEVT_AUX1_UP, wxEVT_AUX1_DCLICK ) );
 
  149                         wxEVT_AUX2_UP, wxEVT_AUX2_DCLICK ) );
 
 
  164    int wxmods = aState->GetModifiers();
 
  170    if( wxmods & wxMOD_ALTGR )
 
  175        if( wxmods & wxMOD_CONTROL )
 
  178        if( wxmods & wxMOD_ALT )
 
  182    if( wxmods & wxMOD_SHIFT )
 
  186    if( wxmods & wxMOD_META )
 
  191    if( wxmods & wxMOD_WIN )
 
 
  215    wxEventType type = aEvent.GetEventType();
 
  216    std::optional<TOOL_EVENT> evt;
 
  217    bool isClick = 
false;
 
  221    bool up = 
false, 
down = 
false;
 
  237    int args = st->
button | mods;
 
 
  319    const std::vector<enum wxKeyCode> special_keys =
 
  321        WXK_PAGEUP, WXK_PAGEDOWN,
 
  322        WXK_NUMPAD_PAGEUP, WXK_NUMPAD_PAGEDOWN
 
 
  335    static std::vector<enum wxKeyCode> special_keys =
 
  337        WXK_CONTROL, WXK_RAW_CONTROL, WXK_SHIFT, WXK_ALT,
 
  338#ifdef WXK_WINDOWS_LEFT 
  339        WXK_WINDOWS_LEFT, WXK_WINDOWS_RIGHT,
 
 
  358    return type == wxEVT_LEFT_DOWN || type == wxEVT_LEFT_UP || type == wxEVT_LEFT_DCLICK
 
  359           || type == wxEVT_MIDDLE_DOWN || type == wxEVT_MIDDLE_UP || type == wxEVT_MIDDLE_DCLICK
 
  360           || type == wxEVT_RIGHT_DOWN || type == wxEVT_RIGHT_UP || type == wxEVT_RIGHT_DCLICK
 
  361           || type == wxEVT_AUX1_DOWN || type == wxEVT_AUX1_UP || type == wxEVT_AUX1_DCLICK
 
  362           || type == wxEVT_AUX2_DOWN || type == wxEVT_AUX2_UP || type == wxEVT_AUX2_DCLICK;
 
 
  384    case WXK_NUMPAD_UP: 
return WXK_UP;
 
  385    case WXK_NUMPAD_DOWN: 
return WXK_DOWN;
 
  386    case WXK_NUMPAD_LEFT: 
return WXK_LEFT;
 
  387    case WXK_NUMPAD_RIGHT: 
return WXK_RIGHT;
 
  388    case WXK_NUMPAD_PAGEUP: 
return WXK_PAGEUP;
 
  389    case WXK_NUMPAD_PAGEDOWN: 
return WXK_PAGEDOWN;
 
 
  399    std::optional<TOOL_EVENT> evt;
 
  400    int             key = aKeyEvent->GetKeyCode();
 
  401    int             unicode_key = aKeyEvent->GetUnicodeKey();
 
  416    if( aKeyEvent->GetEventType() == wxEVT_CHAR_HOOK )
 
  433        if( unicode_key >= 
'A' && unicode_key <= 
'Z' && key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
 
  437        if( key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
 
  449        switch( aKeyEvent->GetRawKeyCode() )
 
  451        case  0x12: key = 
'1'; 
break;
 
  452        case  0x13: key = 
'2'; 
break;
 
  453        case  0x14: key = 
'3'; 
break;
 
  454        case  0x15: key = 
'4'; 
break;
 
  455        case  0x16: key = 
'6'; 
break;
 
  456        case  0x17: key = 
'5'; 
break;
 
  457        case  0x18: key = 
'='; 
break;
 
  458        case  0x19: key = 
'9'; 
break;
 
  459        case  0x1A: key = 
'7'; 
break;
 
  460        case  0x1B: key = 
'-'; 
break;
 
  461        case  0x1C: key = 
'8'; 
break;
 
  462        case  0x1D: key = 
'0'; 
break;
 
  468    if( key == WXK_ESCAPE ) 
 
 
  480    bool            buttonEvents = 
false;
 
  482    std::optional<TOOL_EVENT> evt;
 
  483    bool            keyIsEscape  = 
false;  
 
  484    bool            keyIsSpecial = 
false;  
 
  485    wxWindow*       focus = wxWindow::FindFocus();
 
  492    wxEventType type = aEvent.GetEventType();
 
  498    if( focus == 
nullptr )
 
  500        wxWindow* holderWindow = 
dynamic_cast<wxWindow*
>( 
m_toolMgr->GetToolHolder() );
 
  502#if defined( _WIN32 ) || defined( __WXGTK__ ) 
  510            holderWindow->SetFocus();
 
  517            !
m_toolMgr->GetToolHolder()->GetToolCanvas()->HasFocus() )
 
  519            m_toolMgr->GetToolHolder()->GetToolCanvas()->SetFocus();
 
  525    if( type == wxEVT_MOTION || type == wxEVT_MOUSEWHEEL ||
 
  526        type == wxEVT_MAGNIFY ||
 
  532        wxMouseEvent* me = 
static_cast<wxMouseEvent*
>( &aEvent );
 
  537            pos = 
m_toolMgr->GetViewControls()->GetMousePosition();
 
  547        for( 
unsigned int i = 0; i < 
m_buttons.size(); i++ )
 
  552            if( !buttonEvents && motion )
 
  555                evt->SetMousePosition( pos );
 
  564        if( !evt && me->GetWheelRotation() != 0 )
 
  566            const unsigned modBits =
 
  568            const bool shouldHandle = std::popcount( modBits ) > 1;
 
  573                evt->SetParameter<
int>( me->GetWheelRotation() );
 
  577    else if( type == wxEVT_CHAR_HOOK || type == wxEVT_CHAR )
 
  579        wxKeyEvent* ke = 
static_cast<wxKeyEvent*
>( &aEvent );
 
  587        if( type == wxEVT_CHAR_HOOK && ke->GetModifiers() == wxMOD_SHIFT )
 
  593        keyIsEscape = ( ke->GetKeyCode() == WXK_ESCAPE );
 
  606            else if( ke->GetModifiers() == wxMOD_CONTROL && ke->GetKeyCode() == 
'C' )
 
  615    else if( type == wxEVT_MENU_OPEN || type == wxEVT_MENU_CLOSE || type == wxEVT_MENU_HIGHLIGHT )
 
  617        wxMenuEvent* tmp = 
dynamic_cast<wxMenuEvent*
>( &aEvent );
 
  627        wxMenuEvent& menuEvent = *tmp;
 
  629#if wxCHECK_VERSION( 3, 2, 0 ) 
  632            currentMenu->OnMenuEvent( menuEvent );
 
  650        if( type == wxEVT_MENU_OPEN )
 
  652            currentMenu = 
dynamic_cast<ACTION_MENU*
>( menuEvent.GetMenu() );
 
  657        else if( type == wxEVT_MENU_HIGHLIGHT )
 
  662        else if( type == wxEVT_MENU_CLOSE )
 
  667            currentMenu = 
nullptr;
 
  674    bool handled = 
false;
 
  681        handled = 
m_toolMgr->ProcessEvent( *evt );
 
  684                    wxS( 
"TOOL_DISPATCHER::DispatchWxEvent - Handled: %s  %s" ),
 
  685                    ( handled ? wxS( 
"true" ) : wxS( 
"false" ) ), evt->Format() );
 
  702    if( !evt || type == wxEVT_LEFT_DOWN )
 
  710    if( ( type == wxEVT_CHAR || type == wxEVT_CHAR_HOOK )
 
  718    wxLogTrace( 
kicadTraceToolStack, 
"TOOL_DISPATCHER::DispatchWxEvent - Wx event skipped: %s",
 
  719                ( aEvent.GetSkipped() ? 
"true" : 
"false" ) );
 
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
static const wxEventType EVT_REFRESH_MOUSE
Event that forces mouse move event in the dispatcher (eg.
 
const wxChar *const kicadTraceKeyEvent
Flag to enable wxKeyEvent debug tracing.
 
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
 
void ignore_unused(const T &)
 
This file contains miscellaneous commonly used macros and functions.
 
KICOMMON_API bool IsInputControlFocused(wxWindow *aFocus=nullptr)
Check if a input control has focus.
 
KICOMMON_API bool IsInputControlEditable(wxWindow *aControl)
Check if a input control has focus.
 
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
 
wxString dump(const wxArrayString &aArray)
Debug helper for printing wxArrayString contents.
 
wxLogTrace helper definitions.
 
VECTOR2< double > VECTOR2D
 
WX_VIEW_CONTROLS class definition.