diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index ec416ea04..c15ade211 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -206,7 +206,7 @@ void ComboBox::DoSetItemClientData(unsigned int n, void *data) void ComboBox::mouseDown(wxMouseEvent &event) { - //SetFocus(); + SetFocus(); if (drop_down) { drop.Hide(); } else if (drop.HasDismissLongTime()) { @@ -230,7 +230,8 @@ void ComboBox::mouseWheelMoved(wxMouseEvent &event) } } -void ComboBox::keyDown(wxKeyEvent& event) { +void ComboBox::keyDown(wxKeyEvent& event) +{ switch (event.GetKeyCode()) { case WXK_RETURN: case WXK_SPACE: diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index b2b760272..71ba2a49e 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -5,7 +5,8 @@ wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent ); BEGIN_EVENT_TABLE(TabCtrl, StaticBox) -// catch paint events +EVT_KEY_DOWN(TabCtrl::keyDown) + END_EVENT_TABLE() /* @@ -201,6 +202,16 @@ void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) relayout(); } +#ifdef __WIN32__ + +WXLRESULT TabCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ + if (nMsg == WM_GETDLGCODE) { return DLGC_WANTARROWS; } + return wxWindow::MSWWindowProc(nMsg, wParam, lParam); +} + +#endif + void TabCtrl::relayout() { int offset = 10; @@ -243,11 +254,28 @@ void TabCtrl::relayout() void TabCtrl::buttonClicked(wxCommandEvent &event) { - auto btn = event.GetEventObject(); + SetFocus(); + auto btn = event.GetEventObject(); auto iter = std::find(btns.begin(), btns.end(), btn); SelectItem(iter == btns.end() ? -1 : iter - btns.begin()); } +void TabCtrl::keyDown(wxKeyEvent &event) +{ + switch (event.GetKeyCode()) { + case WXK_UP: + case WXK_DOWN: + case WXK_LEFT: + case WXK_RIGHT: + if ((event.GetKeyCode() == WXK_UP || event.GetKeyCode() == WXK_LEFT) && GetSelection() > 0) { + SelectItem(GetSelection() - 1); + } else if ((event.GetKeyCode() == WXK_DOWN || event.GetKeyCode() == WXK_RIGHT) && GetSelection() + 1 < btns.size()) { + SelectItem(GetSelection() + 1); + } + break; + } +} + void TabCtrl::doRender(wxDC& dc) { wxSize size = GetSize(); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index 92b7f1cd3..a25f332fb 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -65,9 +65,14 @@ public: private: virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); +#ifdef __WIN32__ + WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) override; +#endif + void relayout(); void buttonClicked(wxCommandEvent & event); + void keyDown(wxKeyEvent &event); void doRender(wxDC & dc) override;