Move some code up from {Midi,Audio}Track to Track.
authorCarl Hetherington <carl@carlh.net>
Mon, 24 Oct 2011 22:54:25 +0000 (22:54 +0000)
committerCarl Hetherington <carl@carlh.net>
Mon, 24 Oct 2011 22:54:25 +0000 (22:54 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10303 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/audio_track.h
libs/ardour/ardour/midi_track.h
libs/ardour/ardour/track.h
libs/ardour/audio_track.cc
libs/ardour/midi_track.cc
libs/ardour/track.cc

index 01cbb633aea5c11d3b6e38a27c79d3c50be16363..978a346d11cf408c93013e0fa1db80d5e46e7fc8 100644 (file)
@@ -70,6 +70,9 @@ class AudioTrack : public Track
        int _set_state (const XMLNode&, int);
 
   private:
+
+       boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &);
+       
        int  deprecated_use_diskstream_connections ();
        void set_state_part_two ();
        void set_state_part_three ();
index 2337cdcbeda702ea279ea0ff61570a88e6a62295..3d1ef558dc2ae64701f7e04b0d194c68f1b0c096 100644 (file)
@@ -118,6 +118,9 @@ protected:
        bool send_silence () const;
 
   private:
+
+       virtual boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &);
+       
        boost::shared_ptr<MidiDiskstream> midi_diskstream () const;
 
        void write_out_of_band_data (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, framecnt_t nframes);
index 8f94625818596d85b250aa4fab13192664fc94c5..e3ee8929868e045d097af031fa4a7a8f59b8912a 100644 (file)
@@ -217,6 +217,9 @@ class Track : public Route, public PublicDiskstream
        framecnt_t check_initial_delay (framecnt_t nframes, framecnt_t&);
 
 private:
+
+       virtual boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &) = 0;
+       
        void diskstream_playlist_changed ();
        void diskstream_record_enable_changed ();
        void diskstream_speed_changed ();
index deefd45e89c6c0dd68aa576b04a483e898f60c90..304c6af25c0d6886c094ac340e304450b9a4776f 100644 (file)
@@ -208,8 +208,6 @@ int
 AudioTrack::_set_state (const XMLNode& node, int version)
 {
        const XMLProperty *prop;
-       XMLNodeConstIterator iter;
-       XMLNode *child;
 
        if (Track::_set_state (node, version)) {
                return -1;
@@ -221,32 +219,6 @@ AudioTrack::_set_state (const XMLNode& node, int version)
                _mode = Normal;
        }
 
-       if (version >= 3000) {
-               if ((child = find_named_node (node, X_("Diskstream"))) != 0) {
-                       boost::shared_ptr<AudioDiskstream> ds (new AudioDiskstream (_session, *child));
-                       ds->do_refill_with_alloc ();
-                       set_diskstream (ds);
-               }
-       }
-
-       /* set rec-enable control *AFTER* setting up diskstream, because it may want to operate
-          on the diskstream as it sets its own state
-       */
-
-       XMLNodeList nlist;
-       XMLNodeConstIterator niter;
-
-       nlist = node.children();
-       for (niter = nlist.begin(); niter != nlist.end(); ++niter){
-               child = *niter;
-
-               if (child->name() == Controllable::xml_node_name && (prop = child->property ("name")) != 0) {
-                       if (prop->value() == X_("recenable")) {
-                               _rec_enable_control->set_state (*child, version);
-                       }
-               }
-       }
-
        pending_state = const_cast<XMLNode*> (&node);
 
        if (_session.state_of_the_state() & Session::Loading) {
@@ -285,8 +257,6 @@ AudioTrack::state (bool full_state)
        }
 
        root.add_property (X_("mode"), enum_2_string (_mode));
-       root.add_child_nocopy (_rec_enable_control->get_state());
-       root.add_child_nocopy (_diskstream->get_state ());
 
        return root;
 }
@@ -729,4 +699,8 @@ AudioTrack::bounceable () const
        return n_inputs().n_audio() >= n_outputs().n_audio();
 }
 
