Don't recurse into MacVST bundle-folders during plugin-scan
[ardour.git] / libs / pbd / configuration_variable.cc
1 /*
2     Copyright (C) 1999-2009 Paul Davis
3
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.
8
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.
13
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.
17
18 */
19
20 #include <iostream>
21
22 #include "pbd/compose.h"
23 #include "pbd/configuration_variable.h"
24 #include "pbd/debug.h"
25
26 #if defined(_MSC_VER) && (_MSC_VER < 1800)
27 // MSVC only introduced std::strtof in VS2013
28 #define strtof(s, e) strtod(s, e)
29 #endif
30
31 using namespace std;
32 using namespace PBD;
33
34 void
35 ConfigVariableBase::add_to_node (XMLNode& node)
36 {
37         const std::string v = get_as_string ();
38         DEBUG_TRACE (DEBUG::Configuration, string_compose ("Config variable %1 stored as [%2]\n", _name, v));
39         XMLNode* child = new XMLNode ("Option");
40         child->set_property ("name", _name);
41         child->set_property ("value", v);
42         node.add_child_nocopy (*child);
43 }
44
45 bool
46 ConfigVariableBase::set_from_node (XMLNode const & node)
47 {
48         if (node.name() == "Config" || node.name() == "Canvas" || node.name() == "UI") {
49
50                 /* ardour.rc */
51
52                 XMLNodeList nlist;
53                 XMLNodeConstIterator niter;
54                 XMLNode const * child;
55                 std::string str;
56
57                 nlist = node.children();
58
59                 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
60
61                         child = *niter;
62
63                         if (child->name() == "Option") {
64                                 if (child->get_property ("name", str) && str == _name) {
65                                         if (child->get_property ("value", str)) {
66                                                 set_from_string (str);
67                                         }
68                                         return true;
69                                 }
70                         }
71                 }
72
73         } else if (node.name() == "Options") {
74
75                 /* session file */
76
77                 XMLNodeList olist;
78                 XMLNodeConstIterator oiter;
79                 XMLNode* option;
80                 std::string str;
81
82                 olist = node.children();
83
84                 for (oiter = olist.begin(); oiter != olist.end(); ++oiter) {
85
86                         option = *oiter;
87
88                         if (option->name() == _name) {
89                                 if (option->get_property ("val", str)) {
90                                         set_from_string (str);
91                                         return true;
92                                 }
93                         }
94                 }
95         }
96
97         return false;
98 }
99
100 void
101 ConfigVariableBase::notify ()
102 {
103         // placeholder for any debugging desired when a config variable is modified
104 }
105
106 void
107 ConfigVariableBase::miss ()
108 {
109         // placeholder for any debugging desired when a config variable
110         // is set but to the same value as it already has
111 }