VisualBuilder: Share code for setting the selected widget.

This fixes an issue where the properties window didn't update when selecting
a new widget using the keyboard shortcuts. :^)
This commit is contained in:
Andreas Kling 2019-04-16 23:11:35 +02:00
parent f7157520eb
commit ef8c613737
Notes: sideshowbarker 2024-07-19 14:40:56 +09:00
2 changed files with 23 additions and 13 deletions

View file

@ -109,7 +109,7 @@ 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();
set_selected_widget(m_widgets.first());
update();
return;
} else {
@ -121,7 +121,7 @@ void VBForm::keydown_event(GKeyEvent& event)
++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();
set_selected_widget(m_widgets[selected_widget_index]);
update();
return;
}
@ -149,14 +149,8 @@ void VBForm::keydown_event(GKeyEvent& event)
}
}
void VBForm::mousedown_event(GMouseEvent& event)
void VBForm::set_selected_widget(VBWidget* widget)
{
if (m_selected_widget && m_resize_direction == Direction::None) {
auto grabber = m_selected_widget->grabber_at(event.position());
if (grabber != Direction::None)
return grabber_mousedown_event(event, *m_selected_widget, grabber);
}
auto* widget = widget_at(event.position());
if (!widget) {
if (m_selected_widget) {
m_selected_widget = nullptr;
@ -166,13 +160,28 @@ void VBForm::mousedown_event(GMouseEvent& event)
}
return;
}
m_selected_widget = widget->make_weak_ptr();
if (on_widget_selected)
on_widget_selected(widget);
update();
}
void VBForm::mousedown_event(GMouseEvent& event)
{
if (m_selected_widget && m_resize_direction == Direction::None) {
auto grabber = m_selected_widget->grabber_at(event.position());
if (grabber != Direction::None)
return grabber_mousedown_event(event, *m_selected_widget, grabber);
}
auto* widget = widget_at(event.position());
if (!widget) {
set_selected_widget(nullptr);
return;
}
if (event.button() == GMouseButton::Left || event.button() == GMouseButton::Right) {
m_selected_widget = widget->make_weak_ptr();
m_transform_event_origin = event.position();
m_transform_widget_origin_rect = widget->rect();
if (on_widget_selected)
on_widget_selected(widget);
update();
set_selected_widget(widget);
}
}

View file

@ -35,6 +35,7 @@ protected:
private:
void grabber_mousedown_event(GMouseEvent&, VBWidget&, Direction grabber);
void set_selected_widget(VBWidget*);
String m_name;
int m_grid_size { 5 };