ENH: TabCtrl: support arrow key events
Change-Id: I16423d542246925e2469541b1d634d6c4373af69
This commit is contained in:
parent
43cd7c8315
commit
85ffeb291d
3 changed files with 38 additions and 4 deletions
|
@ -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:
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue