make inclusion/exclusion of hidden children optional in Item::add_child_bounding_boxes
[ardour.git] / gtk2_ardour / editor_routes.cc
index e73160b4a2f1c604c53f8d1dbf615fc67418dc5c..6ea6a1d724a02bd6f806198c2603899d2c059ac7 100644 (file)
@@ -57,7 +57,7 @@
 #include "vca_time_axis.h"
 #include "utils.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -581,7 +581,6 @@ EditorRoutes::redisplay_real ()
 
        for (n = 0, position = 0, i = rows.begin(); i != rows.end(); ++i) {
                TimeAxisView *tv = (*i)[_columns.tv];
-               boost::shared_ptr<Stripable> route = (*i)[_columns.stripable];
 
                if (tv == 0) {
                        // just a "title" row
@@ -792,10 +791,16 @@ EditorRoutes::time_axis_views_added (list<TimeAxisView*> tavs)
 
                boost::weak_ptr<Stripable> ws (stripable);
 
-               if (rtav) {
-                       rtav->route()->gui_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2), gui_context());
-               }
+               /* for now, we need both of these. PropertyChanged covers on
+                * pre-defined, "global" things of interest to a
+                * UI. gui_changed covers arbitrary, un-enumerated, un-typed
+                * changes that may only be of interest to a particular
+                * UI (e.g. track-height is not of any relevant to OSC)
+                */
+
+               stripable->gui_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2), gui_context());
                stripable->PropertyChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::route_property_changed, this, _1, ws), gui_context());
+               stripable->presentation_info().PropertyChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::route_property_changed, this, _1, ws), gui_context());
 
                if (boost::dynamic_pointer_cast<Track> (stripable)) {
                        boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (stripable);
@@ -839,9 +844,12 @@ EditorRoutes::time_axis_views_added (list<TimeAxisView*> tavs)
        _display.set_model (_model);
 
        /* now update route order keys from the treeview/track display order */
+
        if (!from_scratch) {
                sync_presentation_info_from_treeview ();
        }
+
+       redisplay ();
 }
 
 void
@@ -887,11 +895,13 @@ EditorRoutes::route_removed (TimeAxisView *tv)
 void
 EditorRoutes::route_property_changed (const PropertyChange& what_changed, boost::weak_ptr<Stripable> s)
 {
-       if (!what_changed.contains (ARDOUR::Properties::name)) {
+       if (!what_changed.contains (ARDOUR::Properties::hidden) && !what_changed.contains (ARDOUR::Properties::name)) {
                return;
        }
 
-       ENSURE_GUI_THREAD (*this, &EditorRoutes::route_name_changed, r)
+       if (_adding_routes) {
+               return;
+       }
 
        boost::shared_ptr<Stripable> stripable = s.lock ();
 
@@ -903,9 +913,23 @@ EditorRoutes::route_property_changed (const PropertyChange& what_changed, boost:
        TreeModel::Children::iterator i;
 
        for (i = rows.begin(); i != rows.end(); ++i) {
+
                boost::shared_ptr<Stripable> ss = (*i)[_columns.stripable];
+
                if (ss == stripable) {
-                       (*i)[_columns.text] = stripable->name();
+
+                       if (what_changed.contains (ARDOUR::Properties::name)) {
+                               (*i)[_columns.text] = stripable->name();
+                               break;
+                       }
+
+                       if (what_changed.contains (ARDOUR::Properties::hidden)) {
+                               (*i)[_columns.visible] = !stripable->presentation_info().hidden();
+                               cerr << stripable->name() << " visibility changed, redisplay\n";
+                               redisplay ();
+
+                       }
+
                        break;
                }
        }
@@ -971,15 +995,6 @@ EditorRoutes::show_track_in_display (TimeAxisView& tv)
        }
 }
 
-void
-EditorRoutes::reset_remote_control_ids ()
-{
-       if (Config->get_remote_model() == UserOrdered || !_session || _session->deletion_in_progress()) {
-               return;
-       }
-
-       sync_presentation_info_from_treeview ();
-}
 void
 EditorRoutes::sync_presentation_info_from_treeview ()
 {
@@ -1012,16 +1027,10 @@ EditorRoutes::sync_presentation_info_from_treeview ()
                        continue;
                }
 
-               if (!visible) {
-                       stripable->presentation_info().set_flag (PresentationInfo::Hidden);
-               } else {
-                       stripable->presentation_info().unset_flag (PresentationInfo::Hidden);
-               }
-
-               cerr << "Would change PI go for " << stripable->name() << " to " << order << " currently " << stripable->presentation_info().order() << endl;
+               stripable->presentation_info().set_hidden (!visible);
 
                if (order != stripable->presentation_info().order()) {
-                       stripable->set_presentation_order_explicit (order);
+                       stripable->set_presentation_order (order, false);
                        change = true;
                }
 
@@ -1446,20 +1455,6 @@ struct PresentationInfoRouteSorter
        }
 };
 
-struct PresentationInfoEditorSorter
-{
-       bool operator() (boost::shared_ptr<Stripable> a, boost::shared_ptr<Stripable> b) {
-               if (a->is_master()) {
-                       /* master before everything else */
-                       return true;
-               } else if (b->is_master()) {
-                       /* everything else before master */
-                       return false;
-               }
-               return a->presentation_info().order () < b->presentation_info().order ();
-       }
-};
-
 struct PresentationInfoVCASorter
 {
        bool operator() (boost::shared_ptr<VCA> a, boost::shared_ptr<VCA> b) {
@@ -1484,15 +1479,12 @@ EditorRoutes::initial_display ()
                s.push_back (*ri);
        }
 
-       _editor->add_routes (r);
-
        VCAList v (_session->vca_manager().vcas());
        for (VCAList::iterator vi = v.begin(); vi != v.end(); ++vi) {
                s.push_back (*vi);
        }
-       s.sort (PresentationInfoEditorSorter ());
 
-       _editor->add_vcas (v);
+       _editor->add_stripables (s);
 }
 
 void
@@ -1810,7 +1802,7 @@ EditorRoutes::show_tracks_with_regions_at_playhead ()
 
        set<TimeAxisView*> show;
        for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
-               TimeAxisView* tav = _editor->axis_view_from_route (*i);
+               TimeAxisView* tav = _editor->axis_view_from_stripable (*i);
                if (tav) {
                        show.insert (tav);
                }