summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/parameter_descriptor.h
blob: 8916f081a38be3c4cc3f9fc1683e4c6b62aee271 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
    Copyright (C) 2014 Paul Davis
    Author: David Robillard

    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 the Free
    Software Foundation; either version 2 of the License, or (at your option)
    any later version.

    This program is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef __ardour_parameter_descriptor_h__
#define __ardour_parameter_descriptor_h__

#include "ardour/variant.h"
#include "evoral/Parameter.hpp"

namespace ARDOUR {

typedef std::map<const std::string, const float> ScalePoints;

/** Descriptor of a parameter or control.
 *
 * Essentially a union of LADSPA, VST and LV2 info.
 */
struct ParameterDescriptor
{
	ParameterDescriptor(const Evoral::Parameter& parameter)
		: key((uint32_t)-1)
		, datatype(Variant::VOID)
		, normal(parameter.normal())
		, lower(parameter.min())
		, upper(parameter.max())
		, step(0)
		, smallstep((upper - lower) / 100.0)
		, largestep((upper - lower) / 10.0)
		, integer_step(false)
		, toggled(parameter.toggled())
		, logarithmic(false)
		, sr_dependent(false)
		, min_unbound(0)
		, max_unbound(0)
		, enumeration(false)
		, midinote(false)
	{}

	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)
		, midinote(false)
	{}

	std::string                    label;
	boost::shared_ptr<ScalePoints> scale_points;
	uint32_t                       key;  ///< for properties
	Variant::Type                  datatype;  ///< for properties
	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;
	bool                           max_unbound;
	bool                           enumeration;
	bool                           midinote;  ///< only used if integer_step is also true
};

} // namespace ARDOUR

#endif // __ardour_parameter_descriptor_h__