WebSockets: add transport roll support to surface
This commit is contained in:
parent
656cd9c8a7
commit
0e664b1556
|
@ -19,6 +19,12 @@
|
|||
#include "component.h"
|
||||
#include "ardour_websockets.h"
|
||||
|
||||
BasicUI&
|
||||
SurfaceComponent::basic_ui () const
|
||||
{
|
||||
return _surface;
|
||||
}
|
||||
|
||||
PBD::EventLoop*
|
||||
SurfaceComponent::event_loop () const
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue
Block a user