meet rhythm ferret: cute, furry and always on time (ardour build now requires fftw3...
[ardour.git] / libs / ardour / ardour / configuration.h
index dd689e9a2d350dae6823a419c313a7977aadd17f..7982813900366d9dea439e1a1cd2e302e7a16826 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__
@@ -43,40 +42,37 @@ class Configuration : public Stateful
        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 ();
 
        int set_state (const XMLNode&);
        XMLNode& get_state (void);
+       XMLNode& get_variables (sigc::slot<bool,ConfigVariableBase::Owner>);
+       void set_variables (const XMLNode&, ConfigVariableBase::Owner owner);
+
+       void set_current_owner (ConfigVariableBase::Owner);
 
        XMLNode* control_protocol_state () { return _control_protocol_state; }
 
+       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:
 
@@ -90,10 +86,11 @@ 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;