Remove cruft
[ardour.git] / gtk2_ardour / midi_streamview.cc
index d1a479d28c9700875d86ae4e3a69e16a83e3989d..5e2f05558297e484f92c70cb57dfe904f77aae64 100644 (file)
@@ -33,6 +33,7 @@
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
 #include "ardour/smf_source.h"
+#include "ardour/evoral_types_convert.h"
 
 #include "gui_thread.h"
 #include "midi_region_view.h"
@@ -47,7 +48,7 @@
 #include "ui_config.h"
 #include "utils.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -75,7 +76,7 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
           can be put below ghost regions from MIDI underlays
        */
        _note_lines = new ArdourCanvas::LineSet (_canvas_group, ArdourCanvas::LineSet::Horizontal);
-       
+
        _note_lines->Event.connect(
                sigc::bind(sigc::mem_fun(_trackview.editor(),
                                         &PublicEditor::canvas_stream_view_event),
@@ -242,6 +243,18 @@ MidiStreamView::update_data_note_range(uint8_t min, uint8_t max)
        return dirty;
 }
 
+void
+MidiStreamView::set_layer_display (LayerDisplay d)
+{
+
+//revert this change for now.  Although stacked view is weirdly implemented wrt the "scroomer", it is still necessary to manage layered midi regions.
+//     if (d != Overlaid) {
+//             return;
+//     }
+
+       StreamView::set_layer_display (d);
+}
+
 void
 MidiStreamView::redisplay_track ()
 {
@@ -345,8 +358,8 @@ MidiStreamView::draw_note_lines()
 
                double h = y - prev_y;
                double mid = y + (h/2.0);
-                               
-               if (height > 1.0) { // XXX ? should that not be h >= 1 ?
+
+               if (mid >= 0 && h > 1.0) {
                        _note_lines->add (mid, h, color);
                }
 
@@ -436,11 +449,11 @@ MidiStreamView::setup_rec_box ()
 {
        // cerr << _trackview.name() << " streamview SRB\n";
 
-       if (_trackview.session()->transport_rolling()) {
+       if (!_trackview.session()->transport_stopped()) {
 
                if (!rec_active &&
                    _trackview.session()->record_status() == Session::Recording &&
-                   _trackview.track()->record_enabled()) {
+                   _trackview.track()->rec_enable_control()->get_value()) {
 
                        if (UIConfiguration::instance().get_show_waveforms_while_recording() && rec_regions.size() == rec_rects.size()) {
 
@@ -454,10 +467,10 @@ MidiStreamView::setup_rec_box ()
 
                                // handle multi
 
-                               framepos_t start = 0;
+                               samplepos_t start = 0;
                                if (rec_regions.size() > 0) {
                                        start = rec_regions.back().first->start()
-                                               + _trackview.track()->get_captured_frames(rec_regions.size()-1);
+                                               + _trackview.track()->get_captured_samples(rec_regions.size()-1);
                                }
 
                                if (!rec_regions.empty()) {
@@ -473,10 +486,10 @@ MidiStreamView::setup_rec_box ()
                                   is so that the RegionView gets created with a non-zero width, as apparently
                                   creating a RegionView with a zero width causes it never to be displayed
                                   (there is a warning in TimeAxisViewItem::init about this).  However, we
-                                  must also set length_beats to something non-zero, otherwise the frame length
+                                  must also set length_beats to something non-zero, otherwise the sample length
                                   of 1 causes length_beats to be set to some small quantity << 1.  Then
                                   when the position is set up below, this length_beats is used to recompute
-                                  length using BeatsFramesConverter::to, which is slightly innacurate for small
+                                  length using BeatsSamplesConverter::to, which is slightly innacurate for small
                                   beats values because it converts floating point beats to bars, beats and
                                   integer ticks.  The upshot of which being that length gets set back to 0,
                                   meaning no region view is ever seen, meaning no MIDI notes during record (#3820).
@@ -489,8 +502,8 @@ MidiStreamView::setup_rec_box ()
                                                                      (RegionFactory::create (sources, plist, false)));
                                if (region) {
                                        region->set_start (_trackview.track()->current_capture_start()
-                                                          - _trackview.track()->get_capture_start_frame (0));
-                                       region->set_position (_trackview.session()->transport_frame());
+                                                          - _trackview.track()->get_capture_start_sample (0));
+                                       region->set_position (_trackview.session()->transport_sample());
 
                                        RegionView* rv = add_region_view_internal (region, false, true);
                                        MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
@@ -512,7 +525,7 @@ MidiStreamView::setup_rec_box ()
 
                } else if (rec_active &&
                           (_trackview.session()->record_status() != Session::Recording ||
-                           !_trackview.track()->record_enabled())) {
+                           !_trackview.track()->rec_enable_control()->get_value())) {
                        screen_update_connection.disconnect();
                        rec_active = false;
                        rec_updating = false;
@@ -610,7 +623,7 @@ MidiStreamView::update_rec_box ()
 
        /* Update the region being recorded to reflect where we currently are */
        boost::shared_ptr<ARDOUR::Region> region = rec_regions.back().first;
-       region->set_length (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start());
+       region->set_length (_trackview.track()->current_capture_end () - _trackview.track()->current_capture_start(), 0);
 
        MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rec_regions.back().second);
        mrv->extend_active_notes ();
@@ -619,7 +632,7 @@ MidiStreamView::update_rec_box ()
 uint8_t
 MidiStreamView::y_to_note (double y) const
 {
-       int const n = ((contents_height() - y - 1) / contents_height() * (double)contents_note_range())
+       int const n = ((contents_height() - y) / contents_height() * (double)contents_note_range())
                + lowest_note();
 
        if (n < 0) {
@@ -628,7 +641,8 @@ MidiStreamView::y_to_note (double y) const
                return 127;
        }
 
-       return n;
+       /* min due to rounding and/or off-by-one errors */
+       return min ((uint8_t) n, highest_note());
 }
 
 /** Suspend updates to the regions' note ranges and our
@@ -647,7 +661,7 @@ void
 MidiStreamView::resume_updates ()
 {
        _updates_suspended = false;
-       
+
        draw_note_lines ();
        apply_note_range_to_regions ();
 
@@ -661,7 +675,7 @@ struct RegionPositionSorter {
 };
 
 bool
-MidiStreamView::paste (ARDOUR::framepos_t pos, const Selection& selection, PasteContext& ctx)
+MidiStreamView::paste (ARDOUR::samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num)
 {
        /* Paste into the first region which starts on or before pos.  Only called when
           using an internal editing tool. */
@@ -689,5 +703,5 @@ MidiStreamView::paste (ARDOUR::framepos_t pos, const Selection& selection, Paste
        }
 
        MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*prev);
-       return mrv ? mrv->paste(pos, selection, ctx) : false;
+       return mrv ? mrv->paste(pos, selection, ctx, sub_num) : false;
 }