diff --git a/gui/include/DragDropHelper.h b/gui/include/DragDropHelper.h index 871b84d..17103c4 100644 --- a/gui/include/DragDropHelper.h +++ b/gui/include/DragDropHelper.h @@ -53,6 +53,8 @@ public: QUrl imageTemporaryUrl(const QImage &image) const; + void setHightlightedDragWidget(VisualizationDragWidget *dragWidget); + private: class DragDropHelperPrivate; spimpl::unique_impl_ptr impl; diff --git a/gui/include/Visualization/VisualizationDragWidget.h b/gui/include/Visualization/VisualizationDragWidget.h index 3552cef..15924d3 100644 --- a/gui/include/Visualization/VisualizationDragWidget.h +++ b/gui/include/Visualization/VisualizationDragWidget.h @@ -13,6 +13,7 @@ public: virtual QMimeData *mimeData() const = 0; virtual bool isDragAllowed() const = 0; + virtual void highlightForMerge(bool highlighted) { Q_UNUSED(highlighted); }; protected: virtual void mousePressEvent(QMouseEvent *event) override; diff --git a/gui/include/Visualization/VisualizationGraphWidget.h b/gui/include/Visualization/VisualizationGraphWidget.h index b0e85c7..a012cb7 100644 --- a/gui/include/Visualization/VisualizationGraphWidget.h +++ b/gui/include/Visualization/VisualizationGraphWidget.h @@ -59,6 +59,7 @@ public: // VisualisationDragWidget QMimeData *mimeData() const override; bool isDragAllowed() const override; + void highlightForMerge(bool highlighted) override; signals: void synchronize(const SqpRange &range, const SqpRange &oldRange); diff --git a/gui/src/DragDropHelper.cpp b/gui/src/DragDropHelper.cpp index 7e91e83..42f83bf 100644 --- a/gui/src/DragDropHelper.cpp +++ b/gui/src/DragDropHelper.cpp @@ -29,7 +29,6 @@ struct DragDropScroller::DragDropScrollerPrivate { QScrollArea *m_CurrentScrollArea = nullptr; std::unique_ptr m_Timer = nullptr; - enum class ScrollDirection { up, down, unknown }; ScrollDirection m_Direction = ScrollDirection::unknown; @@ -148,6 +147,8 @@ struct DragDropHelper::DragDropHelperPrivate { QString m_ImageTempUrl; // Temporary file for image url generated by the drag & drop. Not using // QTemporaryFile to have a name which is not generated. + VisualizationDragWidget *m_HighlightedDragWidget = nullptr; + explicit DragDropHelperPrivate() : m_PlaceHolder{std::make_unique()}, m_DragDropScroller{std::make_unique()} @@ -176,9 +177,7 @@ struct DragDropHelper::DragDropHelperPrivate { }; -DragDropHelper::DragDropHelper() : impl{spimpl::make_unique_impl()} -{ -} +DragDropHelper::DragDropHelper() : impl{spimpl::make_unique_impl()} {} DragDropHelper::~DragDropHelper() { @@ -188,6 +187,7 @@ DragDropHelper::~DragDropHelper() void DragDropHelper::resetDragAndDrop() { setCurrentDragWidget(nullptr); + impl->m_HighlightedDragWidget = nullptr; } void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) @@ -245,6 +245,18 @@ QUrl DragDropHelper::imageTemporaryUrl(const QImage &image) const return QUrl::fromLocalFile(impl->m_ImageTempUrl); } +void DragDropHelper::setHightlightedDragWidget(VisualizationDragWidget *dragWidget) +{ + if (impl->m_HighlightedDragWidget) { + impl->m_HighlightedDragWidget->highlightForMerge(false); + } + + if (dragWidget) { + impl->m_HighlightedDragWidget = dragWidget; + impl->m_HighlightedDragWidget->highlightForMerge(true); + } +} + bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, VisualizationDragDropContainer *dropContainer) { diff --git a/gui/src/Visualization/VisualizationDragDropContainer.cpp b/gui/src/Visualization/VisualizationDragDropContainer.cpp index e957a28..4fd4ab6 100644 --- a/gui/src/Visualization/VisualizationDragDropContainer.cpp +++ b/gui/src/Visualization/VisualizationDragDropContainer.cpp @@ -294,12 +294,16 @@ void VisualizationDragDropContainer::dragMoveEvent(QDragMoveEvent *event) if (dropIndex != placeHolderIndex) { helper.insertPlaceHolder(impl->m_Layout, dropIndex); } + + helper.setHightlightedDragWidget(nullptr); } else if (canMerge) { // drop on the middle -> merge if (impl->hasPlaceHolder()) { helper.removePlaceHolder(); } + + helper.setHightlightedDragWidget(dragWidgetHovered); } } else { @@ -344,6 +348,7 @@ void VisualizationDragDropContainer::dropEvent(QDropEvent *event) event->acceptProposedAction(); helper.removePlaceHolder(); + helper.setHightlightedDragWidget(nullptr); emit dropOccured(droppedIndex, event->mimeData()); } @@ -351,7 +356,8 @@ void VisualizationDragDropContainer::dropEvent(QDropEvent *event) qCWarning(LOG_VisualizationDragDropContainer()) << tr("VisualizationDragDropContainer::dropEvent, couldn't drop because the " "placeHolder is not found."); - Q_ASSERT(false); + sqpApp->dragDropHelper().setHightlightedDragWidget(nullptr); + // Q_ASSERT(false); } } else { diff --git a/gui/src/Visualization/VisualizationGraphWidget.cpp b/gui/src/Visualization/VisualizationGraphWidget.cpp index 5956f76..676a076 100644 --- a/gui/src/Visualization/VisualizationGraphWidget.cpp +++ b/gui/src/Visualization/VisualizationGraphWidget.cpp @@ -73,9 +73,10 @@ VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget &VisualizationGraphWidget::onMouseRelease); connect(ui->widget, &QCustomPlot::mouseMove, this, &VisualizationGraphWidget::onMouseMove); connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); - connect(ui->widget->xAxis, static_cast( - &QCPAxis::rangeChanged), - this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); + connect( + ui->widget->xAxis, + static_cast(&QCPAxis::rangeChanged), + this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); // Activates menu when right clicking on the graph ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); @@ -243,6 +244,16 @@ bool VisualizationGraphWidget::isDragAllowed() const return true; } +void VisualizationGraphWidget::highlightForMerge(bool highlighted) +{ + if (highlighted) { + plot().setBackground(QBrush(QColor("#BBD5EE"))); + } + else { + plot().setBackground(QBrush(Qt::white)); + } +} + void VisualizationGraphWidget::closeEvent(QCloseEvent *event) { Q_UNUSED(event); @@ -290,9 +301,9 @@ void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange &t2) { - qCDebug(LOG_VisualizationGraphWidget()) << tr("TORM: VisualizationGraphWidget::onRangeChanged") - << QThread::currentThread()->objectName() << "DoAcqui" - << impl->m_DoAcquisition; + qCDebug(LOG_VisualizationGraphWidget()) + << tr("TORM: VisualizationGraphWidget::onRangeChanged") + << QThread::currentThread()->objectName() << "DoAcqui" << impl->m_DoAcquisition; auto graphRange = SqpRange{t1.lower, t1.upper}; auto oldGraphRange = SqpRange{t2.lower, t2.upper};