save version string with session for informational purposes
[ardour.git] / libs / ardour / ardour / parameter_descriptor.h
index 379d97ef3e190a4f36c6e25b365fe9b319bc1dbd..9d219d17afffb0b45611cda54ef2747a8dc8ee3b 100644 (file)
 #ifndef __ardour_parameter_descriptor_h__
 #define __ardour_parameter_descriptor_h__
 
+#include "ardour/types.h"
 #include "ardour/variant.h"
+
 #include "evoral/Parameter.hpp"
+#include "evoral/ParameterDescriptor.hpp"
 
 namespace ARDOUR {
 
@@ -31,89 +34,33 @@ typedef std::map<const std::string, const float> ScalePoints;
  *
  * Essentially a union of LADSPA, VST and LV2 info.
  */
-struct ParameterDescriptor
+struct LIBARDOUR_API ParameterDescriptor : public Evoral::ParameterDescriptor
 {
        enum Unit {
                NONE,       ///< No unit
                DB,         ///< Decibels
                MIDI_NOTE,  ///< MIDI note number
+               HZ,         ///< Frequency in Hertz
        };
 
-       ParameterDescriptor(const Evoral::Parameter& parameter)
-               : key((uint32_t)-1)
-               , datatype(Variant::VOID)
-               , normal(parameter.normal())
-               , lower(parameter.min())
-               , upper(parameter.max())
-               , step((upper - lower) / 100.0f)
-               , smallstep((upper - lower) / 1000.0f)
-               , largestep((upper - lower) / 10.0f)
-               , integer_step(parameter.type() >= MidiCCAutomation &&
-                              parameter.type() <= MidiChannelPressureAutomation)
-               , toggled(parameter.toggled())
-               , logarithmic(false)
-               , sr_dependent(false)
-               , min_unbound(0)
-               , max_unbound(0)
-               , enumeration(false)
-       {
-               if (parameter.type() == GainAutomation) {
-                       unit = DB;
-               }
-       }
-
-       ParameterDescriptor()
-               : key((uint32_t)-1)
-               , datatype(Variant::VOID)
-               , normal(0)
-               , lower(0)
-               , upper(0)
-               , step(0)
-               , smallstep(0)
-               , largestep(0)
-               , integer_step(false)
-               , toggled(false)
-               , logarithmic(false)
-               , sr_dependent(false)
-               , min_unbound(0)
-               , max_unbound(0)
-               , enumeration(false)
-       {}
-
-       /// Set step, smallstep, and largestep, based on current description
-       void update_steps() {
-               if (unit == ParameterDescriptor::MIDI_NOTE) {
-                       step      = smallstep = 1;  // semitone
-                       largestep = 12;             // octave
-               } else {
-                       const float delta = upper - lower;
+       ParameterDescriptor(const Evoral::Parameter& parameter);
 
-                       step      = delta / 1000.0f;
-                       smallstep = delta / 10000.0f;
-                       largestep = delta / 10.0f;
+       ParameterDescriptor();
 
-                       if (integer_step) {
-                               step      = rint(step);
-                               largestep = rint(largestep);
-                               // leave smallstep alone for fine tuning
-                       }
-               }
-       }
+       /** Set step, smallstep, and largestep, based on current description. */
+       void update_steps();
 
        std::string                    label;
        std::string                    print_fmt;  ///< format string for pretty printing
        boost::shared_ptr<ScalePoints> scale_points;
        uint32_t                       key;  ///< for properties
        Variant::Type                  datatype;  ///< for properties
+       AutomationType                 type;
        Unit                           unit;
-       float                          normal;
-       float                          lower;  ///< for frequencies, this is in Hz (not a fraction of the sample rate)
-       float                          upper;  ///< for frequencies, this is in Hz (not a fraction of the sample rate)
        float                          step;
        float                          smallstep;
        float                          largestep;
        bool                           integer_step;
-       bool                           toggled;
        bool                           logarithmic;
        bool                           sr_dependent;
        bool                           min_unbound;