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)
|
void ComboBox::mouseDown(wxMouseEvent &event)
|
||||||
{
|
{
|
||||||
//SetFocus();
|
SetFocus();
|
||||||
if (drop_down) {
|
if (drop_down) {
|
||||||
drop.Hide();
|
drop.Hide();
|
||||||
} else if (drop.HasDismissLongTime()) {
|
} 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()) {
|
switch (event.GetKeyCode()) {
|
||||||
case WXK_RETURN:
|
case WXK_RETURN:
|
||||||
case WXK_SPACE:
|
case WXK_SPACE:
|
||||||
|
|
|
@ -5,7 +5,8 @@ wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent );
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(TabCtrl, StaticBox)
|
BEGIN_EVENT_TABLE(TabCtrl, StaticBox)
|
||||||
|
|
||||||
// catch paint events
|
EVT_KEY_DOWN(TabCtrl::keyDown)
|
||||||
|
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -201,6 +202,16 @@ void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||||
relayout();
|
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()
|
void TabCtrl::relayout()
|
||||||
{
|
{
|
||||||
int offset = 10;
|
int offset = 10;
|
||||||
|
@ -243,11 +254,28 @@ void TabCtrl::relayout()
|
||||||
|
|
||||||
void TabCtrl::buttonClicked(wxCommandEvent &event)
|
void TabCtrl::buttonClicked(wxCommandEvent &event)
|
||||||
{
|
{
|
||||||
auto btn = event.GetEventObject();
|
SetFocus();
|
||||||
|
auto btn = event.GetEventObject();
|
||||||
auto iter = std::find(btns.begin(), btns.end(), btn);
|
auto iter = std::find(btns.begin(), btns.end(), btn);
|
||||||
SelectItem(iter == btns.end() ? -1 : iter - btns.begin());
|
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)
|
void TabCtrl::doRender(wxDC& dc)
|
||||||
{
|
{
|
||||||
wxSize size = GetSize();
|
wxSize size = GetSize();
|
||||||
|
|
|
@ -65,9 +65,14 @@ public:
|
||||||
private:
|
private:
|
||||||
virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
|
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 relayout();
|
||||||
|
|
||||||
void buttonClicked(wxCommandEvent & event);
|
void buttonClicked(wxCommandEvent & event);
|
||||||
|
void keyDown(wxKeyEvent &event);
|
||||||
|
|
||||||
void doRender(wxDC & dc) override;
|
void doRender(wxDC & dc) override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue