Remove unused variables.
[ardour.git] / libs / ardour / automation_list.cc
index 53fdb233c6b35f17887aece10c7860bee5e4fcf0..2e28bb8bb16bb82acd835b0af440ac0a406d3b52 100644 (file)
@@ -41,13 +41,12 @@ PBD::Signal1<void,AutomationList *> AutomationList::AutomationListCreated;
 static void dumpit (const AutomationList& al, string prefix = "")
 {
        cerr << prefix << &al << endl;
-       for (AutomationList::const_iterator i = al.const_begin(); i != al.const_end(); ++i) {
+       for (AutomationList::const_iterator i = al.begin(); i != al.end(); ++i) {
                cerr << prefix << '\t' << (*i)->when << ',' << (*i)->value << endl;
        }
        cerr << "\n";
 }
 #endif
-
 AutomationList::AutomationList (Evoral::Parameter id)
        : ControlList(id)
 {
@@ -125,7 +124,9 @@ AutomationList::create_curve_if_necessary()
 {
        switch (_parameter.type()) {
        case GainAutomation:
-       case PanAutomation:
+       case PanAzimuthAutomation:
+       case PanElevationAutomation:
+       case PanWidthAutomation:
        case FadeInAutomation:
        case FadeOutAutomation:
        case EnvelopeAutomation:
@@ -183,9 +184,8 @@ AutomationList::set_automation_state (AutoState s)
 
                 if (_state == Write) {
                         Glib::Mutex::Lock lm (ControlList::_lock);
-                        nascent.push_back (new NascentInfo (false));
+                        nascent.push_back (new NascentInfo ());
                 }
-
                automation_state_changed (s); /* EMIT SIGNAL */
        }
 }
@@ -204,7 +204,7 @@ AutomationList::start_touch (double when)
 {
         if (_state == Touch) {
                 Glib::Mutex::Lock lm (ControlList::_lock);
-                nascent.push_back (new NascentInfo (true, when));
+                nascent.push_back (new NascentInfo (when));
         }
 
        g_atomic_int_set (&_touching, 1);
@@ -213,19 +213,30 @@ AutomationList::start_touch (double when)
 void
 AutomationList::stop_touch (bool mark, double when)
 {
+       if (g_atomic_int_get (&_touching) == 0) {
+               /* this touch has already been stopped (probably by Automatable::transport_stopped),
+                  so we've nothing to do.
+               */
+               return;
+       }
+
        g_atomic_int_set (&_touching, 0);
 
         if (_state == Touch) {
+
+               assert (!nascent.empty ());
+
                 Glib::Mutex::Lock lm (ControlList::_lock);
-                
+
                 if (mark) {
-                        nascent.back()->end_time = when;
-                        
+
+                       nascent.back()->end_time = when;
+
                 } else {
-                        
+
                         /* nascent info created in start touch but never used. just get rid of it.
                          */
-                        
+
                         NascentInfo* ninfo = nascent.back ();
                         nascent.erase (nascent.begin());
                         delete ninfo;
@@ -259,7 +270,7 @@ AutomationList::state (bool full)
 
        root->add_property ("automation-id", EventTypeMap::instance().to_symbol(_parameter));
 
-       root->add_property ("id", _id.to_s());
+       root->add_property ("id", id().to_s());
 
        snprintf (buf, sizeof (buf), "%.12g", _default_value);
        root->add_property ("default", buf);
@@ -364,7 +375,7 @@ AutomationList::deserialize_events (const XMLNode& node)
        }
 
         thaw ();
-        
+
        return 0;
 }
 
@@ -393,7 +404,7 @@ AutomationList::set_state (const XMLNode& node, int version)
                const XMLNodeList& elist = node.children();
                XMLNodeConstIterator i;
                XMLProperty* prop;
-               nframes_t x;
+               pframes_t x;
                double y;
 
                 ControlList::freeze ();
@@ -426,8 +437,7 @@ AutomationList::set_state (const XMLNode& node, int version)
                return -1;
        }
 
-       if ((prop = node.property ("id")) != 0) {
-               _id = prop->value ();
+       if (set_id (node)) {
                /* update session AL list */
                AutomationListCreated(this);
        }
@@ -465,26 +475,26 @@ AutomationList::set_state (const XMLNode& node, int version)
                _state = Off;
        }
 
-       if ((prop = node.property (X_("min_yval"))) != 0) {
+       if ((prop = node.property (X_("min-yval"))) != 0) {
                _min_yval = atof (prop->value ().c_str());
        } else {
                _min_yval = FLT_MIN;
        }
 
-       if ((prop = node.property (X_("max_yval"))) != 0) {
+       if ((prop = node.property (X_("max-yval"))) != 0) {
                _max_yval = atof (prop->value ().c_str());
        } else {
                _max_yval = FLT_MAX;
        }
 
-       if ((prop = node.property (X_("max_xval"))) != 0) {
+       if ((prop = node.property (X_("max-xval"))) != 0) {
                _max_xval = atof (prop->value ().c_str());
        } else {
                _max_xval = 0; // means "no limit ;
        }
 
        bool have_events = false;
-       
+
        for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                if ((*niter)->name() == X_("events")) {
                        deserialize_events (*(*niter));