Merge branch 'master' into windows
[ardour.git] / libs / ardour / ardour / configuration.h
index 70b7e166c155754986a01dff670566430d06a833..14a43e160c947c0f694a9c3ccd3b7c74c1ba4ad6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 1999 Paul Davis 
+    Copyright (C) 2009 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #ifndef __ardour_configuration_h__
 #define __ardour_configuration_h__
 
-#include <map>
-#include <vector>
-
-#include <sys/types.h>
-#include <string>
-
-#include <pbd/stateful.h> 
-
-#include <ardour/types.h>
-#include <ardour/utils.h>
-#include <ardour/configuration_variable.h>
+#include <boost/function.hpp>
+#include "pbd/signals.h"
+#include "pbd/stateful.h"
+#include "ardour/configuration_variable.h"
 
 class XMLNode;
 
@@ -42,75 +35,15 @@ class Configuration : public PBD::Stateful
        Configuration();
        virtual ~Configuration();
 
-       struct MidiPortDescriptor {
-               std::string tag;
-               std::string device;
-               std::string type;
-               std::string mode;
-
-               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);
+       virtual void map_parameters (boost::function<void (std::string)>&) = 0;
+       virtual int set_state (XMLNode const &, int) = 0;
+       virtual XMLNode & get_state () = 0;
+       virtual XMLNode & get_variables () = 0;
+       virtual void set_variables (XMLNode const &) = 0;
 
-       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(); } \
-        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(); } \
-        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 */
-
-#undef  CONFIG_VARIABLE
-#undef  CONFIG_VARIABLE_SPECIAL        
-#define CONFIG_VARIABLE(Type,var,name,value) ConfigVariable<Type> var;
-#define CONFIG_VARIABLE_SPECIAL(Type,var,name,value,mutator) ConfigVariableWithMutation<Type> var;
-#include "ardour/configuration_vars.h"
-#undef  CONFIG_VARIABLE
-#undef  CONFIG_VARIABLE_SPECIAL        
-
-       ConfigVariableBase::Owner current_owner;
-       XMLNode* _control_protocol_state;
-
-       XMLNode& state (sigc::slot<bool,ConfigVariableBase::Owner>);
-       bool     save_config_options_predicate (ConfigVariableBase::Owner owner);
+       PBD::Signal1<void,std::string> ParameterChanged;
 };
 
-extern Configuration *Config;
-extern gain_t speed_quietning; /* see comment in configuration.cc */
-
 } // namespace ARDOUR
 
 #endif /* __ardour_configuration_h__ */