Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
atomic_position_qml_adapter.h
1// SPDX-FileCopyrightText: © 2025-2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <functional>
7#include <optional>
8
9#include "dsp/atomic_position.h"
10
11#include <QObject>
12#include <QtQmlIntegration/qqmlintegration.h>
13
14namespace zrythm::dsp
15{
16class AtomicPositionQmlAdapter : public QObject
17{
18 Q_OBJECT
19 Q_PROPERTY (double ticks READ ticks WRITE setTicks NOTIFY positionChanged)
20 Q_PROPERTY (
21 double seconds READ seconds WRITE setSeconds NOTIFY positionChanged)
22 Q_PROPERTY (
23 qint64 samples READ samples WRITE setSamples NOTIFY positionChanged)
24 Q_PROPERTY (TimeFormat mode READ mode WRITE setMode NOTIFY positionChanged)
25 QML_NAMED_ELEMENT (AtomicPosition)
26 QML_UNCREATABLE ("")
27
28public:
29 using ConstraintFunction =
30 std::function<units::precise_tick_t (units::precise_tick_t)>;
31 using TimeFormat = AtomicPosition::TimeFormat;
32
33 Q_ENUM (TimeFormat)
34
35 explicit AtomicPositionQmlAdapter (
36 AtomicPosition &atomicPos,
37 std::optional<ConstraintFunction> constraints = std::nullopt,
38 QObject * parent = nullptr);
39
40 double ticks () const;
41 void setTicks (double ticks);
42 Q_INVOKABLE void addTicks (double ticks_to_add)
43 {
44 setTicks (ticks () + ticks_to_add);
45 }
46
47 double seconds () const;
48 void setSeconds (double seconds);
49 Q_INVOKABLE void addSeconds (double seconds_to_add)
50 {
51 setSeconds (seconds () + seconds_to_add);
52 }
53
54 qint64 samples () const;
55 void setSamples (double samples);
56
57 TimeFormat mode () const;
58 void setMode (TimeFormat format);
59
62 const AtomicPosition &position () const { return atomic_pos_; }
63
64Q_SIGNALS:
65 void positionChanged ();
66
67private:
68 AtomicPosition &atomic_pos_; // Reference to existing DSP object
69
82 std::optional<ConstraintFunction> constraints_;
83};
84} // namespace zrythm::dsp
const AtomicPosition & position() const
Only cost access allowed to the non-QML position to avoid updates without signals.
Thread-safe position storage with automatic musical/absolute time conversion.