+void
+MidiTrack::set_step_editing (bool yn)
+{
+ if (_session.record_status() != Session::Disabled) {
+ return;
+ }
+
+ if (yn != _step_editing) {
+ _step_editing = yn;
+ StepEditStatusChange (yn);
+ }
+}
+
+void
+MidiTrack::set_midi_thru (bool yn)
+{
+ _midi_thru = yn;
+}
+
+boost::shared_ptr<SMFSource>
+MidiTrack::write_source (uint32_t)
+{
+ return midi_diskstream()->write_source ();
+}
+
+void
+MidiTrack::set_channel_mode (ChannelMode mode, uint16_t mask)
+{
+ midi_diskstream()->set_channel_mode (mode, mask);
+}
+
+ChannelMode
+MidiTrack::get_channel_mode ()
+{
+ return midi_diskstream()->get_channel_mode ();
+}
+
+uint16_t
+MidiTrack::get_channel_mask ()
+{
+ return midi_diskstream()->get_channel_mask ();
+}
+
+boost::shared_ptr<MidiPlaylist>
+MidiTrack::midi_playlist ()
+{
+ return midi_diskstream()->midi_playlist ();
+}
+
+void
+MidiTrack::diskstream_data_recorded (boost::weak_ptr<MidiSource> src)
+{
+ DataRecorded (src); /* EMIT SIGNAL */
+}
+
+bool
+MidiTrack::should_monitor () const
+{
+ return true;
+}
+
+bool
+MidiTrack::send_silence () const
+{
+ return false;
+}
+
+bool
+MidiTrack::input_active () const
+{
+ return _input_active;
+}
+
+void
+MidiTrack::set_input_active (bool yn)
+{
+ if (yn != _input_active) {
+ _input_active = yn;
+ map_input_active (yn);
+ InputActiveChanged (); /* EMIT SIGNAL */
+ }
+}
+
+void
+MidiTrack::map_input_active (bool yn)
+{
+ if (!_input) {
+ return;
+ }
+
+ PortSet& ports (_input->ports());
+
+ for (PortSet::iterator p = ports.begin(DataType::MIDI); p != ports.end(DataType::MIDI); ++p) {
+ boost::shared_ptr<MidiPort> mp = boost::dynamic_pointer_cast<MidiPort> (*p);
+ if (yn != mp->input_active()) {
+ mp->set_input_active (yn);
+ }
+ }
+}
+
+void
+MidiTrack::track_input_active (IOChange change, void* /* src */)
+{
+ if (change.type & IOChange::ConfigurationChanged) {
+ map_input_active (_input_active);
+ }
+}
+
+boost::shared_ptr<Diskstream>
+MidiTrack::diskstream_factory (XMLNode const & node)
+{
+ return boost::shared_ptr<Diskstream> (new MidiDiskstream (_session, node));
+}
+
+boost::shared_ptr<MidiBuffer>
+MidiTrack::get_gui_feed_buffer () const
+{
+ return midi_diskstream()->get_gui_feed_buffer ();
+}