From a6c770c4f86002154b9c4d0dde1214ed0b5e0887 Mon Sep 17 00:00:00 2001 From: thibaudk Date: Mon, 20 Jan 2025 13:12:05 +0000 Subject: [PATCH] [bug] fix bugui/issues/8 --- Hardware/Widgets/EventWidget.cpp | 7 +++++-- Hardware/Widgets/EventWidget.hpp | 1 + Hardware/Widgets/IntervalWidget.cpp | 11 +++++++---- Hardware/Widgets/StateWidget.cpp | 9 +++++++-- Hardware/Widgets/TimeSyncWidget.cpp | 3 +++ 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Hardware/Widgets/EventWidget.cpp b/Hardware/Widgets/EventWidget.cpp index a3b1b9d..f9132ab 100644 --- a/Hardware/Widgets/EventWidget.cpp +++ b/Hardware/Widgets/EventWidget.cpp @@ -28,6 +28,11 @@ EventWidget::EventWidget(Scenario::EventModel& event, static_cast(s.get())->set_y(); } +void EventWidget::set_y() +{ + m_y = m_absolute_y - parent->y(); +} + void EventWidget::set_span_recursive() { int lowest{std::numeric_limits::max()}; @@ -45,8 +50,6 @@ void EventWidget::set_span_recursive() static_cast(bugui::base_widget::parent)->set_span(); - m_y = m_absolute_y - parent->y(); - for(const auto& s : bugui::container_widget::children) static_cast(s.get())->set_y(); } diff --git a/Hardware/Widgets/EventWidget.hpp b/Hardware/Widgets/EventWidget.hpp index a0f0742..9d05b54 100644 --- a/Hardware/Widgets/EventWidget.hpp +++ b/Hardware/Widgets/EventWidget.hpp @@ -17,6 +17,7 @@ struct EventWidget final : Nano::Observer int get_absolute_y() { return m_absolute_y; }; int height() const override { return m_height; } + void set_y(); void set_span_recursive(); private: diff --git a/Hardware/Widgets/IntervalWidget.cpp b/Hardware/Widgets/IntervalWidget.cpp index 4c323d5..6d62912 100644 --- a/Hardware/Widgets/IntervalWidget.cpp +++ b/Hardware/Widgets/IntervalWidget.cpp @@ -31,8 +31,7 @@ bool IntervalWidget::contains(int px, int py) const // ignore first and last cell // so that timesyncs are pressed // at the extremeties - if (px > 0 && px < width() && - py == 0) + if (px > 0 && px < width() && py == 0) return true; return false; @@ -60,8 +59,12 @@ void IntervalWidget::on_double_press(int x, int y) void IntervalWidget::on_drag(int from_x, int from_y, int to_x, int to_y) { - double increment{to_y / static_cast(scenario->height())}; - model.requestHeightChange(model.heightPercentage() + increment); + double new_height{model.heightPercentage() + + to_y / static_cast(scenario->height())}; + + // prevent dragging out of scenario + if (new_height >= 0 && new_height <= 1) + model.setHeightPercentage(new_height); } } // namespace hardware diff --git a/Hardware/Widgets/StateWidget.cpp b/Hardware/Widgets/StateWidget.cpp index 3c3766d..19b31b8 100644 --- a/Hardware/Widgets/StateWidget.cpp +++ b/Hardware/Widgets/StateWidget.cpp @@ -53,8 +53,13 @@ void StateWidget::on_double_press(int x, int y) void StateWidget::on_drag(int from_x, int from_y, int to_x, int to_y) { - double increment{to_y / static_cast(scenario->height())}; - model.setHeightPercentage(model.heightPercentage() + increment); + double new_height{model.heightPercentage() + + to_y / static_cast(scenario->height())}; + + // prevent dragging out of scenario + if (new_height >= 0 && new_height <= 1) + model.setHeightPercentage(new_height); + } void StateWidget::set_absolute_y() diff --git a/Hardware/Widgets/TimeSyncWidget.cpp b/Hardware/Widgets/TimeSyncWidget.cpp index eb72ca3..f5d101e 100644 --- a/Hardware/Widgets/TimeSyncWidget.cpp +++ b/Hardware/Widgets/TimeSyncWidget.cpp @@ -79,6 +79,9 @@ void TimeSyncWidget::set_span() m_y = lowest; m_height = heighest - lowest; + + for(const auto& e : bugui::container_widget::children) + static_cast(e.get())->set_y(); } void TimeSyncWidget::paint(bugui::painter& painter) const