Stop ardour exiting in the case where you have a loaded session, then select New...
[ardour.git] / gtk2_ardour / panner_ui.cc
index ca10dd430055f7fa13bb0a278a3057b8bbdd3cc7..a643e1b318763d21156b2bceb5d875d9f9a92d90 100644 (file)
@@ -52,6 +52,7 @@ const int PannerUI::pan_bar_height = 30;
 PannerUI::PannerUI (Session& s)
        : _session (s),
          _current_nouts (-1),
+         _current_npans (-1),
          hAdjustment(0.0, 0.0, 0.0),
          vAdjustment(0.0, 0.0, 0.0),
          panning_viewport(hAdjustment, vAdjustment),
@@ -340,15 +341,15 @@ PannerUI::setup_pan ()
                return;
        }
 
-       uint32_t nouts = _panner->nouts();
+       uint32_t const nouts = _panner->nouts();
+       uint32_t const npans = _panner->npanners();
 
-       if (int32_t (nouts) == _current_nouts) {
+       if (int32_t (nouts) == _current_nouts && int32_t (npans) == _current_npans) {
                return;
        }
 
        _current_nouts = nouts;
-
-       cout << "Setup pan for " << _panner->name() << endl;
+       _current_npans = npans;
 
        if (nouts == 0 || nouts == 1) {
 
@@ -369,7 +370,6 @@ PannerUI::setup_pan ()
        } else if (nouts == 2) {
 
                vector<Adjustment*>::size_type asz;
-               uint32_t npans = _panner->npanners();
 
                while (!pan_adjustments.empty()) {
                        delete pan_bars.back();
@@ -708,7 +708,7 @@ PannerUI::update_pan_bars (bool only_if_aplay)
 void
 PannerUI::update_pan_sensitive ()
 {
-       bool sensitive = !(_panner->automation_state() & Play);
+       bool const sensitive = !(_panner->mono()) && !(_panner->automation_state() & Play);
 
        switch (_panner->nouts()) {
        case 0:
@@ -890,3 +890,12 @@ PannerUI::_astyle_string (AutoStyle style, bool shrt)
                return (shrt ? _("Abs") : _("Abs"));
        }
 }
+
+void
+PannerUI::set_mono (bool yn)
+{
+       _panner->set_mono (yn);
+       update_pan_sensitive ();
+}
+
+