Fix the horrible mess that was anything related to sources and paths.
[ardour.git] / libs / ardour / ardour / configuration.h
index cc4376f7814c64e8fc0001f9f6410295e6bb93b5..7b890500d8fc375f84db7fd9f5bb90f5a089c995 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __ardour_configuration_h__
@@ -37,50 +36,52 @@ class XMLNode;
 
 namespace ARDOUR {
 
-class Configuration : public Stateful
+class Configuration : public PBD::Stateful
 {
   public:
        Configuration();
        virtual ~Configuration();
 
-       struct MidiPortDescriptor {
-           std::string tag;
-           std::string device;
-           std::string type;
-           std::string mode;
+       std::map<std::string,XMLNode> midi_ports;
 
-           MidiPortDescriptor (const XMLNode&);
-           XMLNode& get_state();
-       };
-
-       std::map<std::string,MidiPortDescriptor *> midi_ports;
+       void map_parameters (sigc::slot<void,const char*> theSlot);
 
        int load_state ();
        int save_state ();
 
+       /// calls Stateful::*instant_xml methods using 
+       /// ARDOUR::user_config_directory for the directory argument
+       void add_instant_xml (XMLNode&);
+       XMLNode * instant_xml (const std::string& str);
+
        int set_state (const XMLNode&);
        XMLNode& get_state (void);
+       XMLNode& get_variables (sigc::slot<bool,ConfigVariableBase::Owner>, std::string which_node = "Config");
+       void set_variables (const XMLNode&, ConfigVariableBase::Owner owner);
+
+       void set_current_owner (ConfigVariableBase::Owner);
 
        XMLNode* control_protocol_state () { return _control_protocol_state; }
 
-        /* define accessor methods */
+       sigc::signal<void,const char*> ParameterChanged;
+
+       /* define accessor methods */
 
 #undef  CONFIG_VARIABLE
 #undef  CONFIG_VARIABLE_SPECIAL
 #define CONFIG_VARIABLE(Type,var,name,value) \
         Type get_##var () const { return var.get(); } \
-        void set_##var (Type val) { var.set (val); var.set_is_user (user_configuration); }
+        bool set_##var (Type val) { bool ret = var.set (val, current_owner); if (ret) { ParameterChanged (name); } return ret;  }
 #define CONFIG_VARIABLE_SPECIAL(Type,var,name,value,mutator) \
         Type get_##var () const { return var.get(); } \
-        void set_##var (Type val) { var.set (val); var.set_is_user (user_configuration); }
+        bool set_##var (Type val) { bool ret = var.set (val, current_owner); if (ret) { ParameterChanged (name); } return ret; }
 #include "ardour/configuration_vars.h"
 #undef  CONFIG_VARIABLE
 #undef  CONFIG_VARIABLE_SPECIAL
 
-       
   private:
 
-        /* declare variables */
+       /* declare variables */
 
 #undef  CONFIG_VARIABLE
 #undef  CONFIG_VARIABLE_SPECIAL        
@@ -90,15 +91,16 @@ class Configuration : public Stateful
 #undef  CONFIG_VARIABLE
 #undef  CONFIG_VARIABLE_SPECIAL        
 
-       bool     user_configuration;
+       ConfigVariableBase::Owner current_owner;
        XMLNode* _control_protocol_state;
 
-       XMLNode& state (bool user_only);
+       XMLNode& state (sigc::slot<bool,ConfigVariableBase::Owner>);
+       bool     save_config_options_predicate (ConfigVariableBase::Owner owner);
 };
 
 extern Configuration *Config;
 extern gain_t speed_quietning; /* see comment in configuration.cc */
 
-}; /* namespace ARDOUR */
+} // namespace ARDOUR
 
 #endif /* __ardour_configuration_h__ */