Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <cassert>
#include <cmath>
#include <list>
#include <utility>
#include "rgb_macros.h"
#include "selection.h"
+#include "i18n.h"
+
using namespace std;
using namespace ARDOUR;
using namespace ARDOUR_UI_UTILS;
RegionView*
AutomationStreamView::add_region_view_internal (boost::shared_ptr<Region> region, bool wait_for_data, bool /*recording*/)
{
- assert (region);
+ if (!region) {
+ return 0;
+ }
if (wait_for_data) {
boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(region);
if (mr) {
- mr->midi_source()->load_model();
+ Source::Lock lock(mr->midi_source()->mutex());
+ mr->midi_source()->load_model(lock);
}
}
boost::shared_ptr<AutomationList> list;
if (control) {
list = boost::dynamic_pointer_cast<AutomationList>(control->list());
- assert(!control->list() || list);
+ if (control->list() && !list) {
+ error << _("unable to display automation region for control without list") << endmsg;
+ return 0;
+ }
}
AutomationRegionView *region_view;
* confusing.
*/
void
-AutomationStreamView::get_selectables (framepos_t start, framepos_t end, double botfrac, double topfrac, list<Selectable*>& results)
+AutomationStreamView::get_selectables (framepos_t start, framepos_t end, double botfrac, double topfrac, list<Selectable*>& results, bool /*within*/)
{
- if (!_trackview.editor().internal_editing()) {
- return; // TODO: selection of automation regions
- }
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
- assert (arv);
- arv->line()->get_selectables (start, end, botfrac, topfrac, results);
+ if (arv) {
+ arv->line()->get_selectables (start, end, botfrac, topfrac, results);
+ }
}
}
for (list<RegionView*>::const_iterator i = region_views.begin(); i != region_views.end(); ++i) {
AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
- assert (arv);
- lines.push_back (arv->line());
+ if (arv) {
+ lines.push_back (arv->line());
+ }
}
return lines;
}
-struct RegionPositionSorter {
- bool operator() (RegionView* a, RegionView* b) {
- return a->region()->position() < b->region()->position();
- }
-};
-
-
bool
AutomationStreamView::paste (framepos_t pos,
unsigned paste_count,
return false;
}
- region_views.sort (RegionPositionSorter ());
+ region_views.sort (RegionView::PositionOrder());
list<RegionView*>::const_iterator prev = region_views.begin ();