13
0

WebSockets: add transport roll support to surface

This commit is contained in:
Luciano Iam 2020-04-18 12:39:18 +02:00 committed by Robin Gareus
parent 656cd9c8a7
commit 0e664b1556
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
7 changed files with 51 additions and 2 deletions

View File

@ -19,6 +19,12 @@
#include "component.h"
#include "ardour_websockets.h"
BasicUI&
SurfaceComponent::basic_ui () const
{
return _surface;
}
PBD::EventLoop*
SurfaceComponent::event_loop () const
{

View File

@ -19,6 +19,8 @@
#ifndef _ardour_surface_websockets_component_h_
#define _ardour_surface_websockets_component_h_
#include "control_protocol/basic_ui.h"
#include <glibmm.h>
#include "ardour/session.h"
@ -51,6 +53,7 @@ public:
return 0;
}
BasicUI& basic_ui () const;
PBD::EventLoop* event_loop () const;
Glib::RefPtr<Glib::MainLoop> main_loop () const;
ARDOUR::Session& session () const;

View File

@ -53,6 +53,7 @@ WebsocketsDispatcher::dispatch (Client client, const NodeStateMessage& msg)
void
WebsocketsDispatcher::update_all_nodes (Client client)
{
update (client, Node::transport_roll, globals ().transport_roll ());
update (client, Node::tempo, globals ().tempo ());
for (uint32_t strip_n = 0; strip_n < strips ().strip_count (); ++strip_n) {

View File

@ -29,6 +29,20 @@
using namespace ARDOUR;
struct TransportObserver {
void operator() (ArdourFeedback* p)
{
p->update_all (Node::transport_roll, p->globals ().transport_roll ());
}
};
struct RecordStateObserver {
void operator() (ArdourFeedback* p)
{
// TO DO
}
};
struct TempoObserver {
void operator() (ArdourFeedback* p)
{
@ -162,8 +176,13 @@ ArdourFeedback::poll () const
void
ArdourFeedback::observe_globals ()
{
session ().tempo_map ().PropertyChanged.connect (_signal_connections, MISSING_INVALIDATOR,
boost::bind<void> (TempoObserver (), this), event_loop ());
ARDOUR::Session& sess = session ();
sess.TransportStateChange.connect (_signal_connections, MISSING_INVALIDATOR,
boost::bind<void> (TransportObserver (), this), event_loop ());
sess.RecordStateChanged.connect (_signal_connections, MISSING_INVALIDATOR,
boost::bind<void> (RecordStateObserver (), this), event_loop ());
sess.tempo_map ().PropertyChanged.connect (_signal_connections, MISSING_INVALIDATOR,
boost::bind<void> (TempoObserver (), this), event_loop ());
}
void

View File

@ -22,6 +22,21 @@
using namespace ARDOUR;
bool
ArdourGlobals::transport_roll () const
{
return static_cast<bool>(basic_ui ().transport_rolling ());
}
void
ArdourGlobals::set_transport_roll (bool value)
{
if ((value && !transport_roll ()) || (!value && transport_roll ())) {
// this call is equivalent to hitting the spacebar
basic_ui ().toggle_roll ();
}
}
double
ArdourGlobals::tempo () const
{

View File

@ -28,6 +28,9 @@ public:
: SurfaceComponent (surface){};
virtual ~ArdourGlobals (){};
bool transport_roll () const;
void set_transport_roll (bool);
double tempo () const;
void set_tempo (double);
};

View File

@ -32,6 +32,8 @@
namespace Node
{
const std::string tempo = "tempo";
const std::string transport_roll = "transport_roll";
const std::string record_state = "record_state";
const std::string strip_desc = "strip_desc";
const std::string strip_meter = "strip_meter";
const std::string strip_gain = "strip_gain";