prevent crash when deselecting track from mixer.
[ardour.git] / gtk2_ardour / route_sorter.h
index e84788243cfd474ce0c0317aaa960d3a036d146f..bf054b1ad4ab3f46d7512131588c7ddf78925d27 100644 (file)
 struct OrderKeys {
     uint32_t old_display_order;
     uint32_t new_display_order;
+    uint32_t compare_order;
+               boost::shared_ptr<ARDOUR::Stripable> stripable;
 
-       OrderKeys (uint32_t ok, uint32_t nk)
+       OrderKeys (uint32_t ok, boost::shared_ptr<ARDOUR::Stripable> s, uint32_t cmp_max)
                : old_display_order (ok)
-               , new_display_order (nk) {}
+               , stripable (s)
+       {
+               new_display_order = s->presentation_info().order();
+               compare_order = new_display_order;
+
+               if (s->presentation_info().flags () & ARDOUR::PresentationInfo::VCA) {
+                       compare_order += 2 * cmp_max;
+               }
+#ifdef MIXBUS
+               if (s->presentation_info().flags () & ARDOUR::PresentationInfo::Mixbus || s->mixbus()) {
+                       compare_order += cmp_max;
+               }
+               if (s->presentation_info().flags () & ARDOUR::PresentationInfo::MasterOut) {
+                       compare_order += 3 * cmp_max;
+               }
+#endif
+       }
 };
 
 typedef std::vector<OrderKeys> OrderingKeys;
 
 struct SortByNewDisplayOrder {
     bool operator() (const OrderKeys& a, const OrderKeys& b) {
-           return a.new_display_order < b.new_display_order;
+           return a.compare_order < b.compare_order;
     }
 };