From cbf530b6b57e391e28f148e8805da817c97c9d1d Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 4 Mar 2011 17:35:02 +0000 Subject: Make speaker dialogue manage the session's Speakers. Make azimuth control work. Various tweaks. git-svn-id: svn://localhost/ardour2/branches/3.0@9073 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/speaker.h | 6 ++++++ libs/ardour/speakers.cc | 30 +++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/speaker.h b/libs/ardour/ardour/speaker.h index 8bf1556936..7387a03c38 100644 --- a/libs/ardour/ardour/speaker.h +++ b/libs/ardour/ardour/speaker.h @@ -20,12 +20,15 @@ #define __libardour_speaker_h__ #include "pbd/cartesian.h" +#include "pbd/signals.h" namespace ARDOUR { class Speaker { public: Speaker (int, const PBD::AngularVector& position); + Speaker (const Speaker &); + Speaker& operator= (const Speaker &); void move (const PBD::AngularVector& new_position); @@ -34,6 +37,9 @@ public: int id; + /** emitted when this speaker's position has changed */ + PBD::Signal0 PositionChanged; + private: PBD::CartesianVector _coords; PBD::AngularVector _angles; diff --git a/libs/ardour/speakers.cc b/libs/ardour/speakers.cc index 0120e56bfa..4bb843021c 100644 --- a/libs/ardour/speakers.cc +++ b/libs/ardour/speakers.cc @@ -35,11 +35,35 @@ Speaker::Speaker (int i, const AngularVector& position) move (position); } +Speaker::Speaker (Speaker const & o) + : id (o.id) + , _coords (o._coords) + , _angles (o._angles) +{ + +} + +Speaker & +Speaker::operator= (Speaker const & o) +{ + if (&o == this) { + return *this; + } + + id = o.id; + _coords = o._coords; + _angles = o._angles; + + return *this; +} + void Speaker::move (const AngularVector& new_position) { _angles = new_position; _angles.cartesian (_coords); + + PositionChanged (); /* EMIT SIGNAL */ } Speakers::Speakers () @@ -100,12 +124,12 @@ Speakers::add_speaker (const AngularVector& position) void Speakers::remove_speaker (int id) { - for (vector::iterator i = _speakers.begin(); i != _speakers.end(); ) { - if ((*i).id == id) { + for (vector::iterator i = _speakers.begin(); i != _speakers.end(); ++i) { + if (i->id == id) { i = _speakers.erase (i); update (); break; - } + } } } -- cgit v1.2.3