Add GUI part to immediately fan-out multi-out instruments on track creation
authorRobin Gareus <robin@gareus.org>
Fri, 20 Jan 2017 23:40:18 +0000 (00:40 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 20 Jan 2017 23:40:18 +0000 (00:40 +0100)
gtk2_ardour/editor_routes.cc
gtk2_ardour/plugin_setup_dialog.cc
gtk2_ardour/plugin_setup_dialog.h
gtk2_ardour/route_ui.cc

index fe1e5af62b56405c2ad97a0aa4450441983464cc..69c876ba99c10cb0bb781e54a0375e84c211943d 100644 (file)
@@ -1894,5 +1894,6 @@ int
 EditorRoutes::plugin_setup (boost::shared_ptr<Route> r, boost::shared_ptr<PluginInsert> pi, ARDOUR::Route::PluginSetupOptions flags)
 {
        PluginSetupDialog psd (r, pi, flags);
-       return psd.run ();
+       int rv = psd.run ();
+       return rv + (psd.fan_out() ? 4 : 0);
 }
index 5feb76aefe7a550072c10c2a1fdcfd22c295cb30..3df0fe6491c85fc2ec787561a0253a8dc437d23a 100644 (file)
@@ -31,6 +31,7 @@ PluginSetupDialog::PluginSetupDialog (boost::shared_ptr<ARDOUR::Route> r, boost:
        , _route (r)
        , _pi (pi)
        , _keep_mapping (_("Copy I/O Map"), ArdourButton::led_default_elements)
+       , _fan_out (_("Fan out"), ArdourButton::led_default_elements)
 {
        assert (flags != Route::None);
 
@@ -71,7 +72,7 @@ PluginSetupDialog::PluginSetupDialog (boost::shared_ptr<ARDOUR::Route> r, boost:
                f->add (*box);
                tbl->attach (*f, 0, 1, row, row + 1, EXPAND|FILL, SHRINK, 0, 8);
 
-               _keep_mapping.signal_clicked.connect (sigc::mem_fun (*this, &PluginSetupDialog::apply_mapping)); 
+               _keep_mapping.signal_clicked.connect (sigc::mem_fun (*this, &PluginSetupDialog::apply_mapping));
                add_button ("Replace", 2);
        } else {
 
@@ -86,16 +87,19 @@ PluginSetupDialog::PluginSetupDialog (boost::shared_ptr<ARDOUR::Route> r, boost:
                Box* box = manage (new HBox ());
                box->set_border_width (2);
                box->pack_start (_out_presets, true, true);
+               box->pack_start (_fan_out, false, false);
                Frame* f = manage (new Frame ());
                f->set_label (_("Output Configuration"));
                f->add (*box);
                tbl->attach (*f, 1, 2, row, row + 1, EXPAND|FILL, SHRINK, 0, 8);
+               _fan_out.signal_clicked.connect (sigc::mem_fun (*this, &PluginSetupDialog::toggle_fan_out));
        } else {
                _pi->set_preset_out (_pi->natural_output_streams ());
                update_sensitivity (_pi->natural_output_streams ().n_audio ());
        }
 
        _keep_mapping.set_active (false);
+       _fan_out.set_active (false);
        apply_mapping ();
 
        add_button (Stock::ADD, 0);
@@ -162,6 +166,7 @@ PluginSetupDialog::update_sensitivity (uint32_t n_audio)
        } else {
                _keep_mapping.set_sensitive (false);
        }
+       _fan_out.set_sensitive (n_audio > 2);
 }
 
 bool
@@ -190,6 +195,12 @@ PluginSetupDialog::apply_mapping ()
        }
 }
 
+void
+PluginSetupDialog::toggle_fan_out ()
+{
+       _fan_out.set_active (!_fan_out.get_active ());
+}
+
 std::string
 PluginSetupDialog::preset_label (uint32_t n_audio) const
 {
index b2fc3e77f2157b403da15aca25aada807b79c948..8d07b625391ec8ac24d93176507997770eba9dc5 100644 (file)
@@ -30,6 +30,8 @@ class PluginSetupDialog : public ArdourDialog
 public:
        PluginSetupDialog (boost::shared_ptr<ARDOUR::Route>, boost::shared_ptr<ARDOUR::PluginInsert>, ARDOUR::Route::PluginSetupOptions);
 
+       bool fan_out () const { return _fan_out.get_active () && _fan_out.get_sensitive (); }
+
 private:
        void setup_output_presets ();
        void update_sensitivity (uint32_t);
@@ -37,6 +39,7 @@ private:
 
        void select_output_preset (uint32_t n_audio);
        void apply_mapping ();
+       void toggle_fan_out ();
 
        std::string preset_label (uint32_t) const;
 
@@ -45,6 +48,7 @@ private:
 
        ArdourDropdown _out_presets;
        ArdourButton _keep_mapping;
+       ArdourButton _fan_out;
        ARDOUR::ChanCount _cur_inputs;
        ARDOUR::ChanCount _cur_outputs;
 };
index 9c4ddeade8f1040c9a6291def50c1a224da345da..1ce6114a3e7621ac5051286d1333a4cc25fc844d 100644 (file)
@@ -285,6 +285,7 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
        _route->solo_safe_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::update_solo_display, this), gui_context());
        _route->solo_isolate_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::update_solo_display, this), gui_context());
        _route->phase_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::polarity_changed, this), gui_context());
+       _route->fan_out.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::fan_out, this, true, true), gui_context());
 
        if (is_track()) {
                track()->FreezeChange.connect (*this, invalidator (*this), boost::bind (&RouteUI::map_frozen, this), gui_context());