@@ -0,0 +1,26 | |||
|
1 | #ifndef SCIQLOP_VISUALIZATIONSELECTIONZONEMANAGER_H | |
|
2 | #define SCIQLOP_VISUALIZATIONSELECTIONZONEMANAGER_H | |
|
3 | ||
|
4 | #include <Common/spimpl.h> | |
|
5 | ||
|
6 | #include <QVector> | |
|
7 | ||
|
8 | class VisualizationSelectionZoneItem; | |
|
9 | ||
|
10 | class VisualizationSelectionZoneManager { | |
|
11 | public: | |
|
12 | VisualizationSelectionZoneManager(); | |
|
13 | ||
|
14 | void select(const QVector<VisualizationSelectionZoneItem *> &items); | |
|
15 | void setSelected(VisualizationSelectionZoneItem *item, bool value); | |
|
16 | ||
|
17 | void clearSelection(); | |
|
18 | ||
|
19 | QVector<VisualizationSelectionZoneItem *> selectedItems() const; | |
|
20 | ||
|
21 | private: | |
|
22 | class VisualizationSelectionZoneManagerPrivate; | |
|
23 | spimpl::unique_impl_ptr<VisualizationSelectionZoneManagerPrivate> impl; | |
|
24 | }; | |
|
25 | ||
|
26 | #endif // SCIQLOP_VISUALIZATIONSELECTIONZONEMANAGER_H |
@@ -0,0 +1,51 | |||
|
1 | #include "Visualization/VisualizationSelectionZoneManager.h" | |
|
2 | #include "Visualization/VisualizationSelectionZoneItem.h" | |
|
3 | ||
|
4 | struct VisualizationSelectionZoneManager::VisualizationSelectionZoneManagerPrivate { | |
|
5 | QVector<VisualizationSelectionZoneItem *> m_SelectedItems; | |
|
6 | }; | |
|
7 | ||
|
8 | VisualizationSelectionZoneManager::VisualizationSelectionZoneManager() | |
|
9 | : impl{spimpl::make_unique_impl<VisualizationSelectionZoneManagerPrivate>()} | |
|
10 | { | |
|
11 | } | |
|
12 | ||
|
13 | void VisualizationSelectionZoneManager::select( | |
|
14 | const QVector<VisualizationSelectionZoneItem *> &items) | |
|
15 | { | |
|
16 | clearSelection(); | |
|
17 | for (auto item : items) { | |
|
18 | setSelected(item, true); | |
|
19 | } | |
|
20 | } | |
|
21 | ||
|
22 | void VisualizationSelectionZoneManager::setSelected(VisualizationSelectionZoneItem *item, | |
|
23 | bool value) | |
|
24 | { | |
|
25 | if (value != item->selected()) { | |
|
26 | item->setSelected(value); | |
|
27 | item->parentPlot()->replot(); | |
|
28 | } | |
|
29 | ||
|
30 | if (!value && impl->m_SelectedItems.contains(item)) { | |
|
31 | impl->m_SelectedItems.removeAll(item); | |
|
32 | } | |
|
33 | else if (value) { | |
|
34 | impl->m_SelectedItems << item; | |
|
35 | } | |
|
36 | } | |
|
37 | ||
|
38 | void VisualizationSelectionZoneManager::clearSelection() | |
|
39 | { | |
|
40 | for (auto item : impl->m_SelectedItems) { | |
|
41 | item->setSelected(false); | |
|
42 | item->parentPlot()->replot(); | |
|
43 | } | |
|
44 | ||
|
45 | impl->m_SelectedItems.clear(); | |
|
46 | } | |
|
47 | ||
|
48 | QVector<VisualizationSelectionZoneItem *> VisualizationSelectionZoneManager::selectedItems() const | |
|
49 | { | |
|
50 | return impl->m_SelectedItems; | |
|
51 | } |
@@ -17,6 +17,7 class QCPRange; | |||
|
17 | 17 | class QCustomPlot; |
|
18 | 18 | class SqpRange; |
|
19 | 19 | class Variable; |
|
20 | class VisualizationWidget; | |
|
20 | 21 | class VisualizationZoneWidget; |
|
21 | 22 | |
|
22 | 23 | namespace Ui { |
@@ -33,8 +34,12 public: | |||
|
33 | 34 | explicit VisualizationGraphWidget(const QString &name = {}, QWidget *parent = 0); |
|
34 | 35 | virtual ~VisualizationGraphWidget(); |
|
35 | 36 | |
|
37 | /// Returns the VisualizationZoneWidget which contains the graph or nullptr | |
|
36 | 38 | VisualizationZoneWidget *parentZoneWidget() const noexcept; |
|
37 | 39 | |
|
40 | /// Returns the main VisualizationWidget which contains the graph or nullptr | |
|
41 | VisualizationWidget *parentVisualizationWidget() const; | |
|
42 | ||
|
38 | 43 | /// If acquisition isn't enable, requestDataLoading signal cannot be emit |
|
39 | 44 | void enableAcquisition(bool enable); |
|
40 | 45 |
@@ -6,6 +6,7 | |||
|
6 | 6 | #include <Visualization/qcustomplot.h> |
|
7 | 7 | |
|
8 | 8 | class VisualizationSelectionZoneItem : public QCPItemRect { |
|
9 | ||
|
9 | 10 | public: |
|
10 | 11 | VisualizationSelectionZoneItem(QCustomPlot *plot); |
|
11 | 12 | virtual ~VisualizationSelectionZoneItem(); |
@@ -7,11 +7,14 | |||
|
7 | 7 | #include <QLoggingCategory> |
|
8 | 8 | #include <QWidget> |
|
9 | 9 | |
|
10 | #include <Common/spimpl.h> | |
|
11 | ||
|
10 | 12 | Q_DECLARE_LOGGING_CATEGORY(LOG_VisualizationWidget) |
|
11 | 13 | |
|
12 | 14 | class QMenu; |
|
13 | 15 | class Variable; |
|
14 | 16 | class VisualizationTabWidget; |
|
17 | class VisualizationSelectionZoneManager; | |
|
15 | 18 | |
|
16 | 19 | namespace Ui { |
|
17 | 20 | class VisualizationWidget; |
@@ -24,6 +27,9 public: | |||
|
24 | 27 | explicit VisualizationWidget(QWidget *parent = 0); |
|
25 | 28 | virtual ~VisualizationWidget(); |
|
26 | 29 | |
|
30 | /// Returns the class which manage the selection of selection zone across the visualization | |
|
31 | VisualizationSelectionZoneManager &selectionZoneManager() const; | |
|
32 | ||
|
27 | 33 | // IVisualizationWidget interface |
|
28 | 34 | void accept(IVisualizationWidgetVisitor *visitor) override; |
|
29 | 35 | bool canDrop(const Variable &variable) const override; |
@@ -49,6 +55,9 protected: | |||
|
49 | 55 | |
|
50 | 56 | private: |
|
51 | 57 | Ui::VisualizationWidget *ui; |
|
58 | ||
|
59 | class VisualizationWidgetPrivate; | |
|
60 | spimpl::unique_impl_ptr<VisualizationWidgetPrivate> impl; | |
|
52 | 61 | }; |
|
53 | 62 | |
|
54 | 63 | #endif // VISUALIZATIONWIDGET_H |
@@ -83,7 +83,8 gui_sources = [ | |||
|
83 | 83 | 'src/Visualization/ColorScaleEditor.cpp', |
|
84 | 84 | 'src/Visualization/SqpColorScale.cpp', |
|
85 | 85 | 'src/Visualization/QCPColorMapIterator.cpp', |
|
86 | 'src/Visualization/VisualizationSelectionZoneItem.cpp' | |
|
86 | 'src/Visualization/VisualizationSelectionZoneItem.cpp', | |
|
87 | 'src/Visualization/VisualizationSelectionZoneManager.cpp' | |
|
87 | 88 | ] |
|
88 | 89 | |
|
89 | 90 | gui_inc = include_directories(['include']) |
@@ -5,6 +5,8 | |||
|
5 | 5 | #include "Visualization/VisualizationGraphHelper.h" |
|
6 | 6 | #include "Visualization/VisualizationGraphRenderingDelegate.h" |
|
7 | 7 | #include "Visualization/VisualizationSelectionZoneItem.h" |
|
8 | #include "Visualization/VisualizationSelectionZoneManager.h" | |
|
9 | #include "Visualization/VisualizationWidget.h" | |
|
8 | 10 | #include "Visualization/VisualizationZoneWidget.h" |
|
9 | 11 | #include "ui_VisualizationGraphWidget.h" |
|
10 | 12 | |
@@ -40,6 +42,9 const auto PAN_SPEED = 5; | |||
|
40 | 42 | /// Key pressed to enable a calibration pan |
|
41 | 43 | const auto VERTICAL_PAN_MODIFIER = Qt::AltModifier; |
|
42 | 44 | |
|
45 | /// Key pressed to enable multi selection of selection zones | |
|
46 | const auto MULTI_ZONE_SELECTION_MODIFIER = Qt::ControlModifier; | |
|
47 | ||
|
43 | 48 | /// Minimum size for the zoom box, in percentage of the axis range |
|
44 | 49 | const auto ZOOM_BOX_MIN_SIZE = 0.8; |
|
45 | 50 | |
@@ -109,30 +114,30 struct VisualizationGraphWidget::VisualizationGraphWidgetPrivate { | |||
|
109 | 114 | } |
|
110 | 115 | } |
|
111 | 116 | |
|
112 |
void startDrawingZone(const QPoint &pos, |
|
|
117 | void startDrawingZone(const QPoint &pos, VisualizationGraphWidget *graph) | |
|
113 | 118 | { |
|
114 |
endDrawingZone( |
|
|
119 | endDrawingZone(graph); | |
|
115 | 120 | |
|
116 | auto axisPos = posToAxisPos(pos, plot); | |
|
121 | auto axisPos = posToAxisPos(pos, graph->plot()); | |
|
117 | 122 | |
|
118 | m_DrawingZone = new VisualizationSelectionZoneItem{&plot}; | |
|
123 | m_DrawingZone = new VisualizationSelectionZoneItem{&graph->plot()}; | |
|
119 | 124 | m_DrawingZone->setRange(axisPos.x(), axisPos.x()); |
|
120 | 125 | m_DrawingZone->setEditionEnabled(false); |
|
121 | 126 | } |
|
122 | 127 | |
|
123 |
void endDrawingZone( |
|
|
128 | void endDrawingZone(VisualizationGraphWidget *graph) | |
|
124 | 129 | { |
|
125 | 130 | if (m_DrawingZone) { |
|
126 | 131 | auto drawingZoneRange = m_DrawingZone->range(); |
|
127 | 132 | if (qAbs(drawingZoneRange.m_TEnd - drawingZoneRange.m_TStart) > 0) { |
|
128 | 133 | m_DrawingZone->setEditionEnabled(true); |
|
129 |
|
|
|
134 | addSelectionZone(m_DrawingZone); | |
|
130 | 135 | } |
|
131 | 136 | else { |
|
132 | plot.removeItem(m_DrawingZone); // the item is deleted by QCustomPlot | |
|
137 | graph->plot().removeItem(m_DrawingZone); // the item is deleted by QCustomPlot | |
|
133 | 138 | } |
|
134 | 139 | |
|
135 | plot.replot(QCustomPlot::rpQueuedReplot); | |
|
140 | graph->plot().replot(QCustomPlot::rpQueuedReplot); | |
|
136 | 141 | m_DrawingZone = nullptr; |
|
137 | 142 | } |
|
138 | 143 | } |
@@ -144,6 +149,8 struct VisualizationGraphWidget::VisualizationGraphWidgetPrivate { | |||
|
144 | 149 | } |
|
145 | 150 | } |
|
146 | 151 | |
|
152 | void addSelectionZone(VisualizationSelectionZoneItem *zone) { m_SelectionZones << zone; } | |
|
153 | ||
|
147 | 154 | VisualizationSelectionZoneItem *selectionZoneAt(const QPoint &pos, |
|
148 | 155 | const QCustomPlot &plot) const |
|
149 | 156 | { |
@@ -188,7 +195,7 VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget | |||
|
188 | 195 | // Set qcpplot properties : |
|
189 | 196 | // - zoom is enabled |
|
190 | 197 | // - Mouse wheel on qcpplot is intercepted to determine the zoom orientation |
|
191 |
ui->widget->setInteractions(QCP::iRangeZoom |
|
|
198 | ui->widget->setInteractions(QCP::iRangeZoom); | |
|
192 | 199 | ui->widget->axisRect()->setRangeDrag(Qt::Horizontal | Qt::Vertical); |
|
193 | 200 | |
|
194 | 201 | // The delegate must be initialized after the ui as it uses the plot |
@@ -207,9 +214,10 VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget | |||
|
207 | 214 | connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel); |
|
208 | 215 | connect(ui->widget, &QCustomPlot::mouseDoubleClick, this, |
|
209 | 216 | &VisualizationGraphWidget::onMouseDoubleClick); |
|
210 | connect(ui->widget->xAxis, static_cast<void (QCPAxis::*)(const QCPRange &, const QCPRange &)>( | |
|
211 | &QCPAxis::rangeChanged), | |
|
212 | this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); | |
|
217 | connect( | |
|
218 | ui->widget->xAxis, | |
|
219 | static_cast<void (QCPAxis::*)(const QCPRange &, const QCPRange &)>(&QCPAxis::rangeChanged), | |
|
220 | this, &VisualizationGraphWidget::onRangeChanged, Qt::DirectConnection); | |
|
213 | 221 | |
|
214 | 222 | // Activates menu when right clicking on the graph |
|
215 | 223 | ui->widget->setContextMenuPolicy(Qt::CustomContextMenu); |
@@ -243,6 +251,16 VisualizationZoneWidget *VisualizationGraphWidget::parentZoneWidget() const noex | |||
|
243 | 251 | return qobject_cast<VisualizationZoneWidget *>(parent); |
|
244 | 252 | } |
|
245 | 253 | |
|
254 | VisualizationWidget *VisualizationGraphWidget::parentVisualizationWidget() const | |
|
255 | { | |
|
256 | auto parent = parentWidget(); | |
|
257 | while (parent != nullptr && !qobject_cast<VisualizationWidget *>(parent)) { | |
|
258 | parent = parent->parentWidget(); | |
|
259 | } | |
|
260 | ||
|
261 | return qobject_cast<VisualizationWidget *>(parent); | |
|
262 | } | |
|
263 | ||
|
246 | 264 | void VisualizationGraphWidget::enableAcquisition(bool enable) |
|
247 | 265 | { |
|
248 | 266 | impl->m_DoAcquisition = enable; |
@@ -348,9 +366,10 QVector<SqpRange> VisualizationGraphWidget::selectionZoneRanges() const | |||
|
348 | 366 | void VisualizationGraphWidget::addSelectionZones(const QVector<SqpRange> &ranges) |
|
349 | 367 | { |
|
350 | 368 | for (const auto &range : ranges) { |
|
369 | // note: ownership is transfered to QCustomPlot | |
|
351 | 370 | auto zone = new VisualizationSelectionZoneItem(&plot()); |
|
352 | 371 | zone->setRange(range.m_TStart, range.m_TEnd); |
|
353 |
impl-> |
|
|
372 | impl->addSelectionZone(zone); | |
|
354 | 373 | } |
|
355 | 374 | |
|
356 | 375 | plot().replot(QCustomPlot::rpQueuedReplot); |
@@ -588,9 +607,9 void VisualizationGraphWidget::onGraphMenuRequested(const QPoint &pos) noexcept | |||
|
588 | 607 | |
|
589 | 608 | void VisualizationGraphWidget::onRangeChanged(const QCPRange &t1, const QCPRange &t2) |
|
590 | 609 | { |
|
591 |
qCDebug(LOG_VisualizationGraphWidget()) |
|
|
592 | << QThread::currentThread()->objectName() << "DoAcqui" | |
|
593 | << impl->m_DoAcquisition; | |
|
610 | qCDebug(LOG_VisualizationGraphWidget()) | |
|
611 | << tr("TORM: VisualizationGraphWidget::onRangeChanged") | |
|
612 | << QThread::currentThread()->objectName() << "DoAcqui" << impl->m_DoAcquisition; | |
|
594 | 613 | |
|
595 | 614 | auto graphRange = SqpRange{t1.lower, t1.upper}; |
|
596 | 615 | auto oldGraphRange = SqpRange{t2.lower, t2.upper}; |
@@ -728,19 +747,19 void VisualizationGraphWidget::onMouseWheel(QWheelEvent *event) noexcept | |||
|
728 | 747 | void VisualizationGraphWidget::onMousePress(QMouseEvent *event) noexcept |
|
729 | 748 | { |
|
730 | 749 | bool isDragDropClick = event->modifiers().testFlag(DRAG_DROP_MODIFIER); |
|
750 | auto isSelectionZoneMode | |
|
751 | = sqpApp->plotsInteractionMode() == SqpApplication::PlotsInteractionMode::SelectionZones; | |
|
731 | 752 | |
|
732 | 753 | if (!isDragDropClick) { |
|
733 | 754 | if (sqpApp->plotsInteractionMode() == SqpApplication::PlotsInteractionMode::ZoomBox) { |
|
734 | 755 | // Starts a zoom box |
|
735 | 756 | impl->startDrawingRect(event->pos(), plot()); |
|
736 | 757 | } |
|
737 | else if (sqpApp->plotsInteractionMode() | |
|
738 | == SqpApplication::PlotsInteractionMode::SelectionZones | |
|
739 | && impl->m_DrawingZone == nullptr) { | |
|
758 | else if (isSelectionZoneMode && impl->m_DrawingZone == nullptr) { | |
|
740 | 759 | // Starts a new selection zone |
|
741 | 760 | auto zoneAtPos = impl->selectionZoneAt(event->pos(), plot()); |
|
742 | 761 | if (!zoneAtPos) { |
|
743 |
impl->startDrawingZone(event->pos(), |
|
|
762 | impl->startDrawingZone(event->pos(), this); | |
|
744 | 763 | } |
|
745 | 764 | } |
|
746 | 765 | } |
@@ -753,10 +772,31 void VisualizationGraphWidget::onMousePress(QMouseEvent *event) noexcept | |||
|
753 | 772 | == SqpApplication::PlotsInteractionMode::None |
|
754 | 773 | && !isDragDropClick); |
|
755 | 774 | |
|
756 |
// Allows zone edition only in selection zone mode without |
|
|
757 | impl->setSelectionZonesEditionEnabled( | |
|
758 | sqpApp->plotsInteractionMode() == SqpApplication::PlotsInteractionMode::SelectionZones | |
|
759 | && !isDragDropClick); | |
|
775 | // Allows zone edition only in selection zone mode without drag&drop | |
|
776 | impl->setSelectionZonesEditionEnabled(isSelectionZoneMode && !isDragDropClick); | |
|
777 | ||
|
778 | // Selection | |
|
779 | if (isSelectionZoneMode) { | |
|
780 | auto isMultiSelectionClick = event->modifiers().testFlag(MULTI_ZONE_SELECTION_MODIFIER); | |
|
781 | auto selectionZoneItemUnderCursor = impl->selectionZoneAt(event->pos(), plot()); | |
|
782 | if (selectionZoneItemUnderCursor && event->button() == Qt::LeftButton) { | |
|
783 | if (!isMultiSelectionClick) { | |
|
784 | parentVisualizationWidget()->selectionZoneManager().select( | |
|
785 | {selectionZoneItemUnderCursor}); | |
|
786 | } | |
|
787 | else { | |
|
788 | parentVisualizationWidget()->selectionZoneManager().setSelected( | |
|
789 | selectionZoneItemUnderCursor, !selectionZoneItemUnderCursor->selected() | |
|
790 | || event->button() == Qt::RightButton); | |
|
791 | } | |
|
792 | } | |
|
793 | else if (!isMultiSelectionClick && event->button() == Qt::LeftButton) { | |
|
794 | parentVisualizationWidget()->selectionZoneManager().clearSelection(); | |
|
795 | } | |
|
796 | else { | |
|
797 | // No selection change | |
|
798 | } | |
|
799 | } | |
|
760 | 800 | |
|
761 | 801 | VisualizationDragWidget::mousePressEvent(event); |
|
762 | 802 | } |
@@ -786,7 +826,7 void VisualizationGraphWidget::onMouseRelease(QMouseEvent *event) noexcept | |||
|
786 | 826 | } |
|
787 | 827 | } |
|
788 | 828 | |
|
789 |
impl->endDrawingZone( |
|
|
829 | impl->endDrawingZone(this); | |
|
790 | 830 | |
|
791 | 831 | impl->m_IsCalibration = false; |
|
792 | 832 | } |
@@ -1,5 +1,7 | |||
|
1 | 1 | #include "Visualization/VisualizationSelectionZoneItem.h" |
|
2 | 2 | |
|
3 | const QString &DEFAULT_COLOR = QStringLiteral("#E79D41"); | |
|
4 | ||
|
3 | 5 | struct VisualizationSelectionZoneItem::VisualizationSelectionZoneItemPrivate { |
|
4 | 6 | |
|
5 | 7 | QCustomPlot *m_Plot; |
@@ -54,6 +56,7 VisualizationSelectionZoneItem::VisualizationSelectionZoneItem(QCustomPlot *plot | |||
|
54 | 56 | topLeft->setTypeY(QCPItemPosition::ptAxisRectRatio); |
|
55 | 57 | bottomRight->setTypeX(QCPItemPosition::ptPlotCoords); |
|
56 | 58 | bottomRight->setTypeY(QCPItemPosition::ptAxisRectRatio); |
|
59 | setSelectable(false); | |
|
57 | 60 | |
|
58 | 61 | impl->m_RightLine = new QCPItemStraightLine(plot); |
|
59 | 62 | impl->m_RightLine->point1->setParentAnchor(topRight); |
@@ -62,6 +65,7 VisualizationSelectionZoneItem::VisualizationSelectionZoneItem(QCustomPlot *plot | |||
|
62 | 65 | impl->m_RightLine->point1->setTypeY(QCPItemPosition::ptAbsolute); |
|
63 | 66 | impl->m_RightLine->point2->setTypeX(QCPItemPosition::ptAbsolute); |
|
64 | 67 | impl->m_RightLine->point2->setTypeY(QCPItemPosition::ptAbsolute); |
|
68 | impl->m_RightLine->setSelectable(false); | |
|
65 | 69 | |
|
66 | 70 | impl->m_LeftLine = new QCPItemStraightLine(plot); |
|
67 | 71 | impl->m_LeftLine->point1->setParentAnchor(topLeft); |
@@ -70,16 +74,9 VisualizationSelectionZoneItem::VisualizationSelectionZoneItem(QCustomPlot *plot | |||
|
70 | 74 | impl->m_LeftLine->point1->setTypeY(QCPItemPosition::ptAbsolute); |
|
71 | 75 | impl->m_LeftLine->point2->setTypeX(QCPItemPosition::ptAbsolute); |
|
72 | 76 | impl->m_LeftLine->point2->setTypeY(QCPItemPosition::ptAbsolute); |
|
73 | ||
|
74 | impl->m_RightLine->setSelectable(false); | |
|
75 | 77 | impl->m_LeftLine->setSelectable(false); |
|
76 | 78 | |
|
77 | // connect(this, &VisualizationSelectionZoneItem::selectionChanged, impl->m_RightLine, | |
|
78 | // &QCPItemStraightLine::setSelected); | |
|
79 | // connect(this, &VisualizationSelectionZoneItem::selectionChanged, impl->m_LeftLine, | |
|
80 | // &QCPItemStraightLine::setSelected); | |
|
81 | ||
|
82 | setColor(QColor("#E79D41")); | |
|
79 | setColor(QColor(DEFAULT_COLOR)); | |
|
83 | 80 | } |
|
84 | 81 | |
|
85 | 82 | VisualizationSelectionZoneItem::~VisualizationSelectionZoneItem() |
@@ -225,13 +222,14 void VisualizationSelectionZoneItem::setHovered(bool value) | |||
|
225 | 222 | |
|
226 | 223 | void VisualizationSelectionZoneItem::mousePressEvent(QMouseEvent *event, const QVariant &details) |
|
227 | 224 | { |
|
228 | if (isEditionEnabled()) { | |
|
225 | if (isEditionEnabled() && event->button() == Qt::LeftButton) { | |
|
229 | 226 | impl->m_CurrentEditionMode = impl->getEditionMode(event->pos(), this); |
|
230 | 227 | |
|
231 | 228 | impl->m_MovedOrinalT1 = impl->m_T1; |
|
232 | 229 | impl->m_MovedOrinalT2 = impl->m_T2; |
|
233 | 230 | } |
|
234 | 231 | else { |
|
232 | impl->m_CurrentEditionMode = VisualizationSelectionZoneItemPrivate::EditionMode::NoEdition; | |
|
235 | 233 | event->ignore(); |
|
236 | 234 | } |
|
237 | 235 | } |
@@ -252,8 +250,8 void VisualizationSelectionZoneItem::mouseMoveEvent(QMouseEvent *event, const QP | |||
|
252 | 250 | case VisualizationSelectionZoneItemPrivate::EditionMode::ResizeRight: |
|
253 | 251 | setEnd(impl->m_MovedOrinalT2 + diff); |
|
254 | 252 | break; |
|
255 |
|
|
|
256 | // unknown edition mode | |
|
253 | default: | |
|
254 | break; | |
|
257 | 255 | } |
|
258 | 256 | } |
|
259 | 257 | else { |
@@ -1,6 +1,7 | |||
|
1 | 1 | #include "Visualization/VisualizationWidget.h" |
|
2 | 2 | #include "Visualization/IVisualizationWidgetVisitor.h" |
|
3 | 3 | #include "Visualization/VisualizationGraphWidget.h" |
|
4 | #include "Visualization/VisualizationSelectionZoneManager.h" | |
|
4 | 5 | #include "Visualization/VisualizationTabWidget.h" |
|
5 | 6 | #include "Visualization/VisualizationZoneWidget.h" |
|
6 | 7 | #include "Visualization/operations/FindVariableOperation.h" |
@@ -16,10 +17,23 | |||
|
16 | 17 | |
|
17 | 18 | #include <QToolButton> |
|
18 | 19 | |
|
20 | #include <memory> | |
|
21 | ||
|
19 | 22 | Q_LOGGING_CATEGORY(LOG_VisualizationWidget, "VisualizationWidget") |
|
20 | 23 | |
|
24 | struct VisualizationWidget::VisualizationWidgetPrivate { | |
|
25 | std::unique_ptr<VisualizationSelectionZoneManager> m_ZoneSelectionManager = nullptr; | |
|
26 | ||
|
27 | VisualizationWidgetPrivate() | |
|
28 | : m_ZoneSelectionManager(std::make_unique<VisualizationSelectionZoneManager>()) | |
|
29 | { | |
|
30 | } | |
|
31 | }; | |
|
32 | ||
|
21 | 33 | VisualizationWidget::VisualizationWidget(QWidget *parent) |
|
22 |
: QWidget{parent}, |
|
|
34 | : QWidget{parent}, | |
|
35 | ui{new Ui::VisualizationWidget}, | |
|
36 | impl{spimpl::make_unique_impl<VisualizationWidgetPrivate>()} | |
|
23 | 37 | { |
|
24 | 38 | ui->setupUi(this); |
|
25 | 39 | |
@@ -82,6 +96,11 VisualizationWidget::~VisualizationWidget() | |||
|
82 | 96 | delete ui; |
|
83 | 97 | } |
|
84 | 98 | |
|
99 | VisualizationSelectionZoneManager &VisualizationWidget::selectionZoneManager() const | |
|
100 | { | |
|
101 | return *impl->m_ZoneSelectionManager.get(); | |
|
102 | } | |
|
103 | ||
|
85 | 104 | void VisualizationWidget::accept(IVisualizationWidgetVisitor *visitor) |
|
86 | 105 | { |
|
87 | 106 | if (visitor) { |
General Comments 0
You need to be logged in to leave comments.
Login now