Optimize automation-event process splitting
[ardour.git] / libs / ardour / ardour / automation_watch.h
index db6474c062b1bb7e5d9bb55bd1701495fa032ae6..5c13184bc7d8c02ec232ad1b2c098e39f6488cc2 100644 (file)
     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_automation_watch_h__
+#define __ardour_automation_watch_h__
+
 #include <set>
 #include <boost/shared_ptr.hpp>
 #include <glibmm/threads.h>
 #include "pbd/signals.h"
 
 #include "ardour/session_handle.h"
+#include "ardour/types.h"
 
 namespace ARDOUR {
 
 class AutomationControl;
 
-class LIBARDOUR_API AutomationWatch : public sigc::trackable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList {
-  public:
-    static AutomationWatch& instance();
-
-    void add_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
-    void remove_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
-    void set_session (ARDOUR::Session*);
-
-    gint timer ();
-
-  private:
-    typedef std::set<boost::shared_ptr<ARDOUR::AutomationControl> > AutomationWatches;
-
-    AutomationWatch ();
-    ~AutomationWatch();
-
-    static AutomationWatch* _instance;
-    Glib::Threads::Thread*  _thread;
-    bool                    _run_thread;
-    AutomationWatches        automation_watches;
-    Glib::Threads::Mutex     automation_watch_lock;
-    PBD::ScopedConnection    transport_connection;
-
-    void transport_state_change ();
-    void remove_weak_automation_watch (boost::weak_ptr<ARDOUR::AutomationControl>);
-    void thread ();
+class LIBARDOUR_API AutomationWatch : public sigc::trackable, public ARDOUR::SessionHandlePtr
+{
+public:
+       static AutomationWatch& instance();
+
+       void add_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
+       void remove_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
+       void transport_stop_automation_watches (ARDOUR::samplepos_t);
+       void set_session (ARDOUR::Session*);
+
+       gint timer ();
+
+private:
+       typedef std::set<boost::shared_ptr<ARDOUR::AutomationControl> > AutomationWatches;
+       typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, PBD::ScopedConnection> AutomationConnection;
+
+       AutomationWatch ();
+       ~AutomationWatch();
+
+       static AutomationWatch* _instance;
+       Glib::Threads::Thread*  _thread;
+       samplepos_t              _last_time;
+       bool                    _run_thread;
+       AutomationWatches        automation_watches;
+       AutomationConnection     automation_connections;
+       Glib::Threads::Mutex     automation_watch_lock;
+       PBD::ScopedConnection    transport_connection;
+
+       void transport_state_change ();
+       void remove_weak_automation_watch (boost::weak_ptr<ARDOUR::AutomationControl>);
+       void thread ();
 };
 
-}
+} /* namespace */
+
+#endif // __ardour_automation_watch_h__