[widgets] rebase on container_widget

This commit is contained in:
thibaud keller 2024-12-31 16:11:11 +00:00
parent 2108bda343
commit d52e74eb27
7 changed files with 18 additions and 88 deletions

@ -1 +1 @@
Subproject commit 0f5aabb4a70a5e0e82a758a17d27f700a21830e8
Subproject commit dfa356a6fe5d8fd215fae4e59d0b662938b17d7b

View file

@ -17,38 +17,13 @@ Controller::Controller(const score::DocumentContext& document,
{
auto scnr = qobject_cast<Scenario::ProcessModel*>(&*interval.processes.begin());
if (scnr) widgets.emplace_back(std::make_unique<ScenarioWidget>(this, scnr));
if (scnr)
bugui::container_widget::children.emplace_back(
std::make_unique<ScenarioWidget>(this, scnr));
update();
}
bool Controller::on_press(int x, int y, bool pressed)
{
for (auto& w : widgets)
if (w->on_press(x, y, pressed))
return true;
return false;
}
bool Controller::on_double_press(int x, int y)
{
for (auto& w : widgets)
if (w->on_double_press(x, y))
return true;
return false;
}
bool Controller::on_drag(int from_x, int from_y, int to_x, int to_y)
{
for (auto& w : widgets)
if (w->on_drag(from_x, from_y, to_x, to_y))
return true;
return false;
}
void Controller::on_play(bool pressed)
{
if (m_shift)

View file

@ -29,10 +29,6 @@ public:
void on_left(bool pressed);
void on_right(bool pressed);
bool on_press(int x, int y, bool pressed) override;
bool on_double_press(int x, int y) override;
bool on_drag(int from_x, int from_y, int to_x, int to_y) override;
private:
Scenario::IntervalModel* interval;
const score::DocumentContext& doc;

View file

@ -2,9 +2,9 @@
namespace Hardware
{
IntervalWidget::IntervalWidget(base_widget* parent,
IntervalWidget::IntervalWidget(container_widget *parent,
Scenario::IntervalModel& interval)
: bugui::base_widget{parent}
: bugui::container_widget{parent}
, model{interval}
, skin{Process::Style::instance()}
{

View file

@ -2,13 +2,13 @@
#include <Scenario/Document/Interval/IntervalModel.hpp>
#include <Process/Style/ScenarioStyle.hpp>
#include <base_widget.hpp>
#include <widgets/container_widget.hpp>
namespace Hardware
{
struct IntervalWidget final : bugui::base_widget
struct IntervalWidget final : bugui::container_widget
{
explicit IntervalWidget(base_widget* parent,
explicit IntervalWidget(container_widget* parent,
Scenario::IntervalModel& interval);
void paint(bugui::painter& painter) const override;

View file

@ -3,9 +3,9 @@
namespace Hardware
{
ScenarioWidget::ScenarioWidget(base_widget* parent,
ScenarioWidget::ScenarioWidget(bugui::container_widget* parent,
Scenario::ProcessModel* scenario)
: bugui::base_widget{parent}
: bugui::container_widget{parent}
, model{scenario}
{
model->intervals.mutable_added.connect<&ScenarioWidget::on_interval_added>(this);
@ -16,42 +16,7 @@ ScenarioWidget::ScenarioWidget(base_widget* parent,
[this] { update(); });
for(Scenario::IntervalModel& s : model->intervals)
widgets.emplace_back(std::make_unique<IntervalWidget>(this, s));
}
void ScenarioWidget::paint(bugui::painter& painter) const
{
for (const auto& w : widgets) w->paint(painter);
}
bool ScenarioWidget::on_press(int x, int y, bool pressed)
{
if (!is_inside(x, y)) return false;
for (auto& w : widgets)
if (w->on_press(x, y, pressed)) return true;
return true;
}
bool ScenarioWidget::on_double_press(int x, int y)
{
if (!is_inside(x, y)) return false;
for (auto& w : widgets)
if (w->on_double_press(x, y)) return true;
return true;
}
bool ScenarioWidget::on_drag(int from_x, int from_y, int to_x, int to_y)
{
if (!is_inside(from_x, from_y)) return false;
for (auto& w : widgets)
if (w->on_drag(from_x, from_y, to_x, to_y)) return true;
return true;
bugui::container_widget::children.emplace_back(std::make_unique<IntervalWidget>(this, s));
}
int ScenarioWidget::x() const
@ -76,15 +41,15 @@ int ScenarioWidget::height() const
void ScenarioWidget::on_interval_added(Scenario::IntervalModel& interval)
{
widgets.emplace_back(std::make_unique<IntervalWidget>(this, interval));
bugui::container_widget::children.emplace_back(std::make_unique<IntervalWidget>(this, interval));
update();
}
void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval)
{
std::erase_if(widgets,
std::erase_if(bugui::container_widget::children,
[&interval]
(auto& w)
(const auto& w)
{
auto ntrvl = static_cast<IntervalWidget*>(w.get());
return ntrvl->get_model().id() == interval.id();

View file

@ -3,25 +3,20 @@
#include <wobjectdefs.h>
#include <Scenario/Process/ScenarioModel.hpp>
#include <base_widget.hpp>
#include <widgets/container_widget.hpp>
namespace Hardware
{
class ScenarioWidget final
: public bugui::base_widget
: public bugui::container_widget
, public QObject
{
W_OBJECT(ScenarioWidget)
public:
explicit ScenarioWidget(bugui::base_widget* parent,
explicit ScenarioWidget(bugui::container_widget* parent,
Scenario::ProcessModel* scenario);
void paint(bugui::painter& painter) const override;
bool on_press(int x, int y, bool pressed) override;
bool on_double_press(int x, int y) override;
bool on_drag(int from_x, int from_y, int to_x, int to_y) override;
int x() const override;
int y() const override;
int width() const override;
@ -32,7 +27,6 @@ private:
void on_interval_removed(const Scenario::IntervalModel& interval);
void on_interval_changed(const Scenario::IntervalModel&);
std::vector<std::unique_ptr<base_widget>> widgets;
Scenario::ProcessModel* model;
};