2008-06-02 17:41:35 -04:00
|
|
|
#~ /usr/bin/ruby
|
|
|
|
# Copyright (C) 2006,2007 John Anderson
|
|
|
|
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
|
|
|
|
require 'erb'
|
|
|
|
|
|
|
|
signals = %w{
|
|
|
|
solo_changed
|
|
|
|
mute_changed
|
|
|
|
record_enable_changed
|
|
|
|
gain_changed
|
|
|
|
name_changed
|
|
|
|
panner_changed
|
|
|
|
}
|
|
|
|
|
|
|
|
@signal_calls = { 'panner_changed' => 'panner()[0]->Changed' }
|
|
|
|
|
|
|
|
def connection_call( x )
|
|
|
|
if @signal_calls.include? x
|
|
|
|
@signal_calls[x]
|
|
|
|
else
|
|
|
|
x
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
signals.each do |x|
|
|
|
|
puts <<EOF
|
|
|
|
void MackieControlProtocol::notify_#{x}( void *, ARDOUR::Route * route )
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
strip_from_route( route ).#{x.gsub( /_changed/, '' )}();
|
|
|
|
}
|
|
|
|
catch( exception & e )
|
|
|
|
{
|
|
|
|
cout << e.what() << endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EOF
|
|
|
|
end
|
|
|
|
|
|
|
|
class_def = <<EOF
|
|
|
|
#ifndef route_signal_h
|
|
|
|
#define route_signal_h
|
|
|
|
|
|
|
|
#include <sigc++/sigc++.h>
|
|
|
|
|
|
|
|
class MackieControlProtocol;
|
|
|
|
|
|
|
|
namespace ARDOUR {
|
|
|
|
class Route;
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace Mackie
|
|
|
|
{
|
|
|
|
|
|
|
|
class Strip;
|
|
|
|
|
|
|
|
/**
|
|
|
|
This class is intended to easily create and destroy the set of
|
|
|
|
connections from a route to a control surface strip. Instanting
|
|
|
|
it will connect the signals, and destructing it will disconnect
|
|
|
|
the signals.
|
|
|
|
*/
|
|
|
|
class RouteSignal
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
RouteSignal( ARDOUR::Route & route, MackieControlProtocol & mcp, Strip & strip )
|
|
|
|
: _route( route ), _mcp( mcp ), _strip( strip )
|
|
|
|
{
|
|
|
|
connect();
|
|
|
|
}
|
|
|
|
|
|
|
|
~RouteSignal()
|
|
|
|
{
|
|
|
|
disconnect();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
ARDOUR::Route & _route;
|
|
|
|
MackieControlProtocol & _mcp;
|
|
|
|
Strip & _strip;
|
|
|
|
|
|
|
|
<% signals.each do |x| -%>
|
|
|
|
sigc::connection _<%= x %>_connection;
|
|
|
|
<% end -%>
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
EOF
|
|
|
|
|
|
|
|
erb = ERB.new( class_def, 0, ">-" )
|
|
|
|
erb.run
|
|
|
|
|
|
|
|
impl_def = <<EOF
|
|
|
|
#include "route_signal.h"
|
|
|
|
|
2009-10-29 20:21:40 -04:00
|
|
|
#include "ardour/route.h"
|
|
|
|
#include "ardour/panner.h"
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
#include "mackie_control_protocol.h"
|
|
|
|
|
|
|
|
using namespace Mackie;
|
|
|
|
|
|
|
|
void RouteSignal::connect()
|
|
|
|
{
|
|
|
|
<% signals.each do |x| -%>
|
|
|
|
_<%=x%>_connection = _route.<%=connection_call(x)%>.connect( sigc::bind ( mem_fun ( _mcp, &MackieControlProtocol::notify_<%=x%> ), &_route ) );
|
|
|
|
<% end -%>
|
|
|
|
}
|
|
|
|
|
|
|
|
void RouteSignal::disconnect()
|
|
|
|
{
|
|
|
|
<% signals.each do |x| -%>
|
|
|
|
_<%= x %>_connection.disconnect();
|
|
|
|
<% end -%>
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
erb = ERB.new( impl_def, 0, ">-" )
|
|
|
|
erb.run
|