save&restore for track monitor state
[ardour.git] / libs / ardour / track.cc
index b21a02b4902372c3abc4e4cb612ce3c6d6ebbd5c..fdb1665a31112b59beadf4bc3ef4c447a15ec67c 100644 (file)
@@ -64,13 +64,46 @@ Track::init ()
 
         return 0;
 }
+
 XMLNode&
 Track::get_state ()
 {
        return state (true);
 }
 
+XMLNode&
+Track::state (bool full)
+{
+       XMLNode& root (Route::state (full));
+       root.add_property (X_("monitoring"), enum_2_string (_monitoring));
+       return root;
+}      
+
+int
+Track::set_state (const XMLNode& node, int version)
+{
+       return _set_state (node, version, true);
+}
+
+int
+Track::_set_state (const XMLNode& node, int version, bool call_base)
+{
+       if (call_base) {
+               if (Route::_set_state (node, version, call_base)) {
+                       return -1;
+               }
+       }
+
+       const XMLProperty* prop;
 
+       if ((prop = node.property (X_("monitoring"))) != 0) {
+               _monitoring = MonitorChoice (string_2_enum (prop->value(), _monitoring));
+       } else {
+               _monitoring = MonitorAuto;
+       }
+
+       return 0;
+}
 
 XMLNode&
 Track::get_template ()
@@ -665,7 +698,8 @@ Track::send_silence () const
                 */
                
                 if ((Config->get_monitoring_model() == SoftwareMonitoring)
-                    && (!(_monitoring & MonitorDisk) && (_session.config.get_auto_input () || _diskstream->record_enabled()))) {
+                    && ((_monitoring & MonitorInput) || 
+                       (!(_monitoring & MonitorDisk) && (_session.config.get_auto_input () || _diskstream->record_enabled())))){
                         send_silence = false;
                 } else {
                         send_silence = true;
@@ -739,3 +773,13 @@ Track::set_monitoring (MonitorChoice mc)
                MonitoringChanged (); /* EMIT SIGNAL */
        }
 }
+
+bool
+Track::should_monitor_input () 
+{
+       return (_monitoring & MonitorInput) || 
+               (!(_monitoring & MonitorDisk) && 
+                (diskstream->record_enabled() && 
+                 !can_record && 
+                 !_session.config.get_auto_input()));
+}