Auto status change to "Under Review"
@@ -51,6 +51,12 public: | |||||
51 | SqpRange graphRange() const noexcept; |
|
51 | SqpRange graphRange() const noexcept; | |
52 | void setGraphRange(const SqpRange &range); |
|
52 | void setGraphRange(const SqpRange &range); | |
53 |
|
53 | |||
|
54 | /// Returns the ranges of all the selection zones on the graph | |||
|
55 | QVector<SqpRange> selectionZoneRanges() const; | |||
|
56 | ||||
|
57 | /// Adds new selection zones in the graph | |||
|
58 | void addSelectionZones(const QVector<SqpRange> &ranges); | |||
|
59 | ||||
54 | /// Undo the last zoom done with a zoom box |
|
60 | /// Undo the last zoom done with a zoom box | |
55 | void undoZoom(); |
|
61 | void undoZoom(); | |
56 |
|
62 |
@@ -60,6 +60,9 public: | |||||
60 | VisualizationGraphWidget *createGraph(const QList<std::shared_ptr<Variable> > variables, |
|
60 | VisualizationGraphWidget *createGraph(const QList<std::shared_ptr<Variable> > variables, | |
61 | int index); |
|
61 | int index); | |
62 |
|
62 | |||
|
63 | /// Returns the first graph in the zone or nullptr if there is no graph inside | |||
|
64 | VisualizationGraphWidget *firstGraph() const; | |||
|
65 | ||||
63 | // IVisualizationWidget interface |
|
66 | // IVisualizationWidget interface | |
64 | void accept(IVisualizationWidgetVisitor *visitor) override; |
|
67 | void accept(IVisualizationWidgetVisitor *visitor) override; | |
65 | bool canDrop(const Variable &variable) const override; |
|
68 | bool canDrop(const Variable &variable) const override; |
@@ -19,7 +19,7 VisualizationDragWidget::VisualizationDragWidget(QWidget *parent) | |||||
19 | { |
|
19 | { | |
20 | } |
|
20 | } | |
21 |
|
21 | |||
22 |
|
|
22 | QPixmap VisualizationDragWidget::customDragPixmap(const QPoint &dragPosition) | |
23 | { |
|
23 | { | |
24 | Q_UNUSED(dragPosition); |
|
24 | Q_UNUSED(dragPosition); | |
25 | return QPixmap(); |
|
25 | return QPixmap(); |
@@ -335,6 +335,27 void VisualizationGraphWidget::setGraphRange(const SqpRange &range) | |||||
335 | qCDebug(LOG_VisualizationGraphWidget()) << tr("VisualizationGraphWidget::setGraphRange END"); |
|
335 | qCDebug(LOG_VisualizationGraphWidget()) << tr("VisualizationGraphWidget::setGraphRange END"); | |
336 | } |
|
336 | } | |
337 |
|
337 | |||
|
338 | QVector<SqpRange> VisualizationGraphWidget::selectionZoneRanges() const | |||
|
339 | { | |||
|
340 | QVector<SqpRange> ranges; | |||
|
341 | for (auto zone : impl->m_SelectionZones) { | |||
|
342 | ranges << zone->range(); | |||
|
343 | } | |||
|
344 | ||||
|
345 | return ranges; | |||
|
346 | } | |||
|
347 | ||||
|
348 | void VisualizationGraphWidget::addSelectionZones(const QVector<SqpRange> &ranges) | |||
|
349 | { | |||
|
350 | for (const auto &range : ranges) { | |||
|
351 | auto zone = new VisualizationSelectionZoneItem(&plot()); | |||
|
352 | zone->setRange(range.m_TStart, range.m_TEnd); | |||
|
353 | impl->m_SelectionZones << zone; | |||
|
354 | } | |||
|
355 | ||||
|
356 | plot().replot(QCustomPlot::rpQueuedReplot); | |||
|
357 | } | |||
|
358 | ||||
338 | void VisualizationGraphWidget::undoZoom() |
|
359 | void VisualizationGraphWidget::undoZoom() | |
339 | { |
|
360 | { | |
340 | auto zoom = impl->m_ZoomStack.pop(); |
|
361 | auto zoom = impl->m_ZoomStack.pop(); |
@@ -255,7 +255,16 void VisualizationTabWidget::VisualizationTabWidgetPrivate::dropGraph( | |||||
255 | helper.delayedCloseWidget(graphWidget); |
|
255 | helper.delayedCloseWidget(graphWidget); | |
256 | } |
|
256 | } | |
257 |
|
257 | |||
258 | tabWidget->createZone(variables, index); |
|
258 | auto zoneWidget = tabWidget->createZone(variables, index); | |
|
259 | auto firstGraph = zoneWidget->firstGraph(); | |||
|
260 | if (firstGraph) { | |||
|
261 | firstGraph->addSelectionZones(graphWidget->selectionZoneRanges()); | |||
|
262 | } | |||
|
263 | else { | |||
|
264 | qCWarning(LOG_VisualizationZoneWidget()) | |||
|
265 | << tr("VisualizationTabWidget::dropGraph, no graph added in the widget."); | |||
|
266 | Q_ASSERT(false); | |||
|
267 | } | |||
259 | } |
|
268 | } | |
260 | else { |
|
269 | else { | |
261 | // The graph is empty, create an empty zone and move the graph inside |
|
270 | // The graph is empty, create an empty zone and move the graph inside |
@@ -72,21 +72,6 struct VisualizationZoneWidget::VisualizationZoneWidgetPrivate { | |||||
72 | QUuid m_SynchronisationGroupId; |
|
72 | QUuid m_SynchronisationGroupId; | |
73 | std::unique_ptr<IGraphSynchronizer> m_Synchronizer; |
|
73 | std::unique_ptr<IGraphSynchronizer> m_Synchronizer; | |
74 |
|
74 | |||
75 | // Returns the first graph in the zone or nullptr if there is no graph inside |
|
|||
76 | VisualizationGraphWidget *firstGraph(const VisualizationZoneWidget *zoneWidget) const |
|
|||
77 | { |
|
|||
78 | VisualizationGraphWidget *firstGraph = nullptr; |
|
|||
79 | auto layout = zoneWidget->ui->dragDropContainer->layout(); |
|
|||
80 | if (layout->count() > 0) { |
|
|||
81 | if (auto visualizationGraphWidget |
|
|||
82 | = qobject_cast<VisualizationGraphWidget *>(layout->itemAt(0)->widget())) { |
|
|||
83 | firstGraph = visualizationGraphWidget; |
|
|||
84 | } |
|
|||
85 | } |
|
|||
86 |
|
||||
87 | return firstGraph; |
|
|||
88 | } |
|
|||
89 |
|
||||
90 | void dropGraph(int index, VisualizationZoneWidget *zoneWidget); |
|
75 | void dropGraph(int index, VisualizationZoneWidget *zoneWidget); | |
91 | void dropVariables(const QList<std::shared_ptr<Variable> > &variables, int index, |
|
76 | void dropVariables(const QList<std::shared_ptr<Variable> > &variables, int index, | |
92 | VisualizationZoneWidget *zoneWidget); |
|
77 | VisualizationZoneWidget *zoneWidget); | |
@@ -286,7 +271,7 VisualizationGraphWidget *VisualizationZoneWidget::createGraph(std::shared_ptr<V | |||||
286 | &VisualizationZoneWidget::onVariableAboutToBeRemoved); |
|
271 | &VisualizationZoneWidget::onVariableAboutToBeRemoved); | |
287 |
|
272 | |||
288 | auto range = SqpRange{}; |
|
273 | auto range = SqpRange{}; | |
289 |
if (auto firstGraph = |
|
274 | if (auto firstGraph = this->firstGraph()) { | |
290 | // Case of a new graph in a existant zone |
|
275 | // Case of a new graph in a existant zone | |
291 | range = firstGraph->graphRange(); |
|
276 | range = firstGraph->graphRange(); | |
292 | } |
|
277 | } | |
@@ -318,6 +303,20 VisualizationZoneWidget::createGraph(const QList<std::shared_ptr<Variable> > var | |||||
318 | return graphWidget; |
|
303 | return graphWidget; | |
319 | } |
|
304 | } | |
320 |
|
305 | |||
|
306 | VisualizationGraphWidget *VisualizationZoneWidget::firstGraph() const | |||
|
307 | { | |||
|
308 | VisualizationGraphWidget *firstGraph = nullptr; | |||
|
309 | auto layout = ui->dragDropContainer->layout(); | |||
|
310 | if (layout->count() > 0) { | |||
|
311 | if (auto visualizationGraphWidget | |||
|
312 | = qobject_cast<VisualizationGraphWidget *>(layout->itemAt(0)->widget())) { | |||
|
313 | firstGraph = visualizationGraphWidget; | |||
|
314 | } | |||
|
315 | } | |||
|
316 | ||||
|
317 | return firstGraph; | |||
|
318 | } | |||
|
319 | ||||
321 | void VisualizationZoneWidget::accept(IVisualizationWidgetVisitor *visitor) |
|
320 | void VisualizationZoneWidget::accept(IVisualizationWidgetVisitor *visitor) | |
322 | { |
|
321 | { | |
323 | if (visitor) { |
|
322 | if (visitor) { | |
@@ -361,7 +360,7 QMimeData *VisualizationZoneWidget::mimeData(const QPoint &position) const | |||||
361 | auto mimeData = new QMimeData; |
|
360 | auto mimeData = new QMimeData; | |
362 | mimeData->setData(MIME_TYPE_ZONE, QByteArray{}); |
|
361 | mimeData->setData(MIME_TYPE_ZONE, QByteArray{}); | |
363 |
|
362 | |||
364 |
if (auto firstGraph = |
|
363 | if (auto firstGraph = this->firstGraph()) { | |
365 | auto timeRangeData = TimeController::mimeDataForTimeRange(firstGraph->graphRange()); |
|
364 | auto timeRangeData = TimeController::mimeDataForTimeRange(firstGraph->graphRange()); | |
366 | mimeData->setData(MIME_TYPE_TIME_RANGE, timeRangeData); |
|
365 | mimeData->setData(MIME_TYPE_TIME_RANGE, timeRangeData); | |
367 | } |
|
366 | } | |
@@ -547,7 +546,8 void VisualizationZoneWidget::VisualizationZoneWidgetPrivate::dropGraph( | |||||
547 | } |
|
546 | } | |
548 |
|
547 | |||
549 | // Creates the new graph in the zone |
|
548 | // Creates the new graph in the zone | |
550 | zoneWidget->createGraph(variables, index); |
|
549 | auto newGraphWidget = zoneWidget->createGraph(variables, index); | |
|
550 | newGraphWidget->addSelectionZones(graphWidget->selectionZoneRanges()); | |||
551 | } |
|
551 | } | |
552 | else { |
|
552 | else { | |
553 | // The drop occurred in the same zone or the graph is empty |
|
553 | // The drop occurred in the same zone or the graph is empty |
General Comments 3
Status change > Approved
You need to be logged in to leave comments.
Login now