From 8f052e70b9523797dac5a6e99d12c397d35fd593 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 7 Mar 2020 15:37:21 +0100 Subject: [PATCH] Implemented refresh after change of points spinboxes --- stripsgrid.cpp | 13 ++++--------- stripwidget.cpp | 14 +++++++++++--- stripwidget.h | 11 +++++++---- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/stripsgrid.cpp b/stripsgrid.cpp index 376e200..524aacc 100644 --- a/stripsgrid.cpp +++ b/stripsgrid.cpp @@ -70,7 +70,6 @@ StripsGrid::StripsGrid(QWidget *parent) : Story story; story.widget = new StripWidget{StripWidget::Story}; story.widget->setTitle(QString("ATC-%0").arg(random.bounded(1000, 5000))); - story.widget->setOwner("RH"); for (int column = 0; column < 5; column++) { @@ -93,6 +92,7 @@ StripsGrid::StripsGrid(QWidget *parent) : widget->setTitle(QString("ATC-%0").arg(random.bounded(1000, 5000))); widget->setPoints(std::array{1,3,5,8,13}[random.bounded(5)]); widget->setOwner(std::array{"DB", "KW", "BK", "MS", "AS"}[random.bounded(5)]); + connect(widget, &StripWidget::pointsChanged, this, &StripsGrid::updatePoints); test.layout->addWidget(widget); test.widgets.push_back(widget); }); @@ -122,17 +122,12 @@ void StripsGrid::mousePressEvent(QMouseEvent *event) { for (auto *subtaskWidget : column.widgets) { - if (subtaskWidget->startDragging(event->pos() - subtaskWidget->pos())) + if (subtaskWidget->isInDragArea(event->pos() - subtaskWidget->pos())) { m_draggedWidget = subtaskWidget; m_draggedWidget->beginDrag(); - m_dragWidget = new StripWidget{StripWidget::DraggedSubtask, this}; - m_dragWidget->setTitle(m_draggedWidget->title()); - m_dragWidget->setDescription(m_draggedWidget->description()); - m_dragWidget->setPoints(m_draggedWidget->points()); - m_dragWidget->setOwner(m_draggedWidget->owner()); - m_dragWidget->setStyleSheet(m_draggedWidget->styleSheet()); + m_dragWidget = new StripWidget{StripWidget::DraggingSubtask, *m_draggedWidget, this}; m_dragWidget->move(m_draggedWidget->pos()); m_dragWidget->show(); @@ -157,7 +152,7 @@ void StripsGrid::mouseReleaseEvent(QMouseEvent *event) m_draggedWidget->endDrag(); m_draggedWidget = nullptr; - m_dragWidget->deleteLater(); + delete m_dragWidget; m_dragWidget = nullptr; } diff --git a/stripwidget.cpp b/stripwidget.cpp index c10d319..1cbf390 100644 --- a/stripwidget.cpp +++ b/stripwidget.cpp @@ -13,6 +13,8 @@ StripWidget::StripWidget(QWidget *parent) : setMinimumSize(size()); setMaximumSize(size()); setFixedSize(size()); + + connect(m_ui->points, &QSpinBox::valueChanged, this, &StripWidget::pointsChanged); } StripWidget::StripWidget(StripWidget::Story_t, QWidget *parent) : @@ -21,6 +23,9 @@ StripWidget::StripWidget(StripWidget::Story_t, QWidget *parent) : m_ui->points->setReadOnly(true); m_ui->points->setMaximum(9999); + delete m_ui->owner; + m_ui->owner = nullptr; + setStyleSheet("StripWidget { background-color: #AFA; }"); } @@ -30,15 +35,18 @@ StripWidget::StripWidget(StripWidget::Subtask_t, QWidget *parent) : setStyleSheet("StripWidget { background-color: #FCC; }"); } -StripWidget::StripWidget(StripWidget::DraggedSubtask_t, QWidget *parent) : +StripWidget::StripWidget(StripWidget::DraggingSubtask_t, const StripWidget &draggedSubtask, QWidget *parent) : StripWidget{Subtask, parent} { - setGraphicsEffect(new QGraphicsDropShadowEffect); + setTitle(draggedSubtask.title()); + setDescription(draggedSubtask.description()); + setPoints(draggedSubtask.points()); + setOwner(draggedSubtask.owner()); } StripWidget::~StripWidget() = default; -bool StripWidget::startDragging(const QPoint &pos) const +bool StripWidget::isInDragArea(const QPoint &pos) const { return m_ui->title->geometry().contains(pos); } diff --git a/stripwidget.h b/stripwidget.h index e8f94da..204458e 100644 --- a/stripwidget.h +++ b/stripwidget.h @@ -19,15 +19,15 @@ public: struct Subtask_t{}; static constexpr const Subtask_t Subtask{}; - struct DraggedSubtask_t{}; - static constexpr const DraggedSubtask_t DraggedSubtask{}; + struct DraggingSubtask_t{}; + static constexpr const DraggingSubtask_t DraggingSubtask{}; explicit StripWidget(Story_t, QWidget *parent = nullptr); explicit StripWidget(Subtask_t, QWidget *parent = nullptr); - explicit StripWidget(DraggedSubtask_t, QWidget *parent = nullptr); + explicit StripWidget(DraggingSubtask_t, const StripWidget &draggedSubtask, QWidget *parent = nullptr); ~StripWidget() override; - bool startDragging(const QPoint &pos) const; + bool isInDragArea(const QPoint &pos) const; QString title() const; void setTitle(const QString &title); @@ -44,6 +44,9 @@ public: void beginDrag(); void endDrag(); +signals: + void pointsChanged(int points); + private: std::unique_ptr m_ui; };