2
Copyright (C) 2009 Paul Davis
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
#include "pbd/controllable_descriptor.h"
20
#include "pbd/strsplit.h"
21
#include "pbd/convert.h"
27
ControllableDescriptor::set (const std::string& str)
29
string::size_type first_space = str.find_first_of (" ");
31
if (first_space == string::npos) {
35
string front = str.substr (0, first_space);
36
string back = str.substr (first_space);
39
split (front, path, '/');
41
if (path.size() < 2) {
46
split (back, rest, ' ');
48
if (rest.size() < 1) {
52
if (path[0] == "route" || path[0] == "rid") {
54
_top_level_type = RemoteControlID;
56
if (rest[0][0] == 'B') {
58
_rid = atoi (rest[0].substr (1));
59
} else if (isdigit (rest[0][0])) {
61
_rid = atoi (rest[0]);
66
} else if (path[0] == "bus" || path[0] == "track") {
68
_top_level_type = NamedRoute;
69
_top_level_name = rest[0];
72
if (path[1] == "gain") {
75
} else if (path[1] == "solo") {
78
} else if (path[1] == "mute") {
81
} else if (path[1] == "recenable") {
84
} else if (path[1] == "balance") {
87
} else if (path[1] == "panwidth") {
90
} else if (path[1] == "pandirection") {
91
_subtype = PanDirection;
93
} else if (path[1] == "plugin") {
94
if (path.size() == 3 && rest.size() == 3) {
95
if (path[2] == "parameter") {
96
_subtype = PluginParameter;
97
_target.push_back (atoi (rest[1]));
98
_target.push_back (atoi (rest[2]));
105
} else if (path[1] == "send") {
107
if (path.size() == 3 && rest.size() == 3) {
108
if (path[2] == "gain") {
110
_target.push_back (atoi (rest[1]));
111
_target.push_back (atoi (rest[2]));
124
ControllableDescriptor::rid() const
127
return _rid + _bank_offset;
134
ControllableDescriptor::target (uint32_t n) const
136
if (n < _target.size()) {