Skip to content

File TransitionRunner.hpp

File List > QAccelPlot > src > QAccelPlot > transitions > TransitionRunner.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/transitions/DataTransition.hpp"

#include <QObject>
#include <QPointer>

#include <vector>

QT_FORWARD_DECLARE_CLASS(QQuickItem)
QT_FORWARD_DECLARE_CLASS(QQuickWindow)

namespace QAccelPlot {

class TransitionRunner : public QObject {
    Q_OBJECT

public:
    explicit TransitionRunner(QQuickItem* item);
    ~TransitionRunner() override;

    DataTransition* transition() const;
    bool setTransition(DataTransition* transition);
    bool enabled() const;

    bool active() const;
    bool pending() const;
    const std::vector<double>& targetData() const;
    int targetPointCount() const;

    void start(const std::vector<double>& currentData, int currentPointCount, std::vector<double>&& newData, int newPointCount, int stride = 2);
    bool advance(std::vector<double>& outData, int& outPointCount);
    bool finish(std::vector<double>& outData, int& outPointCount);
    void cancel();

signals:
    void frameDue();
    void interrupted();
    void transitionDestroyed();

private:
    void interrupt();
    void onTransitionDestroyed();
    void onRunningChanged();
    void connectWindow(QQuickWindow* window);
    void onAfterAnimating();
    void requestFrame();

    QPointer<DataTransition> transition_;
    DataTransition::Run run_;
    QPointer<QQuickWindow> window_;
};

} // namespace QAccelPlot