~ubuntu-branches/ubuntu/utopic/ardour3/utopic

« back to all changes in this revision

Viewing changes to libs/evoral/evoral/Control.hpp

  • Committer: Package Import Robot
  • Author(s): Felipe Sateler
  • Date: 2013-09-21 19:05:02 UTC
  • Revision ID: package-import@ubuntu.com-20130921190502-8gsftrku6jnzhd7v
Tags: upstream-3.4~dfsg
ImportĀ upstreamĀ versionĀ 3.4~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of Evoral.
 
2
 * Copyright (C) 2008 David Robillard <http://drobilla.net>
 
3
 * Copyright (C) 2000-2008 Paul Davis
 
4
 *
 
5
 * Evoral is free software; you can redistribute it and/or modify it under the
 
6
 * terms of the GNU General Public License as published by the Free Software
 
7
 * Foundation; either version 2 of the License, or (at your option) any later
 
8
 * version.
 
9
 *
 
10
 * Evoral is distributed in the hope that it will be useful, but WITHOUT ANY
 
11
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 
12
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License along
 
15
 * with this program; if not, write to the Free Software Foundation, Inc.,
 
16
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
17
 */
 
18
 
 
19
#ifndef EVORAL_CONTROL_HPP
 
20
#define EVORAL_CONTROL_HPP
 
21
 
 
22
#include <set>
 
23
#include <map>
 
24
#include <boost/shared_ptr.hpp>
 
25
#include "pbd/signals.h"
 
26
#include "evoral/types.hpp"
 
27
#include "evoral/Parameter.hpp"
 
28
 
 
29
namespace Evoral {
 
30
 
 
31
class ControlList;
 
32
class Transport;
 
33
 
 
34
/** Base class representing some kind of (automatable) control; a fader's gain,
 
35
 *  for example, or a compressor plugin's threshold.
 
36
 *
 
37
 *  The class knows the Evoral::Parameter that it is controlling, and has
 
38
 *  a list of values for automation.
 
39
 */
 
40
 
 
41
class Control
 
42
{
 
43
public:
 
44
        Control(const Parameter& parameter, boost::shared_ptr<ControlList>);
 
45
        virtual ~Control() {}
 
46
 
 
47
        virtual void   set_double (double val, double frame=0, bool to_list=false);
 
48
        virtual double get_double (bool from_list=false, double frame=0) const;
 
49
 
 
50
        /** Get the latest user-set value
 
51
         * (which may not equal get_value() when automation is playing back).
 
52
         *
 
53
         * Automation write/touch works by periodically sampling this value
 
54
         * and adding it to the ControlList.
 
55
         */
 
56
        double user_double() const { return _user_value; }
 
57
 
 
58
        void set_list(boost::shared_ptr<ControlList>);
 
59
 
 
60
        boost::shared_ptr<ControlList>       list()       { return _list; }
 
61
        boost::shared_ptr<const ControlList> list() const { return _list; }
 
62
 
 
63
        inline const Parameter& parameter() const { return _parameter; }
 
64
 
 
65
        /** Emitted when the our ControlList is marked dirty */
 
66
        PBD::Signal0<void> ListMarkedDirty;
 
67
 
 
68
protected:
 
69
        Parameter                      _parameter;
 
70
        boost::shared_ptr<ControlList> _list;
 
71
        double                         _user_value;
 
72
        PBD::ScopedConnection          _list_marked_dirty_connection;
 
73
 
 
74
private:
 
75
        void list_marked_dirty ();
 
76
};
 
77
 
 
78
} // namespace Evoral
 
79
 
 
80
#endif // EVORAL_CONTROL_HPP