diff --git a/Applications/VisualBuilder/VBForm.cpp b/Applications/VisualBuilder/VBForm.cpp index 8cc53728b0..7a3ace5010 100644 --- a/Applications/VisualBuilder/VBForm.cpp +++ b/Applications/VisualBuilder/VBForm.cpp @@ -105,6 +105,50 @@ void VBForm::grabber_mousedown_event(GMouseEvent& event, VBWidget& widget, Direc m_resize_direction = grabber; } +void VBForm::keydown_event(GKeyEvent& event) +{ + if (event.key() == KeyCode::Key_Tab) { + if (!m_selected_widget && !m_widgets.is_empty()) { + m_selected_widget = m_widgets.first()->make_weak_ptr(); + update(); + return; + } else { + int selected_widget_index = 0; + for (; selected_widget_index < m_widgets.size(); ++selected_widget_index) { + if (m_widgets[selected_widget_index] == m_selected_widget) + break; + } + ++selected_widget_index; + if (selected_widget_index == m_widgets.size()) + selected_widget_index = 0; + m_selected_widget = m_widgets[selected_widget_index]->make_weak_ptr(); + update(); + return; + } + } + if (m_selected_widget) { + switch (event.key()) { + case KeyCode::Key_Up: + update(); + m_selected_widget->gwidget()->move_by(0, -m_grid_size); + break; + case KeyCode::Key_Down: + update(); + m_selected_widget->gwidget()->move_by(0, m_grid_size); + break; + case KeyCode::Key_Left: + update(); + m_selected_widget->gwidget()->move_by(-m_grid_size, 0); + break; + case KeyCode::Key_Right: + update(); + m_selected_widget->gwidget()->move_by(m_grid_size, 0); + break; + } + return; + } +} + void VBForm::mousedown_event(GMouseEvent& event) { if (m_selected_widget && m_resize_direction == Direction::None) { diff --git a/Applications/VisualBuilder/VBForm.h b/Applications/VisualBuilder/VBForm.h index d9cc55df0e..99d80df829 100644 --- a/Applications/VisualBuilder/VBForm.h +++ b/Applications/VisualBuilder/VBForm.h @@ -31,6 +31,7 @@ protected: virtual void mousedown_event(GMouseEvent&) override; virtual void mousemove_event(GMouseEvent&) override; virtual void mouseup_event(GMouseEvent&) override; + virtual void keydown_event(GKeyEvent&) override; private: void grabber_mousedown_event(GMouseEvent&, VBWidget&, Direction grabber);