X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fevoral%2Fevoral%2FControl.hpp;h=25a313f9c39980517f6f0a4825dbe4ba39407000;hb=63b909211d8a0f736da61d472a96700065d9c589;hp=d79ef25b5a1c1238d165b6f222168f5d67d90abd;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/evoral/evoral/Control.hpp b/libs/evoral/evoral/Control.hpp index d79ef25b5a..25a313f9c3 100644 --- a/libs/evoral/evoral/Control.hpp +++ b/libs/evoral/evoral/Control.hpp @@ -1,19 +1,21 @@ -/* This file is part of Evoral. - * Copyright (C) 2008 Dave Robillard - * Copyright (C) 2000-2008 Paul Davis +/* + * Copyright (C) 2008-2014 David Robillard + * Copyright (C) 2010-2012 Carl Hetherington + * Copyright (C) 2010-2013 Paul Davis * - * Evoral 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 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. * - * Evoral 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 details. + * 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., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef EVORAL_CONTROL_HPP @@ -22,23 +24,36 @@ #include #include #include -#include "evoral/types.hpp" +#include "pbd/signals.h" + +#include "evoral/visibility.h" #include "evoral/Parameter.hpp" +#include "evoral/ParameterDescriptor.hpp" namespace Evoral { class ControlList; +class ParameterDescriptor; class Transport; +class TypeMap; -class Control +/** Base class representing some kind of (automatable) control; a fader's gain, + * for example, or a compressor plugin's threshold. + * + * The class knows the Evoral::Parameter that it is controlling, and has + * a list of values for automation. + */ +class LIBEVORAL_API Control { public: - Control(const Parameter& parameter, boost::shared_ptr); - virtual ~Control() {} + Control(const Parameter& parameter, + const ParameterDescriptor& desc, + boost::shared_ptr list); - virtual void set_float(float val, bool to_list=false, FrameTime frame=0); - virtual float get_float(bool from_list=false, FrameTime frame=0) const; + virtual ~Control() {} + virtual void set_double (double val, double frame=0, bool to_list=false); + virtual double get_double (bool from_list=false, double frame=0) const; /** Get the latest user-set value * (which may not equal get_value() when automation is playing back). @@ -46,7 +61,7 @@ public: * Automation write/touch works by periodically sampling this value * and adding it to the ControlList. */ - float user_float() const { return _user_value; } + double user_double() const { return _user_value; } void set_list(boost::shared_ptr); @@ -55,10 +70,17 @@ public: inline const Parameter& parameter() const { return _parameter; } + /** Emitted when the our ControlList is marked dirty */ + PBD::Signal0 ListMarkedDirty; + protected: Parameter _parameter; boost::shared_ptr _list; - float _user_value; + double _user_value; + PBD::ScopedConnection _list_marked_dirty_connection; + +private: + void list_marked_dirty (); }; } // namespace Evoral