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 ();
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);
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 ();
AudioTrack::_set_state (const XMLNode& node, int version)
{
const XMLProperty *prop;
- XMLNodeConstIterator iter;
- XMLNode *child;
if (Track::_set_state (node, version)) {
return -1;
_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) {
}
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;
}
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));
+}
MidiTrack::_set_state (const XMLNode& node, int version)
{
const XMLProperty *prop;
- XMLNodeConstIterator iter;
if (Track::_set_state (node, version)) {
return -1;
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) {
}
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));
}
}
+boost::shared_ptr<Diskstream>
+MidiTrack::diskstream_factory (XMLNode const & node)
+{
+ return boost::shared_ptr<Diskstream> (new MidiDiskstream (_session, node));
+}
{
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;
}
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) {