58 Q_PROPERTY(
int capacity READ capacity WRITE setCapacity NOTIFY capacityChanged)
59 Q_PROPERTY(
double yMinimum READ yMinimum WRITE setYMinimum NOTIFY yRangeChanged)
60 Q_PROPERTY(
double yMaximum READ yMaximum WRITE setYMaximum NOTIFY yRangeChanged)
61 Q_PROPERTY(
bool autoScaleY READ isAutoScaleY WRITE setAutoScaleY NOTIFY appearanceChanged)
62 Q_PROPERTY(
bool gridVisible READ isGridVisible WRITE setGridVisible NOTIFY appearanceChanged)
63 Q_PROPERTY(
bool legendVisible READ isLegendVisible WRITE setLegendVisible NOTIFY appearanceChanged)
64 Q_PROPERTY(QColor gridColor READ gridColor WRITE setGridColor NOTIFY appearanceChanged)
65 Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY appearanceChanged)
66 Q_PROPERTY(QColor bezelColor READ bezelColor WRITE setBezelColor NOTIFY appearanceChanged)
67 Q_PROPERTY(
int horizontalDivisions READ horizontalDivisions WRITE setHorizontalDivisions NOTIFY appearanceChanged)
68 Q_PROPERTY(
int verticalDivisions READ verticalDivisions WRITE setVerticalDivisions NOTIFY appearanceChanged)
69 Q_PROPERTY(XAxisMode xAxisMode READ xAxisMode WRITE setXAxisMode NOTIFY xAxisModeChanged)
70 Q_PROPERTY(DecimationMode decimationMode READ decimationMode WRITE setDecimationMode NOTIFY decimationModeChanged)
71 Q_PROPERTY(Interpolation interpolation READ interpolation WRITE setInterpolation NOTIFY interpolationChanged)
72 Q_PROPERTY(TimeLabelFormat timeLabelFormat READ timeLabelFormat WRITE setTimeLabelFormat NOTIFY timeLabelFormatChanged)
73 Q_PROPERTY(
double timeSpanSeconds READ timeSpanSeconds WRITE setTimeSpanSeconds NOTIFY timeSpanChanged)
77 enum class XAxisMode {
84 enum class DecimationMode {
89 Q_ENUM(DecimationMode)
92 enum class Interpolation {
99 enum class TimeLabelFormat {
103 Q_ENUM(TimeLabelFormat)
110 explicit StripChart(QWidget *parent =
nullptr);
114 [[nodiscard]]
int capacity()
const;
116 [[nodiscard]]
double yMinimum()
const;
118 [[nodiscard]]
double yMaximum()
const;
120 [[nodiscard]]
bool isAutoScaleY()
const;
122 [[nodiscard]]
bool isGridVisible()
const;
124 [[nodiscard]]
bool isLegendVisible()
const;
126 [[nodiscard]] QColor gridColor()
const;
128 [[nodiscard]] QColor backgroundColor()
const;
130 [[nodiscard]] QColor bezelColor()
const;
132 [[nodiscard]]
int horizontalDivisions()
const;
134 [[nodiscard]]
int verticalDivisions()
const;
137 [[nodiscard]]
int channelCount()
const;
139 [[nodiscard]] QString channelName(
int channelId)
const;
141 [[nodiscard]] QColor channelColor(
int channelId)
const;
143 [[nodiscard]]
bool isChannelVisible(
int channelId)
const;
145 [[nodiscard]]
double channelPenWidth(
int channelId)
const;
147 [[nodiscard]] qsizetype channelSampleCount(
int channelId)
const;
149 [[nodiscard]]
double channelLatestValue(
int channelId)
const;
152 [[nodiscard]] XAxisMode xAxisMode()
const;
161 void setXAxisMode(XAxisMode mode);
164 [[nodiscard]] std::chrono::nanoseconds timeSpan()
const;
166 void setTimeSpan(std::chrono::nanoseconds span);
169 [[nodiscard]]
double timeSpanSeconds()
const;
171 void setTimeSpanSeconds(
double seconds);
174 [[nodiscard]] DecimationMode decimationMode()
const;
181 void setDecimationMode(DecimationMode mode);
184 [[nodiscard]] Interpolation interpolation()
const;
186 void setInterpolation(Interpolation interp);
189 [[nodiscard]] std::chrono::nanoseconds gapThreshold()
const;
191 void setGapThreshold(std::chrono::nanoseconds threshold);
194 [[nodiscard]] QDateTime timeOrigin()
const;
196 void setTimeOrigin(
const QDateTime &origin);
199 [[nodiscard]] TimeLabelFormat timeLabelFormat()
const;
201 void setTimeLabelFormat(TimeLabelFormat format);
204 [[nodiscard]] quint64 rejectedSampleCount(
int channelId)
const;
206 [[nodiscard]]
bool isTimeWindowFullyCovered()
const;
219 void addSample(
int channelId, std::chrono::nanoseconds t,
double value);
232 void addSamples(
int channelId,
const std::chrono::nanoseconds *t,
233 const double *values, qsizetype count);
247 void addUniformSamples(
int channelId, std::chrono::nanoseconds t0,
248 std::chrono::nanoseconds dt,
249 const double *values, qsizetype count);
260 void addSynchronousSamples(std::chrono::nanoseconds t,
261 const QVector<double> &values);
263 [[nodiscard]] QSize sizeHint()
const override;
264 [[nodiscard]] QSize minimumSizeHint()
const override;
274 int addChannel(
const QString &name,
const QColor &color,
double penWidth = 1.8);
276 void addDataPoint(
int channelId,
double value);
278 void addDataPoints(
const QVector<double> &values);
283 void setCapacity(
int count);
285 void setYMinimum(
double min);
287 void setYMaximum(
double max);
289 void setYRange(
double min,
double max);
291 void setAutoScaleY(
bool autoScale);
293 void setGridVisible(
bool visible);
295 void setLegendVisible(
bool visible);
297 void setGridColor(
const QColor &color);
299 void setBackgroundColor(
const QColor &color);
301 void setBezelColor(
const QColor &color);
303 void setHorizontalDivisions(
int divisions);
305 void setVerticalDivisions(
int divisions);
307 void setChannelVisible(
int channelId,
bool visible);
309 void setChannelColor(
int channelId,
const QColor &color);
313 void capacityChanged(
int capacity);
315 void yRangeChanged(
double min,
double max);
319 void appearanceChanged();
321 void xAxisModeChanged(XAxisMode mode);
323 void decimationModeChanged(DecimationMode mode);
325 void interpolationChanged(Interpolation interp);
327 void timeLabelFormatChanged(TimeLabelFormat format);
329 void timeSpanChanged(
double seconds);
332 void paintEvent(QPaintEvent *event)
override;
333 void resizeEvent(QResizeEvent *event)
override;
334 void changeEvent(QEvent *event)
override;
337 void invalidateCache();
338 void renderStaticGrid(
const QSize &size);
339 void updateAutoScaling();
340 void ensureAutoScale();
341 [[nodiscard]] QRectF plotArea()
const;
343 std::unique_ptr<StripChartPrivate> d_ptr;
345 friend class StripChartTestAccess;
346 friend class internal::StripChartTestAccess;