Another approach for stuck splash-screens:
[ardour.git] / gtk2_ardour / vca_master_strip.cc
index 7dfc396381d9f5fdf4fc6eb1b9afb17b4398ad0a..40b2a081030cfb549f92e8feccbf85e919e67760 100644 (file)
@@ -17,9 +17,8 @@
 */
 
 #include <gtkmm/stock.h>
-#include <gtkmm/colorselection.h>
 
-#include "pbd/convert.h"
+#include "pbd/string_convert.h"
 
 #include "ardour/rc_configuration.h"
 #include "ardour/session.h"
@@ -88,7 +87,7 @@ VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v)
        solo_mute_box.pack_start (mute_button, true, true);
        solo_mute_box.pack_start (solo_button, true, true);
 
-       number_label.set_text (to_string (v->number(), std::dec));
+       number_label.set_text (PBD::to_string (v->number()));
        number_label.set_elements((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text|ArdourButton::Inactive));
        number_label.set_no_show_all ();
        number_label.set_name ("generic button");
@@ -148,7 +147,7 @@ VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v)
        mute_changed ();
        spill_change (boost::shared_ptr<VCA>());
 
-       Mixer_UI::instance()->show_vca_change.connect (sigc::mem_fun (*this, &VCAMasterStrip::spill_change));
+       Mixer_UI::instance()->show_spill_change.connect (sigc::mem_fun (*this, &VCAMasterStrip::spill_change));
 
        _vca->PropertyChanged.connect (vca_connections, invalidator (*this), boost::bind (&VCAMasterStrip::vca_property_changed, this, _1), gui_context());
        _vca->presentation_info().PropertyChanged.connect (vca_connections, invalidator (*this), boost::bind (&VCAMasterStrip::vca_property_changed, this, _1), gui_context());
