commit 2a1417871ee8915b4da389597cc41ddc146bee51
parent 184ea1faaa873d0ae47b069f7016e7b45ee846b2
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date: Wed, 15 Sep 2021 17:46:51 +0200
More work on the transport info plugin
Diffstat:
3 files changed, 73 insertions(+), 51 deletions(-)
diff --git a/examples/plugins/gui/transport-proxy.cc b/examples/plugins/gui/transport-proxy.cc
@@ -4,64 +4,56 @@
TransportProxy::TransportProxy(QObject *parent) : QObject(parent) {}
-void TransportProxy::update(bool hasTransport, const clap_event_transport &transport) {
+void TransportProxy::update(bool hasTransport, const clap_event_transport &t) {
update(_hasTransport, hasTransport, &TransportProxy::hasTransportChanged);
- update<bool>(
- _hasTempo, transport.flags & CLAP_TRANSPORT_HAS_TEMPO, &TransportProxy::hasTempoChanged);
+ update<bool>(_hasTempo, t.flags & CLAP_TRANSPORT_HAS_TEMPO, &TransportProxy::hasTempoChanged);
update<bool>(_hasBeatsTimeline,
- transport.flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE,
+ t.flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE,
&TransportProxy::hasBeatsTimelineChanged);
update<bool>(_hasSecondsTimeline,
- transport.flags & CLAP_TRANSPORT_HAS_SECONDS_TIMELINE,
+ t.flags & CLAP_TRANSPORT_HAS_SECONDS_TIMELINE,
&TransportProxy::hasSecondsTimelineChanged);
update<bool>(_hasTimeSignature,
- transport.flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE,
+ t.flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE,
&TransportProxy::hasTimeSignatureChanged);
+ update<bool>(_isPlaying, t.flags & CLAP_TRANSPORT_IS_PLAYING, &TransportProxy::isPlayingChanged);
+ update<bool>(
+ _isRecording, t.flags & CLAP_TRANSPORT_IS_RECORDING, &TransportProxy::isRecordingChanged);
update<bool>(
- _isPlaying, transport.flags & CLAP_TRANSPORT_IS_PLAYING, &TransportProxy::isPlayingChanged);
- update<bool>(_isRecording,
- transport.flags & CLAP_TRANSPORT_IS_RECORDING,
- &TransportProxy::isRecordingChanged);
- update<bool>(_isLoopActive,
- transport.flags & CLAP_TRANSPORT_IS_LOOP_ACTIVE,
- &TransportProxy::isLoopActiveChanged);
+ _isLoopActive, t.flags & CLAP_TRANSPORT_IS_LOOP_ACTIVE, &TransportProxy::isLoopActiveChanged);
update<bool>(_isWithinPreRoll,
- transport.flags & CLAP_TRANSPORT_IS_WITHIN_PRE_ROLL,
+ t.flags & CLAP_TRANSPORT_IS_WITHIN_PRE_ROLL,
&TransportProxy::isWithinPreRollChanged);
update(_songPositionBeats,
- transport.song_pos_beats / double(CLAP_BEATTIME_FACTOR),
+ t.song_pos_beats / double(CLAP_BEATTIME_FACTOR),
&TransportProxy::songPositionBeatsChanged);
update(_songPositionSeconds,
- transport.song_pos_seconds / double(CLAP_SECTIME_FACTOR),
+ t.song_pos_seconds / double(CLAP_SECTIME_FACTOR),
&TransportProxy::songPositionSecondsChanged);
- update(_tempo, transport.tempo, &TransportProxy::tempoChanged);
+ update(_tempo, t.tempo, &TransportProxy::tempoChanged);
- update(_barStart,
- transport.bar_start / double(CLAP_BEATTIME_FACTOR),
- &TransportProxy::barStartChanged);
- update(_barNumber, transport.bar_number, &TransportProxy::barNumberChanged);
+ update(_barStart, t.bar_start / double(CLAP_BEATTIME_FACTOR), &TransportProxy::barStartChanged);
+ update(_barNumber, t.bar_number, &TransportProxy::barNumberChanged);
update(_loopStartBeats,
- transport.loop_start_beats / double(CLAP_BEATTIME_FACTOR),
+ t.loop_start_beats / double(CLAP_BEATTIME_FACTOR),
&TransportProxy::loopStartBeatsChanged);
update(_loopEndBeats,
- transport.loop_end_beats / double(CLAP_BEATTIME_FACTOR),
+ t.loop_end_beats / double(CLAP_BEATTIME_FACTOR),
&TransportProxy::loopEndBeatsChanged);
update(_loopStartSeconds,
- transport.loop_start_seconds / double(CLAP_SECTIME_FACTOR),
+ t.loop_start_seconds / double(CLAP_SECTIME_FACTOR),
&TransportProxy::loopStartSecondsChanged);
update(_loopEndSeconds,
- transport.loop_end_seconds / double(CLAP_SECTIME_FACTOR),
+ t.loop_end_seconds / double(CLAP_SECTIME_FACTOR),
&TransportProxy::loopEndSecondsChanged);
+ update<int>(_timeSignatureNumerator, t.tsig_num, &TransportProxy::timeSignatureNumeratorChanged);
update<int>(
- _timeSignatureNumerator, transport.tsig_num, &TransportProxy::timeSignatureNumeratorChanged);
- update<int>(_timeSignatureDenominator,
- transport.tsig_denom,
- &TransportProxy::timeSignatureDenominatorChanged);
+ _timeSignatureDenominator, t.tsig_denom, &TransportProxy::timeSignatureDenominatorChanged);
emit updated();
}
diff --git a/examples/plugins/qml/transport-info/main.qml b/examples/plugins/qml/transport-info/main.qml
@@ -8,31 +8,54 @@ Rectangle {
color: "#f8f8f8"
Text {
- text: "Has transport: " + transport.hasTransport + "\n"
- + (!transport.hasTransport ? "" :
- + "Is playing: " + transport.isPlaying + "\n"
- + "Is recording: " + transport.isRecording + "\n"
- + "Is loop active: " + transport.isLoopActive + "\n"
- + (!(transport.isLoopActive && transport.hasBeatsTimeline) ? "" :
- + "Loop (beats): " + transport.loopStartBeats + " .. " + transport.loopEndBeats)
- + (!(transport.isLoopActive && transport.hasSecondsTimeline) ? "" :
- + "Loop (seconds): " + transport.loopStartSeconds + " .. " + transport.loopEndSeconds)
- + "Is within preroll: " + transport.isWithinPreroll + "\n"
- + "Has tempo: " + transport.hasTempo + "\n"
- + (!transport.hasTempo ? "" :
- + "Tempo (bpm): " + transport.tempo)
- + "Has beats timeline: " + transport.hasBeatsTimeline + "\n"
- + (!transport.hasBeatsTimeline ? "" :
- + "song position (beats): " + transport.songPositionBeats)
- + (!transport.hasSecondsTimeline ? "" :
- + "song position (seconds): " + transport.songPositionSeconds)
- + "Has Time Signature: " + transport.hasTimeSignature + "\n"
- + (!transport.hasTimeSignature ? "" :
- + "Time Signature: " + transport.timeSignatureNumerator + "/" + transport.timeSignatureDenominator)
- )
+ id: display
+ text: computeText()
+ }
+
+ function computeText() {
+ var text = "Has transport: " + transport.hasTransport + "\n";
+ if (!transport.hasTransport)
+ return text;
+
+ text += "Is playing: " + transport.isPlaying + "\n";
+ text += "Is recording: " + transport.isRecording + "\n";
+ text += "Is loop active: " + transport.isLoopActive + "\n";
+
+ if (transport.isLoopActive && transport.hasBeatsTimeline) {
+ text += "Loop (beats): " + transport.loopStartBeats + " .. " + transport.loopEndBeats + "\n";
+ }
+
+ if (transport.isLoopActive && transport.hasSecondsTimeline) {
+ text += "Loop (seconds): " + transport.loopStartSeconds + " .. " + transport.loopEndSeconds + "\n";
+ }
+
+ text += "Is within preroll: " + transport.isWithinPreRoll + "\n";
+
+ text += "Has tempo: " + transport.hasTempo + "\n";
+ if (transport.hasTempo)
+ text += "Tempo (bpm): " + transport.tempo + "\n";
+
+ text += "Has beats timeline: " + transport.hasBeatsTimeline + "\n";
+ if (transport.hasBeatsTimeline)
+ text += "song position (beats): " + transport.songPositionBeats + "\n";
+
+ text += "Has seconds timeline: " + transport.hasSecondsTimeline + "\n";
+ if (transport.hasSecondsTimeline)
+ text += "song position (seconds): " + transport.songPositionSeconds + "\n";
+
+ text += "Has Time Signature: " + transport.hasTimeSignature + "\n";
+ if (transport.hasTimeSignature)
+ text += "Time Signature: " + transport.timeSignatureNumerator + "/" + transport.timeSignatureDenominator + "\n";
+
+ return text;
+ }
+
+ function updateText() {
+ display.text = computeText();
}
Component.onCompleted: {
transport.isSubscribed = true;
+ transport.updated.connect(updateText);
}
}
diff --git a/examples/plugins/remote-gui.cc b/examples/plugins/remote-gui.cc
@@ -111,6 +111,13 @@ namespace clap {
msg.get(rq);
_plugin.guiAdjust(rq.paramId, rq.value, rq.flags);
break;
+
+ case messages::kSubscribeToTransportRequest: {
+ messages::SubscribeToTransportRequest rq;
+ msg.get(rq);
+ _isTransportSubscribed = rq.isSubscribed;
+ break;
+ }
}
}
}