X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner_ui.cc;h=69387ad3a20d4b569af39fd9987f14dfe3d56869;hb=fd3219bf29415006d6680fc5cf2dac97c35972bc;hp=e58af02f9b49f872cfc9046396d6025125091c08;hpb=06f094d4b64a826ddd71c970aaa1679867a75975;p=ardour.git diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc index e58af02f9b..69387ad3a2 100644 --- a/gtk2_ardour/panner_ui.cc +++ b/gtk2_ardour/panner_ui.cc @@ -21,7 +21,6 @@ #include "ardour/io.h" #include "ardour/dB.h" #include -#include #include #include "midi++/manager.h" #include "pbd/fastlog.h" @@ -71,17 +70,17 @@ PannerUI::PannerUI (Session* s) pan_automation_style_button.set_name ("MixerAutomationModeButton"); pan_automation_state_button.set_name ("MixerAutomationPlaybackButton"); - ARDOUR_UI::instance()->tooltips().set_tip (pan_automation_state_button, _("Pan automation mode")); - ARDOUR_UI::instance()->tooltips().set_tip (pan_automation_style_button, _("Pan automation type")); + ARDOUR_UI::instance()->set_tip (pan_automation_state_button, _("Pan automation mode")); + ARDOUR_UI::instance()->set_tip (pan_automation_style_button, _("Pan automation type")); //set_size_request_to_display_given_text (pan_automation_state_button, X_("O"), 2, 2); //set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2); panning_viewport.set_name (X_("BaseFrame")); - ARDOUR_UI::instance()->tooltips().set_tip (panning_link_button, + ARDOUR_UI::instance()->set_tip (panning_link_button, _("panning link control")); - ARDOUR_UI::instance()->tooltips().set_tip (panning_link_direction_button, + ARDOUR_UI::instance()->set_tip (panning_link_direction_button, _("panning link direction")); pan_automation_style_button.unset_flags (Gtk::CAN_FOCUS); @@ -125,7 +124,7 @@ PannerUI::PannerUI (Session* s) pack_start (pan_vbox, true, true); - panner = 0; + twod_panner = 0; big_window = 0; set_width(Narrow); @@ -144,16 +143,16 @@ PannerUI::set_panner (boost::shared_ptr p) _panner = p; - delete panner; - panner = 0; + delete twod_panner; + twod_panner = 0; if (!_panner) { return; } - _panner->Changed.connect (connections, boost::bind (&PannerUI::panner_changed, this), gui_context()); - _panner->LinkStateChanged.connect (connections, boost::bind (&PannerUI::update_pan_linkage, this), gui_context()); - _panner->StateChanged.connect (connections, boost::bind (&PannerUI::update_pan_state, this), gui_context()); + _panner->Changed.connect (connections, invalidator (*this), boost::bind (&PannerUI::panner_changed, this), gui_context()); + _panner->LinkStateChanged.connect (connections, invalidator (*this), boost::bind (&PannerUI::update_pan_linkage, this), gui_context()); + _panner->StateChanged.connect (connections, invalidator (*this), boost::bind (&PannerUI::update_pan_state, this), gui_context()); setup_pan (); @@ -161,22 +160,6 @@ PannerUI::set_panner (boost::shared_ptr p) update_pan_sensitive (); update_pan_linkage (); pan_automation_state_changed (); - -#if WHERE_DOES_THIS_LIVE - pan_bar_packer.show(); - panning_viewport.show(); - panning_up.show(); - panning_up_arrow.show(); - panning_down.show(); - panning_down_arrow.show(); - pan_vbox.show(); - panning_link_button.show(); - panning_link_direction_button.show(); - panning_link_box.show(); - pan_automation_style_button.show(); - pan_automation_state_button.show(); - show(); -#endif } void @@ -261,8 +244,8 @@ PannerUI::update_pan_linkage () { ENSURE_GUI_THREAD (*this, &PannerUI::update_pan_linkage) - bool x = _panner->linked(); - bool bx = panning_link_button.get_active(); + bool const x = _panner->linked(); + bool const bx = panning_link_button.get_active(); if (x != bx) { @@ -309,7 +292,7 @@ PannerUI::~PannerUI () delete (*i); } - delete panner; + delete twod_panner; delete big_window; delete pan_menu; delete pan_astyle_menu; @@ -346,6 +329,11 @@ PannerUI::setup_pan () return; } + _pan_control_connections.drop_connections (); + for (uint32_t i = 0; i < _panner->npanners(); ++i) { + connect_to_pan_control (i); + } + _current_nouts = nouts; _current_npans = npans; @@ -358,8 +346,8 @@ PannerUI::setup_pan () pan_adjustments.pop_back (); } - delete panner; - panner = 0; + delete twod_panner; + twod_panner = 0; /* stick something into the panning viewport so that it redraws */ @@ -379,8 +367,8 @@ PannerUI::setup_pan () pan_adjustments.pop_back (); } - delete panner; - panner = 0; + delete twod_panner; + twod_panner = 0; while ((asz = pan_adjustments.size()) < npans) { @@ -409,8 +397,7 @@ PannerUI::setup_pan () /* now set adjustment with current value of panner, then connect the signals */ pan_adjustments.back()->set_value(rx); pan_adjustments.back()->signal_value_changed().connect (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz)); - - _panner->pan_control( asz )->Changed.connect (connections, boost::bind (&PannerUI::pan_value_changed, this, (uint32_t) asz), gui_context()); + connect_to_pan_control (asz); bc->set_name ("PanSlider"); bc->set_shadow_type (Gtk::SHADOW_NONE); @@ -424,7 +411,7 @@ PannerUI::setup_pan () char buf[64]; snprintf (buf, sizeof (buf), _("panner for channel %zu"), asz + 1); - ARDOUR_UI::instance()->tooltips().set_tip (bc->event_widget(), buf); + ARDOUR_UI::instance()->set_tip (bc->event_widget(), buf); bc->event_widget().signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz)); @@ -448,26 +435,26 @@ PannerUI::setup_pan () } else { - if (!panner) { - panner = new Panner2d (_panner, 61); - panner->set_name ("MixerPanZone"); - panner->show (); + if (!twod_panner) { + twod_panner = new Panner2d (_panner, 61); + twod_panner->set_name ("MixerPanZone"); + twod_panner->show (); - panner->signal_button_press_event().connect + twod_panner->signal_button_press_event().connect (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) 0), false); } update_pan_sensitive (); - panner->reset (npans); + twod_panner->reset (npans); if (big_window) { big_window->reset (npans); } - panner->set_size_request (-1, 61); + twod_panner->set_size_request (-1, 61); /* and finally, add it to the panner frame */ panning_viewport.remove (); - panning_viewport.add (*panner); + panning_viewport.add (*twod_panner); panning_viewport.show_all (); } } @@ -477,7 +464,7 @@ PannerUI::pan_button_event (GdkEventButton* ev, uint32_t which) { switch (ev->button) { case 1: - if (panner && ev->type == GDK_2BUTTON_PRESS) { + if (twod_panner && ev->type == GDK_2BUTTON_PRESS) { if (!big_window) { big_window = new Panner2dWindow (_panner, 400, _panner->npanners()); } @@ -598,11 +585,11 @@ PannerUI::pan_changed (void *src) panning_link_button.set_sensitive (false); break; default: - panning_link_direction_button.set_sensitive (true); + panning_link_direction_button.set_sensitive (_panner->linked ()); panning_link_button.set_sensitive (true); } - uint32_t nouts = _panner->nouts(); + uint32_t const nouts = _panner->nouts(); switch (nouts) { case 0: @@ -626,9 +613,8 @@ PannerUI::pan_adjustment_changed (uint32_t which) { if (!in_pan_update && which < _panner->npanners()) { - float xpos; float val = pan_adjustments[which]->get_value (); - xpos = _panner->pan_control( which )->get_value(); + float const xpos = _panner->pan_control(which)->get_value(); /* add a kinda-sorta detent for the middle */ @@ -645,7 +631,7 @@ PannerUI::pan_adjustment_changed (uint32_t which) if (!Panner::equivalent (val, xpos)) { - _panner->streampanner(which).set_position (val); + _panner->pan_control(which)->set_value (val); /* XXX the panner objects have no access to the session, so do this here. ick. @@ -660,7 +646,17 @@ PannerUI::pan_value_changed (uint32_t which) { ENSURE_GUI_THREAD (*this, &PannerUI::pan_value_changed, which) - if (_panner->npanners() > 1 && which < _panner->npanners()) { + if (twod_panner) { + + float x; + float y; + _panner->streampanner(which).get_position (x, y); + + in_pan_update = true; + twod_panner->move_puck (which, x, y); + in_pan_update = false; + + } else if (_panner->npanners() > 0 && which < _panner->npanners()) { float xpos; float val = pan_adjustments[which]->get_value (); @@ -723,8 +719,8 @@ PannerUI::update_pan_sensitive () } break; default: - if (panner) { - panner->set_sensitive (sensitive); + if (twod_panner) { + twod_panner->set_sensitive (sensitive); } if (big_window) { big_window->set_sensitive (sensitive); @@ -901,4 +897,11 @@ PannerUI::set_mono (bool yn) update_pan_sensitive (); } - + +void +PannerUI::connect_to_pan_control (uint32_t i) +{ + _panner->pan_control(i)->Changed.connect ( + _pan_control_connections, invalidator (*this), boost::bind (&PannerUI::pan_value_changed, this, i), gui_context () + ); +}