[widgets] fix contain functions

This commit is contained in:
thibaud keller 2025-01-19 19:11:10 +00:00
parent 45d3059b08
commit 294e23cc9b
11 changed files with 55 additions and 75 deletions

@ -1 +1 @@
Subproject commit 6a0c86674d0f1513c92140530d2221051ed05ee5 Subproject commit 3c63860f760d7ec20f09f0d4f6293381fc08e876

View file

@ -46,19 +46,27 @@ void EventWidget::set_span_recursive()
static_cast<TimeSyncWidget*>(bugui::base_widget::parent)->set_span(); static_cast<TimeSyncWidget*>(bugui::base_widget::parent)->set_span();
m_y = m_absolute_y - parent->y(); m_y = m_absolute_y - parent->y();
for(const auto& s : bugui::container_widget::children)
static_cast<StateWidget*>(s.get())->set_y();
} }
void EventWidget::paint(bugui::painter& painter) const void EventWidget::paint(bugui::painter& painter) const
{ {
// const auto col = skin.StateSelected().color(); if (!press) return;
// painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
// painter.draw_line(0, 0, 0, m_height); const auto col = model.metadata().getColor().getBrush().color();
// const auto col = skin.StateSelected().color();
painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
painter.draw_line(0, 0, 0, m_height);
} }
bool EventWidget::contains(int px, int py) const bool EventWidget::contains(int px, int py) const
{ {
if (px == x() && py == y()) if (px == 0 &&
py >= 0 &&
py <= m_height)
return true; return true;
return false; return false;
@ -88,12 +96,7 @@ void EventWidget::on_state_removed(const Scenario::StateModel& state)
void EventWidget::on_press(int x, int y, bool pressed) void EventWidget::on_press(int x, int y, bool pressed)
{ {
qDebug() << "event pressed"; press = pressed;
}
void EventWidget::on_double_press(int x, int y, bool pressed)
{
qDebug() << "event double pressed";
} }
} // namespace Hardware } // namespace Hardware

View file

@ -25,11 +25,12 @@ private:
void paint(bugui::painter& painter) const override; void paint(bugui::painter& painter) const override;
void on_press(int x, int y, bool pressed) override; void on_press(int x, int y, bool pressed) override;
void on_double_press(int x, int y, bool pressed);
void on_state_added(Scenario::StateModel& state); void on_state_added(Scenario::StateModel& state);
void on_state_removed(const Scenario::StateModel& state); void on_state_removed(const Scenario::StateModel& state);
bool press{false};
int m_absolute_y{0}; int m_absolute_y{0};
int m_y{0}; int m_y{0};
int m_height{0}; int m_height{0};

View file

@ -38,6 +38,16 @@ bool IntervalWidget::contains(int px, int py) const
return false; return false;
} }
void IntervalWidget::paint(bugui::painter &painter) const
{
const auto col{model.metadata().getColor().getBrush().color()};
painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
painter.set_paint_over(false);
painter.draw_line(0, 0, width(), 0);
painter.set_paint_over(true);
}
void IntervalWidget::on_press(int x, int y, bool pressed) void IntervalWidget::on_press(int x, int y, bool pressed)
{ {
qDebug() << "interval pressed"; qDebug() << "interval pressed";

View file

@ -20,6 +20,8 @@ struct IntervalWidget final : ScenarioComponentSpec<Scenario::IntervalModel>
private: private:
bool contains(int px, int py) const override; bool contains(int px, int py) const override;
void paint(bugui::painter& painter) const override;
void on_press(int x, int y, bool pressed) override; void on_press(int x, int y, bool pressed) override;
void on_double_press(int x, int y) override; void on_double_press(int x, int y) override;
void on_drag(int from_x, int from_y, int to_x, int to_y) override; void on_drag(int from_x, int from_y, int to_x, int to_y) override;

View file

@ -24,45 +24,6 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario,
add_widget<TimeSyncWidget>(t, this); add_widget<TimeSyncWidget>(t, this);
} }
int ScenarioWidget::x() const
{
return bugui::base_widget::parent->x();
}
int ScenarioWidget::y() const
{
return bugui::base_widget::parent->y();
}
int ScenarioWidget::width() const
{
return std::numeric_limits<int>::max();
}
int ScenarioWidget::height() const
{
return 15;
}
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<int>(i.heightPercentage() * height())};
int st{static_cast<int>(i.date().sec())};
painter.draw_line(st, y, st + i.duration.defaultDuration().sec(), y);
}
}
void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval) void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval)
{ {
add_widget<IntervalWidget>(interval, this); add_widget<IntervalWidget>(interval, this);

View file

@ -13,16 +13,17 @@ public:
explicit ScenarioWidget(Scenario::ProcessModel* scenario, explicit ScenarioWidget(Scenario::ProcessModel* scenario,
bugui::container_widget* parent); bugui::container_widget* parent);
int x() const override; int x() const override
int y() const override; { return bugui::base_widget::parent->x(); }
int width() const override; int y() const override
int height() const override; { return bugui::base_widget::parent->y(); }
int width() const override
{ return std::numeric_limits<int>::max(); }
int height() const override { return 15; }
Scenario::ProcessModel* get_model() const; Scenario::ProcessModel* get_model() const { return model; }
private: private:
void paint(bugui::painter& painter) const override;
void on_interval_added(Scenario::IntervalModel& interval); void on_interval_added(Scenario::IntervalModel& interval);
void on_interval_removed(const Scenario::IntervalModel& interval); void on_interval_removed(const Scenario::IntervalModel& interval);

View file

@ -24,22 +24,18 @@ StateWidget::StateWidget(Scenario::StateModel& state,
}); });
} }
StateWidget::~StateWidget()
{
disconnect(con);
}
void StateWidget::paint(bugui::painter& painter) const void StateWidget::paint(bugui::painter& painter) const
{ {
const auto col{model.metadata().getColor().getBrush().color()};
// const auto col = skin.StateSelected().color(); // const auto col = skin.StateSelected().color();
// painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
// painter.draw_cell(0, 0); painter.draw_cell(0, 0);
} }
bool StateWidget::contains(int px, int py) const bool StateWidget::contains(int px, int py) const
{ {
if (px == x() && py == y()) if (px == 0 && py == 0)
return true; return true;
return false; return false;
@ -47,7 +43,7 @@ bool StateWidget::contains(int px, int py) const
void StateWidget::on_press(int x, int y, bool pressed) void StateWidget::on_press(int x, int y, bool pressed)
{ {
qDebug() << "state pressed"; update();
} }
void StateWidget::on_double_press(int x, int y) void StateWidget::on_double_press(int x, int y)
@ -77,8 +73,6 @@ void StateWidget::set_span_recursive()
{ {
static_cast<EventWidget*>(bugui::base_widget::parent) static_cast<EventWidget*>(bugui::base_widget::parent)
->set_span_recursive(); ->set_span_recursive();
set_y();
} }
} // namespace Hardware } // namespace Hardware

View file

@ -12,7 +12,7 @@ struct StateWidget final : QObject
ScenarioWidget* scenario, ScenarioWidget* scenario,
bugui::container_widget* parent); bugui::container_widget* parent);
~StateWidget() override; ~StateWidget() override { disconnect(con); }
int y() const override { return m_y; } int y() const override { return m_y; }
int get_absolute_y() { return m_absolute_y; }; int get_absolute_y() { return m_absolute_y; };

