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 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 <QtQmlIntegration>
12
13namespace zrythm::dsp
14{
15class AtomicPositionQmlAdapter : public QObject
16{
17 Q_OBJECT
18 Q_PROPERTY (double ticks READ ticks WRITE setTicks NOTIFY positionChanged)
19 Q_PROPERTY (
20 double seconds READ seconds WRITE setSeconds NOTIFY positionChanged)
21 Q_PROPERTY (
22 qint64 samples READ samples WRITE setSamples NOTIFY positionChanged)
23 Q_PROPERTY (TimeFormat mode READ mode WRITE setMode NOTIFY positionChanged)
24 QML_NAMED_ELEMENT (AtomicPosition)
25 QML_UNCREATABLE ("")
26
27public:
28 using ConstraintFunction =
29 std::function<units::precise_tick_t (units::precise_tick_t)>;
30
31 explicit AtomicPositionQmlAdapter (
32 AtomicPosition &atomicPos,
33 std::optional<ConstraintFunction> constraints = std::nullopt,
34 QObject * parent = nullptr);
35
36 double ticks () const;
37 void setTicks (double ticks);
38 Q_INVOKABLE void addTicks (double ticks_to_add)
39 {
40 setTicks (ticks () + ticks_to_add);
41 }
42
43 double seconds () const;
44 void setSeconds (double seconds);
45 Q_INVOKABLE void addSeconds (double seconds_to_add)
46 {
47 setSeconds (seconds () + seconds_to_add);
48 }
49
50 qint64 samples () const;
51 void setSamples (double samples);
52
53 TimeFormat mode () const;
54 void setMode (TimeFormat format);
55
58 const AtomicPosition &position () const { return atomic_pos_; }
59
60Q_SIGNALS:
61 void positionChanged ();
62
63private:
64 AtomicPosition &atomic_pos_; // Reference to existing DSP object
65
78 std::optional<ConstraintFunction> constraints_;
79};
80} // 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.
TimeFormat
Definition types.h:173