-       
+boost::shared_ptr<Diskstream>
+AudioTrack::diskstream_factory (XMLNode const & node)
+{
+       return boost::shared_ptr<Diskstream> (new AudioDiskstream (_session, node));
+}
index 6821d9fec330f724f022161a0716e6737f77980b..469d9947682916ff5018e7ed48f0dd0d93ad145c 100644 (file)
@@ -143,7 +143,6 @@ int
 MidiTrack::_set_state (const XMLNode& node, int version)
 {
        const XMLProperty *prop;
-       XMLNodeConstIterator iter;
 
        if (Track::_set_state (node, version)) {
                return -1;
@@ -166,34 +165,6 @@ MidiTrack::_set_state (const XMLNode& node, int version)
                set_input_active (string_is_affirmative (prop->value()));
        }
 
-       XMLNodeList nlist;
-       XMLNodeConstIterator niter;
-       XMLNode *child;
-
-       nlist = node.children();
-
-       if (version >= 3000) {
-               if ((child = find_named_node (node, X_("Diskstream"))) != 0) {
-                       boost::shared_ptr<MidiDiskstream> ds (new MidiDiskstream (_session, *child));
-                       ds->do_refill_with_alloc ();
-                       set_diskstream (ds);
-               }
-       }
-
-       /* set rec-enable control *AFTER* setting up diskstream, because it may
-          want to operate on the diskstream as it sets its own state
-       */
-
-       for (niter = nlist.begin(); niter != nlist.end(); ++niter){
-               child = *niter;
-
-               if (child->name() == Controllable::xml_node_name && (prop = child->property ("name")) != 0) {
-                       if (prop->value() == X_("recenable")) {
-                               _rec_enable_control->set_state (*child, version);
-                       }
-               }
-       }
-
        pending_state = const_cast<XMLNode*> (&node);
 
        if (_session.state_of_the_state() & Session::Loading) {
@@ -233,8 +204,6 @@ MidiTrack::state(bool full_state)
        }
 
        root.add_property (X_("note-mode"), enum_2_string (_note_mode));
-       root.add_child_nocopy (_rec_enable_control->get_state());
-       root.add_child_nocopy (_diskstream->get_state ());
 
        root.add_property ("step-editing", (_step_editing ? "yes" : "no"));
        root.add_property ("note-mode", enum_2_string (_note_mode));
@@ -736,3 +705,8 @@ MidiTrack::track_input_active (IOChange change, void* /* src */)
        }
 }
 
+boost::shared_ptr<Diskstream>
+MidiTrack::diskstream_factory (XMLNode const & node)
+{
+       return boost::shared_ptr<Diskstream> (new MidiDiskstream (_session, node));
+}
index 493dac73f97dba511e9e63b573278fd370d248d6..549a54e010473905c209edfa55b89e43c93af65b 100644 (file)
@@ -76,6 +76,8 @@ Track::state (bool full)
 {
        XMLNode& root (Route::state (full));
        root.add_property (X_("monitoring"), enum_2_string (_monitoring));
+       root.add_child_nocopy (_rec_enable_control->get_state());
+       root.add_child_nocopy (_diskstream->get_state ());
        return root;
 }      
 
@@ -92,6 +94,32 @@ Track::_set_state (const XMLNode& node, int version)
                return -1;
        }
 
+       XMLNode* child;
+
+       if (version >= 3000) {
+               if ((child = find_named_node (node, X_("Diskstream"))) != 0) {
+                       boost::shared_ptr<Diskstream> ds = diskstream_factory (*child);
+                       ds->do_refill_with_alloc ();
+                       set_diskstream (ds);
+               }
+       }
+
+       /* set rec-enable control *AFTER* setting up diskstream, because it may
+          want to operate on the diskstream as it sets its own state
+       */
+
+       XMLNodeList nlist = node.children();
+       for (XMLNodeConstIterator niter = nlist.begin(); niter != nlist.end(); ++niter) {
+               child = *niter;
+
+               XMLProperty* prop;
+               if (child->name() == Controllable::xml_node_name && (prop = child->property ("name")) != 0) {
+                       if (prop->value() == X_("recenable")) {
+                               _rec_enable_control->set_state (*child, version);
+                       }
+               }
+       }
+       
        const XMLProperty* prop;
 
        if ((prop = node.property (X_("monitoring"))) != 0) {