@@ -165,9 +164,9 @@ VCAMasterStrip::VCAMasterStrip (Session* s, boost::shared_ptr<VCA> v)
 
 VCAMasterStrip::~VCAMasterStrip ()
 {
-       if ((_session && !_session->deletion_in_progress()) && Mixer_UI::instance()->showing_vca_slaves_for (_vca)) {
+       if ((_session && !_session->deletion_in_progress()) && Mixer_UI::instance()->showing_spill_for (_vca)) {
                /* cancel spill for this VCA */
-               Mixer_UI::instance()->show_vca_slaves (boost::shared_ptr<VCA>());
+               Mixer_UI::instance()->show_spill (boost::shared_ptr<Stripable>());
        }
 
        delete delete_dialog;
@@ -179,9 +178,9 @@ VCAMasterStrip::~VCAMasterStrip ()
 void
 VCAMasterStrip::self_delete ()
 {
-       if ((_session && !_session->deletion_in_progress()) && Mixer_UI::instance()->showing_vca_slaves_for (_vca)) {
+       if ((_session && !_session->deletion_in_progress()) && Mixer_UI::instance()->showing_spill_for (_vca)) {
                /* cancel spill for this VCA */
-               Mixer_UI::instance()->show_vca_slaves (boost::shared_ptr<VCA>());
+               Mixer_UI::instance()->show_spill (boost::shared_ptr<Stripable>());
        }
        /* Drop reference immediately, delete self when idle */
        _vca.reset ();
@@ -231,6 +230,11 @@ VCAMasterStrip::update_bottom_padding ()
        output_button.set_name ("mixer strip button");
        comment_button.set_name ("generic button");
 
+       if (viz.find ("VCA") == std::string::npos) {
+               control_slave_ui.hide ();
+       } else {
+               control_slave_ui.show ();
+       }
 
        int h = 1;
        if (1) {
@@ -437,7 +441,7 @@ void
 VCAMasterStrip::update_vca_name ()
 {
        /* 20 is a rough guess at the number of letters we can fit. */
-       vertical_button.set_text (short_version (_vca->name(), 20));
+       vertical_button.set_text (short_version (_vca->full_name(), 20));
 }
 
 void
@@ -449,6 +453,9 @@ VCAMasterStrip::build_context_menu ()
        items.push_back (MenuElem (_("Rename"), sigc::mem_fun (*this, &VCAMasterStrip::start_name_edit)));
        items.push_back (MenuElem (_("Color..."), sigc::mem_fun (*this, &VCAMasterStrip::start_color_edit)));
        items.push_back (SeparatorElem());
+       items.push_back (MenuElem (_("Assign Selected Channels"), sigc::mem_fun (*this, &VCAMasterStrip::assign_all_selected)));
+       items.push_back (MenuElem (_("Drop Selected Channels"), sigc::mem_fun (*this, &VCAMasterStrip::unassign_all_selected)));
+       items.push_back (SeparatorElem());
        items.push_back (MenuElem (_("Drop All Slaves"), sigc::mem_fun (*this, &VCAMasterStrip::drop_all_slaves)));
        items.push_back (SeparatorElem());
        items.push_back (MenuElem (_("Remove"), sigc::mem_fun (*this, &VCAMasterStrip::remove)));
@@ -457,15 +464,15 @@ VCAMasterStrip::build_context_menu ()
 void
 VCAMasterStrip::spill ()
 {
-       if (Mixer_UI::instance()->showing_vca_slaves_for (_vca)) {
-               Mixer_UI::instance()->show_vca_slaves (boost::shared_ptr<VCA>());
+       if (Mixer_UI::instance()->showing_spill_for (_vca)) {
+               Mixer_UI::instance()->show_spill (boost::shared_ptr<Stripable>());
        } else {
-               Mixer_UI::instance()->show_vca_slaves (_vca);
+               Mixer_UI::instance()->show_spill (_vca);
        }
 }
 
 void
-VCAMasterStrip::spill_change (boost::shared_ptr<VCA> vca)
+VCAMasterStrip::spill_change (boost::shared_ptr<Stripable> vca)
 {
        if (vca != _vca) {
                vertical_button.set_active_state (Gtkmm2ext::Off);
@@ -486,13 +493,25 @@ VCAMasterStrip::remove ()
        _session->vca_manager().remove_vca (_vca);
 }
 
+void
+VCAMasterStrip::assign_all_selected ()
+{
+       Mixer_UI::instance()->do_vca_assign (_vca);
+}
+
+void
+VCAMasterStrip::unassign_all_selected ()
+{
+       Mixer_UI::instance()->do_vca_unassign (_vca);
+}
+
 void
 VCAMasterStrip::drop_all_slaves ()
 {
        _vca->Drop (); /* EMIT SIGNAL */
 
-       if (Mixer_UI::instance()->showing_vca_slaves_for (_vca)) {
-               Mixer_UI::instance()->show_vca_slaves (boost::shared_ptr<VCA>());
+       if (Mixer_UI::instance()->showing_spill_for (_vca)) {
+               Mixer_UI::instance()->show_spill (boost::shared_ptr<Stripable>());
        }
 }
 
@@ -511,30 +530,7 @@ VCAMasterStrip::state_id () const
 void
 VCAMasterStrip::start_color_edit ()
 {
-       Gtk::ColorSelectionDialog* color_dialog = new Gtk::ColorSelectionDialog;
-
-       color_dialog->get_colorsel()->set_has_opacity_control (false);
-       color_dialog->get_colorsel()->set_has_palette (true);
-
-       Gdk::Color c = gdk_color_from_rgba (_vca->presentation_info().color ());
-
-       color_dialog->get_colorsel()->set_previous_color (c);
-       color_dialog->get_colorsel()->set_current_color (c);
-
-       color_dialog->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &VCAMasterStrip::finish_color_edit), color_dialog));
-       color_dialog->present ();
-}
-
-void
-VCAMasterStrip::finish_color_edit (int response, Gtk::ColorSelectionDialog* dialog)
-{
-       switch (response) {
-       case RESPONSE_OK:
-               _vca->presentation_info().set_color (gdk_color_to_rgba (dialog->get_colorsel()->get_current_color()));
-               break;
-       }
-
-       delete_when_idle (dialog);
+       _color_picker.popup (_vca);
 }
 
 bool