summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc/osc_select_observer.h
blob: 3f5bf963dcf61410ea2dbdbfd82ea0d46f246ee9 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
    Copyright (C) 2009 Paul Davis

    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 __osc_oscselectobserver_h__
#define __osc_oscselectobserver_h__

#include <string>
#include <bitset>
#include <boost/shared_ptr.hpp>
#include <sigc++/sigc++.h>
#include <lo/lo.h>

#include "pbd/controllable.h"
#include "pbd/stateful.h"
#include "ardour/types.h"
#include "ardour/processor.h"

#include "osc.h"

class OSCSelectObserver
{

  public:
	OSCSelectObserver (ArdourSurface::OSC& o, ARDOUR::Session& s, ArdourSurface::OSC::OSCSurface* sur);
	~OSCSelectObserver ();

	boost::shared_ptr<ARDOUR::Stripable> strip () const { return _strip; }
	lo_address address() const { return addr; };
	void tick (void);
	void renew_sends (void);
	void renew_plugin (void);
	void eq_restart (int);
	void clear_observer (void);
	void refresh_strip (boost::shared_ptr<ARDOUR::Stripable> new_strip, uint32_t nsends, uint32_t g_mode, bool force);
	void set_expand (uint32_t expand);
	void set_send_page (uint32_t page);
	void set_send_size (uint32_t size);
	void set_plugin_id (int id, uint32_t page);
	void set_plugin_page (uint32_t page);
	void set_plugin_size (uint32_t size);

  private:
	boost::shared_ptr<ARDOUR::Stripable> _strip;
	ArdourSurface::OSC& _osc;
	
	PBD::ScopedConnectionList strip_connections;
	// sends, plugins and eq need their own
	PBD::ScopedConnectionList send_connections;
	PBD::ScopedConnectionList plugin_connections;
	PBD::ScopedConnectionList eq_connections;

	lo_address addr;
	std::string path;
	uint32_t gainmode;
	std::bitset<32> feedback;
	bool in_line;
	ArdourSurface::OSC::OSCSurface* sur;
	std::vector<int> send_timeout;
	uint32_t gain_timeout;
	float _last_meter;
	uint32_t nsends;
	float _last_gain;
	float _last_trim;
	std::vector<float> _last_send;
	bool _init;
	float _comp_redux;
	ARDOUR::AutoState as;
	uint32_t send_page_size;
	uint32_t send_size;
	uint32_t send_page;

	uint32_t nplug_params;
	uint32_t plug_page_size;
	uint32_t plug_page;
	int plug_id;
	uint32_t plug_size;
	std::vector<int> plug_params;
	int eq_bands;
	uint32_t _expand;
	std::string _group_name;
	std::bitset<16> _group_sharing;
	bool _tick_busy;
	ARDOUR::Session* session;

	void name_changed (const PBD::PropertyChange& what_changed);
	void group_name ();
	void group_sharing (ARDOUR::RouteGroup *rg_c);
	void comment_changed ();
	void pi_changed (PBD::PropertyChange const&);
	void change_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);
	void enable_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);
	void comp_mode (void);
	void change_message_with_id (std::string path, uint32_t id, boost::shared_ptr<PBD::Controllable> controllable);
	void enable_message_with_id (std::string path, uint32_t id, boost::shared_ptr<PBD::Controllable> controllable);
	void monitor_status (boost::shared_ptr<PBD::Controllable> controllable);
	void gain_message ();
	void gain_automation ();
	void trim_message (std::string path, boost::shared_ptr<PBD::Controllable> controllable);
	// sends stuff
	void send_init (void);
	void send_end (void);
	void plugin_init (void);
	void plugin_end (void);
	void plugin_parameter_changed (int pid, bool swtch, boost::shared_ptr<PBD::Controllable> controllable);
	void send_gain (uint32_t id, boost::shared_ptr<PBD::Controllable> controllable);
	void send_enable (std::string path, uint32_t id, boost::shared_ptr<ARDOUR::Processor> proc);
	void plug_enable (std::string path, boost::shared_ptr<ARDOUR::Processor> proc);
	void eq_init (void);
	void eq_end (void);
	void no_strip ();
	void slaved_changed (boost::shared_ptr<ARDOUR::VCA> vca, bool state);
};

#endif /* __osc_oscselectobserver_h__ */