View file

@ -70,8 +70,9 @@ void TimeSyncWidget::set_span()
for(const auto& e : bugui::container_widget::children) for(const auto& e : bugui::container_widget::children)
{ {
int sy = static_cast<EventWidget*>(e.get())->get_absolute_y(); auto e_ptr{static_cast<EventWidget*>(e.get())};
int sh = sy + static_cast<EventWidget*>(e.get())->height(); int sy = e_ptr->get_absolute_y();
int sh = sy + e_ptr->height();
if (sy < lowest) lowest = sy; if (sy < lowest) lowest = sy;
if (sh > heighest) heighest = sh; if (sh > heighest) heighest = sh;
} }
@ -82,7 +83,10 @@ void TimeSyncWidget::set_span()
void TimeSyncWidget::paint(bugui::painter& painter) const void TimeSyncWidget::paint(bugui::painter& painter) const
{ {
const auto col = skin.StateSelected().color(); if (!press) return;
const auto col = model.metadata().getColor().getBrush().color();
// const auto col = skin.StateSelected().color();
painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
painter.draw_line(0, 0, 0, m_height); painter.draw_line(0, 0, 0, m_height);
@ -90,7 +94,9 @@ void TimeSyncWidget::paint(bugui::painter& painter) const
bool TimeSyncWidget::contains(int px, int py) const bool TimeSyncWidget::contains(int px, int py) const
{ {
if (px == x() && py == y()) if (px == 0 &&
py >= 0 &&
py <= m_height)
return true; return true;
return false; return false;
@ -98,7 +104,7 @@ bool TimeSyncWidget::contains(int px, int py) const
void TimeSyncWidget::on_press(int x, int y, bool pressed) void TimeSyncWidget::on_press(int x, int y, bool pressed)
{ {
qDebug() << "timeSync pressed"; press = pressed;
} }
} // namespace Hardware } // namespace Hardware

View file

@ -30,6 +30,8 @@ private:
void paint(bugui::painter& painter) const override; void paint(bugui::painter& painter) const override;
void on_press(int x, int y, bool pressed) override; void on_press(int x, int y, bool pressed) override;
bool press{false};
int m_y{0}; int m_y{0};
int m_height{0}; int m_height{0};
}; };