summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/route_signal.h
blob: 0239980fd4fad7d25d53326d27d6d8c5db06c776 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
	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.
*/
#ifndef route_signal_h
#define route_signal_h

#include <sigc++/sigc++.h>

class MackieControlProtocol;

namespace ARDOUR {
	class Route;
}
	
namespace Mackie
{

class Strip;
class MackiePort;

/**
  This class is intended to easily create and destroy the set of
  connections from a route to a control surface strip. Instantiating
  it will connect the signals, and destructing it will disconnect
  the signals.
*/
class RouteSignal
{
public:
	RouteSignal( ARDOUR::Route & route, MackieControlProtocol & mcp, Strip & strip, MackiePort & port )
	: _route( route ), _mcp( mcp ), _strip( strip ), _port( port )
	{
		connect();
	}
	
	~RouteSignal()
	{
		disconnect();
	}
	
	void connect();
	void disconnect();
	
	// call all signal handlers manually
	void notify_all();
	
	const ARDOUR::Route & route() const { return _route; }
	Strip & strip() { return _strip; }
	MackiePort & port() { return _port; }
	
private:
	ARDOUR::Route & _route;
	MackieControlProtocol & _mcp;
	Strip & _strip;
	MackiePort & _port;	

	sigc::connection _solo_changed_connection;
	sigc::connection _mute_changed_connection;
	sigc::connection _record_enable_changed_connection;
	sigc::connection _gain_changed_connection;
	sigc::connection _name_changed_connection;
	sigc::connection _panner_changed_connection;
};

}

#endif