fix visual focus indication in IOSelector; import pays attention to audio file embedd...
[ardour.git] / libs / ardour / ardour / configuration.h
index dd689e9a2d350dae6823a419c313a7977aadd17f..bb49b2dce4703a308411f59ff675b291deb1424f 100644 (file)
@@ -55,28 +55,35 @@ class Configuration : public Stateful
 
        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 +97,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;