summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_streamview.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-19 07:00:43 +0000
committerDavid Robillard <d@drobilla.net>2013-01-19 07:00:43 +0000
commitfc77ae0738565770abde1a25f650a035cf082af0 (patch)
treef4edb7bcdcddf186fcf5cf4fb033e602580e4008 /gtk2_ardour/midi_streamview.cc
parentd251c68d7676a18ab9ed935e22558e2b18981b41 (diff)
Replace a bunch of potential crashes with graceful handling of the situation.
We really need some kind of more sophisticated assert macro that can be switched to non-fatal logging mode for release builds. A log message, which is often all that would happen, is a lot better than a trainwrecked performance... git-svn-id: svn://localhost/ardour2/branches/3.0@13892 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_streamview.cc')
-rw-r--r--gtk2_ardour/midi_streamview.cc43
1 files changed, 22 insertions, 21 deletions
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 843ca1bfc2..90e6147763 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -17,7 +17,6 @@
*/
#include <cmath>
-#include <cassert>
#include <utility>
#include <gtkmm.h>
@@ -49,6 +48,8 @@
#include "simplerect.h"
#include "utils.h"
+#include "i18n.h"
+
using namespace std;
using namespace ARDOUR;
using namespace PBD;
@@ -400,7 +401,6 @@ MidiStreamView::apply_note_range_to_regions ()
void
MidiStreamView::update_note_range(uint8_t note_num)
{
- assert(note_num <= 127);
_data_note_min = min(_data_note_min, note_num);
_data_note_max = max(_data_note_max, note_num);
}
@@ -461,21 +461,23 @@ MidiStreamView::setup_rec_box ()
boost::shared_ptr<MidiRegion> region (boost::dynamic_pointer_cast<MidiRegion>
(RegionFactory::create (sources, plist, false)));
-
- assert(region);
- region->set_start (_trackview.track()->current_capture_start() - _trackview.track()->get_capture_start_frame (0));
- region->set_position (_trackview.track()->current_capture_start());
- RegionView* rv = add_region_view_internal (region, false);
- MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
- mrv->begin_write ();
-
- rec_regions.push_back (make_pair (region, rv));
-
- // rec regions are destroyed in setup_rec_box
-
- /* we add the region later */
-
- setup_new_rec_layer_time (region);
+ if (region) {
+ region->set_start (_trackview.track()->current_capture_start()
+ - _trackview.track()->get_capture_start_frame (0));
+ region->set_position (_trackview.track()->current_capture_start());
+ RegionView* rv = add_region_view_internal (region, false);
+ MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv);
+ mrv->begin_write ();
+
+
+ /* rec region will be destroyed in setup_rec_box */
+ rec_regions.push_back (make_pair (region, rv));
+
+ /* we add the region later */
+ setup_new_rec_layer_time (region);
+ } else {
+ error << _("failed to create MIDI region") << endmsg;
+ }
}
/* start a new rec box */
@@ -486,8 +488,6 @@ MidiStreamView::setup_rec_box ()
gdouble const xend = xstart;
uint32_t fill_color;
- assert(_trackview.midi_track()->mode() == Normal);
-
fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
ArdourCanvas::SimpleRect * rec_rect = new Gnome::Canvas::SimpleRect (*_canvas_group);
@@ -661,7 +661,8 @@ MidiStreamView::leave_internal_edit_mode ()
StreamView::leave_internal_edit_mode ();
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*i);
- assert (mrv);
- mrv->clear_selection ();
+ if (mrv) {
+ mrv->clear_selection ();
+ }
}
}