fixes for 98% of all the warnings/errors reported by OS X gcc on tiger
[ardour.git] / libs / ardour / speakers.cc
index 4229e77c658d1e6ca945f6d2dad9c6380ea30a42..51bae165852a61e37552beb8d1033a7e0e03fecd 100644 (file)
@@ -35,26 +35,65 @@ 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 ()
 {
 }
 
+Speakers::Speakers (const Speakers& s)
+       : Stateful ()
+{
+        _speakers = s._speakers;
+}
+
 Speakers::~Speakers ()
 {
 }
 
+Speakers&
+Speakers::operator= (const Speakers& s)
+{
+        if (&s != this) {
+                _speakers = s._speakers;
+        }
+        return *this;
+}
+
 void
 Speakers::dump_speakers (ostream& o)
 {
        for (vector<Speaker>::iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
-               o << "Speaker " << (*i).id << " @ " 
+               o << "Speaker " << (*i).id << " @ "
                  << (*i).coords().x << ", " << (*i).coords().y << ", " << (*i).coords().z
                  << " azimuth " << (*i).angles().azi
                  << " elevation " << (*i).angles().ele
@@ -70,31 +109,28 @@ Speakers::clear_speakers ()
        update ();
 }
 
-int 
+int
 Speakers::add_speaker (const AngularVector& position)
 {
        int id = _speakers.size();
 
-       cerr << "Added speaker " << id << " at " << position.azi << " /= " << position.ele << endl;
-
        _speakers.push_back (Speaker (id, position));
        update ();
 
-       dump_speakers (cerr);
        Changed ();
 
        return id;
-}        
+}
 
 void
 Speakers::remove_speaker (int id)
 {
-       for (vector<Speaker>::iterator i = _speakers.begin(); i != _speakers.end(); ) {
-               if ((*i).id == id) {
+       for (vector<Speaker>::iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
+               if (i->id == id) {
                        i = _speakers.erase (i);
                        update ();
                        break;
-               } 
+               }
        }
 }
 
@@ -141,7 +177,7 @@ Speakers::setup_default_speakers (uint32_t n)
                 add_speaker (AngularVector (215.0, 0.0));
                break;
 
-       default: 
+       default:
        {
                double degree_step = 360.0 / n;
                double deg;
@@ -162,7 +198,7 @@ Speakers::setup_default_speakers (uint32_t n)
        }
         }
 }
-        
+
 XMLNode&
 Speakers::get_state ()
 {
@@ -182,7 +218,7 @@ Speakers::get_state ()
 
                 node->add_child_nocopy (*speaker);
         }
-        
+
         return *node;
 }
 
@@ -210,7 +246,7 @@ Speakers::set_state (const XMLNode& node, int /*version*/)
                                 continue;
                         }
                         e = atof (prop->value());
-                                            
+
                         if ((prop = (*i)->property (X_("distance"))) == 0) {
                                 warning << _("Speaker information is missing distance - speaker ignored") << endmsg;
                                 continue;
@@ -222,6 +258,6 @@ Speakers::set_state (const XMLNode& node, int /*version*/)
         }
 
         update ();
-        
+
         return 0;
 }