18 const auto keyCode = evt.GetKeyCode();
19 if((keyCode == WXK_DOWN || keyCode == WXK_UP) &&
23 self->SetFocusFromKbd();
31 const auto keyCode = evt.GetKeyCode();
32 if(keyCode == WXK_TAB)
33 self->NavigateIn(wxNavigationKeyEvent::FromTab | (evt.ShiftDown() ? wxNavigationKeyEvent::IsBackward : wxNavigationKeyEvent::IsForward));
34 else if(keyCode == WXK_DOWN)
35 self->Navigate(wxNavigationKeyEvent::IsForward);
36 else if(keyCode == WXK_UP)
37 self->Navigate(wxNavigationKeyEvent::IsBackward);
44 if(evt.GetEventObject() == self->GetParent() && !evt.IsFromTab())
45 self->SetFocusFromKbd();
46 else if(evt.GetEventObject() == self && evt.GetCurrentFocus() == self && evt.IsFromTab())
49 wxPropagationDisabler disableProp(evt);
50 const auto isForward = evt.GetDirection();
51 const auto& children = self->GetChildren();
52 auto node = isForward ? children.GetFirst() : children.GetLast();
55 auto child = node->GetData();
56 if(child->CanAcceptFocusFromKeyboard())
58 if(!child->GetEventHandler()->ProcessEvent(evt))
60 child->SetFocusFromKbd();
65 node = isForward ? node->GetNext() : node->GetPrevious();
76 auto next = self->GetNextSibling();
77 if(next !=
nullptr && next->AcceptsFocus())
81 auto prev = self->GetPrevSibling();
82 if(prev !=
nullptr && prev->AcceptsFocus())
void ListNavigationEnabled_HandleNavigationKeyEvent(wxWindow *self, wxNavigationKeyEvent &evt)
void ListNavigationEnabled_HandleDestroy(wxWindow *self)
void ListNavigationEnabled_HandleKeyDown(wxWindow *self, wxKeyEvent &evt)
void ListNavigationEnabled_HandleCharHook(wxWindow *self, wxKeyEvent &evt)
std::unique_ptr< WindowPlacement > FindFocus()
Find the window that is accepting keyboard input, if any.