remove/delete current mixer strip when session is deleted
[ardour.git] / gtk2_ardour / audio_time_axis.cc
index de253ccc775efe5ca126384832be8bb84983c1eb..270cc71a9628e5196508b0cc5222d0ca53164591 100644 (file)
@@ -75,7 +75,6 @@ using namespace PBD;
 using namespace Gtk;
 using namespace Editing;
 
-
 AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::shared_ptr<Route> rt, Canvas& canvas)
        : AxisView(sess)
        , RouteTimeAxisView(ed, sess, rt, canvas)
@@ -114,16 +113,29 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
 
                /* ask for notifications of any new RegionViews */
                _view->RegionViewAdded.connect (mem_fun(*this, &AudioTimeAxisView::region_view_added));
-               _view->attach ();
-       }
 
-       post_construct ();
+               if (!editor.have_idled()) {
+                       /* first idle will do what we need */
+               } else {
+                       first_idle ();
+               } 
+
+       } else {
+               post_construct ();
+       }
 }
 
 AudioTimeAxisView::~AudioTimeAxisView ()
 {
 }
 
+void
+AudioTimeAxisView::first_idle ()
+{
+       _view->attach ();
+       post_construct ();
+}
+
 AudioStreamView*
 AudioTimeAxisView::audio_view()
 {
@@ -148,21 +160,30 @@ AudioTimeAxisView::hide ()
        TimeAxisView::hide ();
 }
 
-void
+int
 AudioTimeAxisView::set_state (const XMLNode& node)
 {
        const XMLProperty *prop;
-       
-       TimeAxisView::set_state (node);
-       
-       if ((prop = node.property ("shown_editor")) != 0) {
-               if (prop->value() == "no") {
-                       _marked_for_display = false;
+       int ret;
+
+       if ((ret = TimeAxisView::set_state (node)) != 0) {
+               return ret;
+       }
+
+       /* if the TimeAxisView had marked this not for display,
+          then do not allow this to override it.
+       */
+
+       if ((prop = node.property ("marked_for_display")) == 0) {
+               if ((prop = node.property ("shown_editor")) != 0) {
+                       if (prop->value() == "no") {
+                               _marked_for_display = false;
+                       } else {
+                               _marked_for_display = true;
+                       }
                } else {
                        _marked_for_display = true;
                }
-       } else {
-               _marked_for_display = true;
        }
        
        XMLNodeList nlist = node.children();
@@ -198,6 +219,8 @@ AudioTimeAxisView::set_state (const XMLNode& node)
                        continue;
                }
        }
+
+       return 0;
 }
 
 void
@@ -231,8 +254,10 @@ AudioTimeAxisView::append_extra_display_menu_items ()
        MenuList& items = display_menu->items();
 
        // crossfade stuff
-       items.push_back (MenuElem (_("Hide all crossfades"), mem_fun(*this, &AudioTimeAxisView::hide_all_xfades)));
-       items.push_back (MenuElem (_("Show all crossfades"), mem_fun(*this, &AudioTimeAxisView::show_all_xfades)));
+       if (!Profile->get_sae()) {
+               items.push_back (MenuElem (_("Hide all crossfades"), mem_fun(*this, &AudioTimeAxisView::hide_all_xfades)));
+               items.push_back (MenuElem (_("Show all crossfades"), mem_fun(*this, &AudioTimeAxisView::show_all_xfades)));
+       }
 
        // waveform menu
        Menu *waveform_menu = manage(new Menu);
@@ -464,6 +489,7 @@ AudioTimeAxisView::toggle_gain_track ()
                if (showit) {
                        gain_track->set_marked_for_display (true);
                        gain_track->canvas_display->show();
+                       gain_track->canvas_background->show();
                        gain_track->get_state_node()->add_property ("shown", X_("yes"));
                } else {
                        gain_track->set_marked_for_display (false);
@@ -474,7 +500,7 @@ AudioTimeAxisView::toggle_gain_track ()
                /* now trigger a redisplay */
                
                if (!no_redraw) {
-                        _route->gui_changed (X_("track_height"), (void *) 0); /* EMIT_SIGNAL */
+                        _route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */
                }
        }
 }
@@ -488,7 +514,7 @@ AudioTimeAxisView::gain_hidden ()
                gain_automation_item->set_active (false);
        }
 
-        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
 }
 
 void
@@ -500,6 +526,7 @@ AudioTimeAxisView::toggle_pan_track ()
                if (showit) {
                        pan_track->set_marked_for_display (true);
                        pan_track->canvas_display->show();
+                       pan_track->canvas_background->show();
                        pan_track->get_state_node()->add_property ("shown", X_("yes"));
                } else {
                        pan_track->set_marked_for_display (false);
@@ -510,7 +537,7 @@ AudioTimeAxisView::toggle_pan_track ()
                /* now trigger a redisplay */
                
                if (!no_redraw) {
-                        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+                        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
                }
        }
 }
@@ -524,7 +551,7 @@ AudioTimeAxisView::pan_hidden ()
                pan_automation_item->set_active (false);
        }
 
-        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
 }
 
 void
@@ -539,7 +566,7 @@ AudioTimeAxisView::show_all_automation ()
 
        no_redraw = false;
 
-        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
 }
 
 void
@@ -554,7 +581,7 @@ AudioTimeAxisView::show_existing_automation ()
 
        no_redraw = false;
 
-        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
 }
 
 void
@@ -568,7 +595,7 @@ AudioTimeAxisView::hide_all_automation ()
        RouteTimeAxisView::hide_all_automation();
 
        no_redraw = false;
-        _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+        _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
 }
 
 void
@@ -632,25 +659,27 @@ AudioTimeAxisView::update_control_names ()
 {
        if (is_audio_track()) {
                if (_route->active()) {
-                       controls_ebox.set_name ("AudioTrackControlsBaseUnselected");
                        controls_base_selected_name = "AudioTrackControlsBaseSelected";
                        controls_base_unselected_name = "AudioTrackControlsBaseUnselected";
                } else {
-                       controls_ebox.set_name ("AudioTrackControlsBaseInactiveUnselected");
                        controls_base_selected_name = "AudioTrackControlsBaseInactiveSelected";
                        controls_base_unselected_name = "AudioTrackControlsBaseInactiveUnselected";
                }
        } else {
                if (_route->active()) {
-                       controls_ebox.set_name ("BusControlsBaseUnselected");
                        controls_base_selected_name = "BusControlsBaseSelected";
                        controls_base_unselected_name = "BusControlsBaseUnselected";
                } else {
-                       controls_ebox.set_name ("BusControlsBaseInactiveUnselected");
                        controls_base_selected_name = "BusControlsBaseInactiveSelected";
                        controls_base_unselected_name = "BusControlsBaseInactiveUnselected";
                }
        }
+
+       if (get_selected()) {
+               controls_ebox.set_name (controls_base_selected_name);
+       } else {
+               controls_ebox.set_name (controls_base_unselected_name);
+       }
 }
 
 XMLNode*