From 9887ab6f8ded3883163a44260ae4d97f91d86dd1 Mon Sep 17 00:00:00 2001 From: thibaudk Date: Thu, 16 Jan 2025 02:00:26 +0000 Subject: [PATCH] [widgets] various fixes --- Hardware/Widgets/EventWidget.cpp | 7 +++++++ Hardware/Widgets/IntervalWidget.cpp | 6 +++--- Hardware/Widgets/ScenarioWidget.cpp | 15 +++++++++++++++ Hardware/Widgets/ScenarioWidget.hpp | 3 +++ Hardware/Widgets/StateWidget.cpp | 15 ++++++++++----- Hardware/Widgets/TimeSyncWidget.cpp | 10 +++++++++- 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/Hardware/Widgets/EventWidget.cpp b/Hardware/Widgets/EventWidget.cpp index d12a395..7bf5b14 100644 --- a/Hardware/Widgets/EventWidget.cpp +++ b/Hardware/Widgets/EventWidget.cpp @@ -46,6 +46,9 @@ void EventWidget::set_y_height() { static_cast(bugui::base_widget::parent)->set_y_height(); + m_y = std::numeric_limits::max(); + m_height = std::numeric_limits::lowest(); + for(const auto& s : bugui::container_widget::children) { int sy = s->y(); @@ -77,6 +80,10 @@ void EventWidget::on_state_added(Scenario::StateModel& state) if (state.eventId() != model.id()) return; add_widget(state, scenario); + + // FIXME: workaround for update() not working + // in the constructor of StateWidget + update(); } void EventWidget::on_state_removed(const Scenario::StateModel& state) diff --git a/Hardware/Widgets/IntervalWidget.cpp b/Hardware/Widgets/IntervalWidget.cpp index 9584bab..b4168f4 100644 --- a/Hardware/Widgets/IntervalWidget.cpp +++ b/Hardware/Widgets/IntervalWidget.cpp @@ -50,10 +50,10 @@ int IntervalWidget::width() const void IntervalWidget::paint(bugui::painter& painter) const { // Copied from MiniscenarioView - const auto col = skin.IntervalBase().color(); - painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); + // const auto col = skin.IntervalBase().color(); + // painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); - painter.draw_line(0, 0, width(), 0); + // painter.draw_line(0, 0, width(), 0); } bool IntervalWidget::contains(int px, int py) const diff --git a/Hardware/Widgets/ScenarioWidget.cpp b/Hardware/Widgets/ScenarioWidget.cpp index 87b4c69..c5bbbbe 100644 --- a/Hardware/Widgets/ScenarioWidget.cpp +++ b/Hardware/Widgets/ScenarioWidget.cpp @@ -9,6 +9,7 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario, bugui::container_widget* parent) : bugui::container_widget{parent} , model{scenario} + , skin{Process::Style::instance()} { model->intervals.mutable_added.connect<&ScenarioWidget::on_interval_added>(this); model->intervals.removed.connect<&ScenarioWidget::on_interval_removed>(this); @@ -48,6 +49,20 @@ Scenario::ProcessModel *ScenarioWidget::get_model() const return model; } +void ScenarioWidget::paint(bugui::painter& painter) const +{ + const auto col = skin.IntervalBase().color(); + painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); + + for (const auto& i : model->intervals) + { + int y{static_cast(i.heightPercentage() * height())}; + int st{static_cast(i.date().sec())}; + + painter.draw_line(st, y, st + i.duration.defaultDuration().sec(), y); + } +} + void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval) { add_widget(interval, this); diff --git a/Hardware/Widgets/ScenarioWidget.hpp b/Hardware/Widgets/ScenarioWidget.hpp index 2fde41b..96149a3 100644 --- a/Hardware/Widgets/ScenarioWidget.hpp +++ b/Hardware/Widgets/ScenarioWidget.hpp @@ -21,6 +21,8 @@ public: Scenario::ProcessModel* get_model() const; private: + void paint(bugui::painter& painter) const override; + void on_interval_added(Scenario::IntervalModel& interval); void on_interval_removed(const Scenario::IntervalModel& interval); @@ -28,6 +30,7 @@ private: void on_time_sync_removed(const Scenario::TimeSyncModel& timeSync); Scenario::ProcessModel* model{nullptr}; + const Process::Style& skin; }; } // namespace Hardware diff --git a/Hardware/Widgets/StateWidget.cpp b/Hardware/Widgets/StateWidget.cpp index 2a0c31e..2ca54b9 100644 --- a/Hardware/Widgets/StateWidget.cpp +++ b/Hardware/Widgets/StateWidget.cpp @@ -14,7 +14,11 @@ StateWidget::StateWidget(Scenario::StateModel& state, connect(&model, &Scenario::StateModel::heightPercentageChanged, this, - &StateWidget::set_y); + [this] + { + set_y(); + update(); + }); set_y(); } @@ -23,8 +27,7 @@ StateWidget::~StateWidget() { // disconnect(&model, // &Scenario::StateModel::heightPercentageChanged, - // this, - // &StateWidget::set_y); + // this, 0); } int StateWidget::y() const @@ -34,7 +37,7 @@ int StateWidget::y() const void StateWidget::paint(bugui::painter& painter) const { - const auto col = skin.StateDot().color(); + const auto col = skin.StateSelected().color(); painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); painter.draw_cell(0, 0); @@ -74,7 +77,9 @@ void StateWidget::set_y() bugui::base_widget::parent->get_parent()->y() - bugui::base_widget::parent->y(); - update(); + + // FIXME : update dosen't work here for the constructor + // curently moved to EventWidget::on_state_added } } // namespace Hardware diff --git a/Hardware/Widgets/TimeSyncWidget.cpp b/Hardware/Widgets/TimeSyncWidget.cpp index c2698d7..215b6a6 100644 --- a/Hardware/Widgets/TimeSyncWidget.cpp +++ b/Hardware/Widgets/TimeSyncWidget.cpp @@ -21,7 +21,9 @@ TimeSyncWidget::TimeSyncWidget(Scenario::TimeSyncModel& timeSync, &Scenario::TimeSyncModel::newEvent, this, [scenario, this] (const Id& eventId) - { add_widget(scenario->get_model()->events.at(eventId), scenario); }); + { + add_widget(scenario->get_model()->events.at(eventId), scenario); + }); connect(&model, &Scenario::TimeSyncModel::eventRemoved, @@ -31,6 +33,9 @@ TimeSyncWidget::TimeSyncWidget(Scenario::TimeSyncModel& timeSync, remove_widget([&eventId] (const auto& w) { return static_cast*>(w.get())->this_model(eventId); }); + + set_y_height(); + update(); }); Scenario::ProcessModel* scen{scenario->get_model()}; @@ -78,6 +83,9 @@ void TimeSyncWidget::set_y_height(int event_y) void TimeSyncWidget::set_y_height() { + m_y = std::numeric_limits::max(); + m_height = std::numeric_limits::lowest(); + for(const auto& e : bugui::container_widget::children) { int ey = e->y();