@@ -53,6 +53,8 public: | |||||
53 |
|
53 | |||
54 | QUrl imageTemporaryUrl(const QImage &image) const; |
|
54 | QUrl imageTemporaryUrl(const QImage &image) const; | |
55 |
|
55 | |||
|
56 | void setHightlightedDragWidget(VisualizationDragWidget *dragWidget); | |||
|
57 | ||||
56 | private: |
|
58 | private: | |
57 | class DragDropHelperPrivate; |
|
59 | class DragDropHelperPrivate; | |
58 | spimpl::unique_impl_ptr<DragDropHelperPrivate> impl; |
|
60 | spimpl::unique_impl_ptr<DragDropHelperPrivate> impl; |
@@ -13,6 +13,7 public: | |||||
13 |
|
13 | |||
14 | virtual QMimeData *mimeData() const = 0; |
|
14 | virtual QMimeData *mimeData() const = 0; | |
15 | virtual bool isDragAllowed() const = 0; |
|
15 | virtual bool isDragAllowed() const = 0; | |
|
16 | virtual void highlightForMerge(bool highlighted) { Q_UNUSED(highlighted); }; | |||
16 |
|
17 | |||
17 | protected: |
|
18 | protected: | |
18 | virtual void mousePressEvent(QMouseEvent *event) override; |
|
19 | virtual void mousePressEvent(QMouseEvent *event) override; |
@@ -59,6 +59,7 public: | |||||
59 | // VisualisationDragWidget |
|
59 | // VisualisationDragWidget | |
60 | QMimeData *mimeData() const override; |
|
60 | QMimeData *mimeData() const override; | |
61 | bool isDragAllowed() const override; |
|
61 | bool isDragAllowed() const override; | |
|
62 | void highlightForMerge(bool highlighted) override; | |||
62 |
|
63 | |||
63 | signals: |
|
64 | signals: | |
64 | void synchronize(const SqpRange &range, const SqpRange &oldRange); |
|
65 | void synchronize(const SqpRange &range, const SqpRange &oldRange); |
@@ -29,7 +29,6 struct DragDropScroller::DragDropScrollerPrivate { | |||||
29 | QScrollArea *m_CurrentScrollArea = nullptr; |
|
29 | QScrollArea *m_CurrentScrollArea = nullptr; | |
30 | std::unique_ptr<QTimer> m_Timer = nullptr; |
|
30 | std::unique_ptr<QTimer> m_Timer = nullptr; | |
31 |
|
31 | |||
32 |
|
||||
33 | enum class ScrollDirection { up, down, unknown }; |
|
32 | enum class ScrollDirection { up, down, unknown }; | |
34 | ScrollDirection m_Direction = ScrollDirection::unknown; |
|
33 | ScrollDirection m_Direction = ScrollDirection::unknown; | |
35 |
|
34 | |||
@@ -148,6 +147,8 struct DragDropHelper::DragDropHelperPrivate { | |||||
148 | QString m_ImageTempUrl; // Temporary file for image url generated by the drag & drop. Not using |
|
147 | QString m_ImageTempUrl; // Temporary file for image url generated by the drag & drop. Not using | |
149 | // QTemporaryFile to have a name which is not generated. |
|
148 | // QTemporaryFile to have a name which is not generated. | |
150 |
|
149 | |||
|
150 | VisualizationDragWidget *m_HighlightedDragWidget = nullptr; | |||
|
151 | ||||
151 | explicit DragDropHelperPrivate() |
|
152 | explicit DragDropHelperPrivate() | |
152 | : m_PlaceHolder{std::make_unique<QWidget>()}, |
|
153 | : m_PlaceHolder{std::make_unique<QWidget>()}, | |
153 | m_DragDropScroller{std::make_unique<DragDropScroller>()} |
|
154 | m_DragDropScroller{std::make_unique<DragDropScroller>()} | |
@@ -176,9 +177,7 struct DragDropHelper::DragDropHelperPrivate { | |||||
176 | }; |
|
177 | }; | |
177 |
|
178 | |||
178 |
|
179 | |||
179 | DragDropHelper::DragDropHelper() : impl{spimpl::make_unique_impl<DragDropHelperPrivate>()} |
|
180 | DragDropHelper::DragDropHelper() : impl{spimpl::make_unique_impl<DragDropHelperPrivate>()} {} | |
180 | { |
|
|||
181 | } |
|
|||
182 |
|
181 | |||
183 | DragDropHelper::~DragDropHelper() |
|
182 | DragDropHelper::~DragDropHelper() | |
184 | { |
|
183 | { | |
@@ -188,6 +187,7 DragDropHelper::~DragDropHelper() | |||||
188 | void DragDropHelper::resetDragAndDrop() |
|
187 | void DragDropHelper::resetDragAndDrop() | |
189 | { |
|
188 | { | |
190 | setCurrentDragWidget(nullptr); |
|
189 | setCurrentDragWidget(nullptr); | |
|
190 | impl->m_HighlightedDragWidget = nullptr; | |||
191 | } |
|
191 | } | |
192 |
|
192 | |||
193 | void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) |
|
193 | void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) | |
@@ -245,6 +245,18 QUrl DragDropHelper::imageTemporaryUrl(const QImage &image) const | |||||
245 | return QUrl::fromLocalFile(impl->m_ImageTempUrl); |
|
245 | return QUrl::fromLocalFile(impl->m_ImageTempUrl); | |
246 | } |
|
246 | } | |
247 |
|
247 | |||
|
248 | void DragDropHelper::setHightlightedDragWidget(VisualizationDragWidget *dragWidget) | |||
|
249 | { | |||
|
250 | if (impl->m_HighlightedDragWidget) { | |||
|
251 | impl->m_HighlightedDragWidget->highlightForMerge(false); | |||
|
252 | } | |||
|
253 | ||||
|
254 | if (dragWidget) { | |||
|
255 | impl->m_HighlightedDragWidget = dragWidget; | |||
|
256 | impl->m_HighlightedDragWidget->highlightForMerge(true); | |||
|
257 | } | |||
|
258 | } | |||
|
259 | ||||
248 | bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, |
|
260 | bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, | |
249 | VisualizationDragDropContainer *dropContainer) |
|
261 | VisualizationDragDropContainer *dropContainer) | |
250 | { |
|
262 | { |
@@ -294,12 +294,16 void VisualizationDragDropContainer::dragMoveEvent(QDragMoveEvent *event) | |||||
294 | if (dropIndex != placeHolderIndex) { |
|
294 | if (dropIndex != placeHolderIndex) { | |
295 | helper.insertPlaceHolder(impl->m_Layout, dropIndex); |
|
295 | helper.insertPlaceHolder(impl->m_Layout, dropIndex); | |
296 | } |
|
296 | } | |
|
297 | ||||
|
298 | helper.setHightlightedDragWidget(nullptr); | |||
297 | } |
|
299 | } | |
298 | else if (canMerge) { |
|
300 | else if (canMerge) { | |
299 | // drop on the middle -> merge |
|
301 | // drop on the middle -> merge | |
300 | if (impl->hasPlaceHolder()) { |
|
302 | if (impl->hasPlaceHolder()) { | |
301 | helper.removePlaceHolder(); |
|
303 | helper.removePlaceHolder(); | |
302 | } |
|
304 | } | |
|
305 | ||||
|
306 | helper.setHightlightedDragWidget(dragWidgetHovered); | |||
303 | } |
|
307 | } | |
304 | } |
|
308 | } | |
305 | else { |
|
309 | else { | |
@@ -344,6 +348,7 void VisualizationDragDropContainer::dropEvent(QDropEvent *event) | |||||
344 | event->acceptProposedAction(); |
|
348 | event->acceptProposedAction(); | |
345 |
|
349 | |||
346 | helper.removePlaceHolder(); |
|
350 | helper.removePlaceHolder(); | |
|
351 | helper.setHightlightedDragWidget(nullptr); | |||
347 |
|
352 | |||
348 | emit dropOccured(droppedIndex, event->mimeData()); |
|
353 | emit dropOccured(droppedIndex, event->mimeData()); | |
349 | } |
|
354 | } | |
@@ -351,7 +356,8 void VisualizationDragDropContainer::dropEvent(QDropEvent *event) | |||||
351 | qCWarning(LOG_VisualizationDragDropContainer()) |
|
356 | qCWarning(LOG_VisualizationDragDropContainer()) | |
352 | << tr("VisualizationDragDropContainer::dropEvent, couldn't drop because the " |
|
357 | << tr("VisualizationDragDropContainer::dropEvent, couldn't drop because the " | |
353 | "placeHolder is not found."); |
|
358 | "placeHolder is not found."); | |
354 | Q_ASSERT(false); |
|
359 | sqpApp->dragDropHelper().setHightlightedDragWidget(nullptr); | |
|
360 | // Q_ASSERT(false); | |||
355 | } |
|
361 | } | |
356 | } |
|
362 | } | |
357 | else { |
|
363 | else { |
@@ -73,9 +73,10 VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget | |||||
73 | &VisualizationGraphWidget::onMouseRelease); |
|
73 | &VisualizationGraphWidget::onMouseRelease); | |
74 | connect(ui->widget, &QCustomPlot::mouseMove, this, &VisualizationGraphWidget::onMouseMove); |
|
74 | connect(ui->widget, &QCustomPlot::mouseMove, this, &VisualizationGraphWidget::onMouseMove); | |
75 | connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); |
|
75 | connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); | |
76 | connect(ui->widget->xAxis, static_cast<void (QCPAxis::*)(const QCPRange &, const QCPRange &)>( |
|
76 | connect( | |
77 | &QCPAxis::rangeChanged), |
|
77 | ui->widget->xAxis, | |
78 | this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); |
|
78 | static_cast<void (QCPAxis::*)(const QCPRange &, const QCPRange &)>(&QCPAxis::rangeChanged), | |
|
79 | this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); | |||
79 |
|
80 | |||
80 | // Activates menu when right clicking on the graph |
|
81 | // Activates menu when right clicking on the graph | |
81 | ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); |
|
82 | ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); | |
@@ -243,6 +244,16 bool VisualizationGraphWidget::isDragAllowed() const | |||||
243 | return true; |
|
244 | return true; | |
244 | } |
|
245 | } | |
245 |
|
246 | |||
|
247 | void VisualizationGraphWidget::highlightForMerge(bool highlighted) | |||
|
248 | { | |||
|
249 | if (highlighted) { | |||
|
250 | plot().setBackground(QBrush(QColor("#BBD5EE"))); | |||
|
251 | } | |||
|
252 | else { | |||
|
253 | plot().setBackground(QBrush(Qt::white)); | |||
|
254 | } | |||
|
255 | } | |||
|
256 | ||||
246 | void VisualizationGraphWidget::closeEvent(QCloseEvent *event) |
|
257 | void VisualizationGraphWidget::closeEvent(QCloseEvent *event) | |
247 | { |
|
258 | { | |
248 | Q_UNUSED(event); |
|
259 | Q_UNUSED(event); | |
@@ -290,9 +301,9 void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept | |||||
290 |
|
301 | |||
291 | void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange &t2) |
|
302 | void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange &t2) | |
292 | { |
|
303 | { | |
293 |
qCDebug(LOG_VisualizationGraphWidget()) |
|
304 | qCDebug(LOG_VisualizationGraphWidget()) | |
294 | << QThread::currentThread()->objectName() << "DoAcqui" |
|
305 | << tr("TORM: VisualizationGraphWidget::onRangeChanged") | |
295 | << impl->m_DoAcquisition; |
|
306 | << QThread::currentThread()->objectName() << "DoAcqui" << impl->m_DoAcquisition; | |
296 |
|
307 | |||
297 | auto graphRange = SqpRange{t1.lower, t1.upper}; |
|
308 | auto graphRange = SqpRange{t1.lower, t1.upper}; | |
298 | auto oldGraphRange = SqpRange{t2.lower, t2.upper}; |
|
309 | auto oldGraphRange = SqpRange{t2.lower, t2.upper}; |
General Comments 0
You need to be logged in to leave comments.
Login now