##// END OF EJS Templates
Visual display when dropping on top of a existing graph
trabillard -
r857:8c8decf98df7
parent child
Show More
@@ -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()) << tr("TORM: VisualizationGraphWidget::onRangeChanged")
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