Skip to content

File InspectionRowModel.hpp

File List > inspection > InspectionRowModel.hpp

Go to the documentation of this file

//
// SPDX-FileCopyrightText: 2026 Michal Grabarczyk
// SPDX-License-Identifier: GPL-3.0-only WITH Universal-FOSS-exception-1.0
//
// This file is also available under a separate commercial license.
// See COMMERCIAL-LICENSING.md for contact information.
//
#pragma once

#include "QAccelPlot/inspection/InspectionResult.hpp"
#include "QAccelPlot/series/PlotSeries.hpp"

#include <QAbstractListModel>
#include <QPointer>

namespace QAccelPlot {

struct InspectionRow {
    QPointer<PlotSeries> series;   
    InspectionDataPoint dataPoint; 
    qreal pixelX{0.0};             
    qreal pixelY{0.0};             
    QString xText;                 
    QString yText;                 
    QString valueText;             
    bool hasSummary{false};        
    InspectionSummary summary;     
    QString minimumText;           
    QString maximumText;           
    QString meanText;              
};

class InspectionRowModel : public QAbstractListModel {
    Q_OBJECT
    QML_ANONYMOUS
    Q_PROPERTY(int count READ count NOTIFY countChanged)

public:
    enum Role {
        SeriesRole = Qt::UserRole + 1,
        SeriesNameRole,
        SeriesColorRole,
        ValidRole,
        DataPointStatusRole,
        DataPointIndexRole,
        DataPointXRole,
        DataPointYRole,
        DataPointValueRole,
        XTextRole,
        YTextRole,
        ValueTextRole,
        PixelXRole,
        PixelYRole,
        DistanceRole,
        InterpolatedRole,
        HasSummaryRole,
        SummaryStatusRole,
        SummaryCountRole,
        MinimumRole,
        MaximumRole,
        MeanRole,
        StandardDeviationRole,
        MinimumIndexRole,
        MaximumIndexRole,
        MinimumTextRole,
        MaximumTextRole,
        MeanTextRole,
    };

    explicit InspectionRowModel(QObject* parent = nullptr);

    int rowCount(const QModelIndex& parent = {}) const override;
    QVariant data(const QModelIndex& index, int role) const override;
    QHash<int, QByteArray> roleNames() const override;

    int count() const;
    Q_INVOKABLE QVariantMap get(int row) const;

    const QList<InspectionRow>& rows() const;
    void setRows(const QList<InspectionRow>& rows);
    void retainSeries(const QList<PlotSeries*>& series);

signals:
    void countChanged();

private:
    Q_SLOT void seriesAppearanceChanged();
    void watchSeries(PlotSeries* series) const;
    void unwatchSeries(PlotSeries* series);
    bool sameSeries(const QList<InspectionRow>& rows) const;

    QList<InspectionRow> rows_;
};

} // namespace QAccelPlot