using namespace PBD;
using namespace Gtkmm2ext;
using namespace Gtk;
-using namespace sigc;
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),
- panning_up_arrow (Gtk::ARROW_UP, Gtk::SHADOW_OUT),
- panning_down_arrow (Gtk::ARROW_DOWN, Gtk::SHADOW_OUT),
- panning_link_button (_("link")),
- pan_automation_style_button (""),
- pan_automation_state_button ("")
+PannerUI::PannerUI (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)
+ , panning_up_arrow (Gtk::ARROW_UP, Gtk::SHADOW_OUT)
+ , panning_down_arrow (Gtk::ARROW_DOWN, Gtk::SHADOW_OUT)
+ , panning_link_button (_("link"))
+ , pan_automation_style_button ("")
+ , pan_automation_state_button ("")
{
+ set_session (s);
+
ignore_toggle = false;
pan_menu = 0;
pan_astate_menu = 0;
//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);
- pan_bar_packer.set_size_request (-1, 61);
- panning_viewport.set_size_request (-1, 61);
panning_viewport.set_name (X_("BaseFrame"));
ARDOUR_UI::instance()->tooltips().set_tip (panning_link_button,
pan_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
pan_automation_state_button.unset_flags (Gtk::CAN_FOCUS);
- pan_automation_style_button.signal_button_press_event().connect (mem_fun(*this, &PannerUI::pan_automation_style_button_event), false);
- pan_automation_state_button.signal_button_press_event().connect (mem_fun(*this, &PannerUI::pan_automation_state_button_event), false);
+ pan_automation_style_button.signal_button_press_event().connect (sigc::mem_fun(*this, &PannerUI::pan_automation_style_button_event), false);
+ pan_automation_state_button.signal_button_press_event().connect (sigc::mem_fun(*this, &PannerUI::pan_automation_state_button_event), false);
panning_link_button.set_name (X_("PanningLinkButton"));
panning_link_direction_button.set_name (X_("PanningLinkDirectionButton"));
panning_link_direction_button.add (*(manage (new Image (get_xpm("forwardblarrow.xpm")))));
panning_link_direction_button.signal_clicked().connect
- (mem_fun(*this, &PannerUI::panning_link_direction_clicked));
+ (sigc::mem_fun(*this, &PannerUI::panning_link_direction_clicked));
panning_link_button.signal_button_press_event().connect
- (mem_fun(*this, &PannerUI::panning_link_button_press), false);
+ (sigc::mem_fun(*this, &PannerUI::panning_link_button_press), false);
panning_link_button.signal_button_release_event().connect
- (mem_fun(*this, &PannerUI::panning_link_button_release), false);
+ (sigc::mem_fun(*this, &PannerUI::panning_link_button_release), false);
panning_up.set_border_width (3);
panning_down.set_border_width (3);
void
PannerUI::set_panner (boost::shared_ptr<Panner> p)
{
- connections.clear ();
+ connections.drop_connections ();
delete pan_astyle_menu;
pan_astyle_menu = 0;
return;
}
- connections.push_back (_panner->Changed.connect (mem_fun(*this, &PannerUI::panner_changed)));
- connections.push_back (_panner->LinkStateChanged.connect (mem_fun(*this, &PannerUI::update_pan_linkage)));
- connections.push_back (_panner->StateChanged.connect (mem_fun(*this, &PannerUI::update_pan_state)));
+ _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());
setup_pan ();
pan_astate_menu->items().clear ();
}
- pan_astate_menu->items().push_back (MenuElem (_("Manual"), bind (
- mem_fun (_panner.get(), &Panner::set_automation_state),
+ pan_astate_menu->items().push_back (MenuElem (_("Manual"), sigc::bind (
+ sigc::mem_fun (_panner.get(), &Panner::set_automation_state),
(AutoState) Off)));
- pan_astate_menu->items().push_back (MenuElem (_("Play"), bind (
- mem_fun (_panner.get(), &Panner::set_automation_state),
+ pan_astate_menu->items().push_back (MenuElem (_("Play"), sigc::bind (
+ sigc::mem_fun (_panner.get(), &Panner::set_automation_state),
(AutoState) Play)));
- pan_astate_menu->items().push_back (MenuElem (_("Write"), bind (
- mem_fun (_panner.get(), &Panner::set_automation_state),
+ pan_astate_menu->items().push_back (MenuElem (_("Write"), sigc::bind (
+ sigc::mem_fun (_panner.get(), &Panner::set_automation_state),
(AutoState) Write)));
- pan_astate_menu->items().push_back (MenuElem (_("Touch"), bind (
- mem_fun (_panner.get(), &Panner::set_automation_state),
+ pan_astate_menu->items().push_back (MenuElem (_("Touch"), sigc::bind (
+ sigc::mem_fun (_panner.get(), &Panner::set_automation_state),
(AutoState) Touch)));
}
void
PannerUI::update_pan_linkage ()
{
- ENSURE_GUI_THREAD(mem_fun(*this, &PannerUI::update_pan_linkage));
+ ENSURE_GUI_THREAD (*this, &PannerUI::update_pan_linkage)
bool x = _panner->linked();
bool bx = panning_link_button.get_active();
void
PannerUI::panner_changed ()
{
- ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
+ ENSURE_GUI_THREAD (*this, &PannerUI::panner_changed)
setup_pan ();
pan_changed (0);
}
PannerUI::update_pan_state ()
{
/* currently nothing to do */
- // ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::update_panner_state));
+ // ENSURE_GUI_THREAD (*this, &PannerUI::update_panner_state)
}
void
pan_adjustments.pop_back ();
}
+ delete panner;
+ panner = 0;
+
/* stick something into the panning viewport so that it redraws */
EventBox* eb = manage (new EventBox());
pan_adjustments.pop_back ();
}
+ delete panner;
+ panner = 0;
+
while ((asz = pan_adjustments.size()) < npans) {
float x, rx;
/* 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 (bind (mem_fun(*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz));
-
- _panner->pan_control( asz )->Changed.connect (bind (mem_fun(*this, &PannerUI::pan_value_changed), (uint32_t) asz));
+ 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());
bc->set_name ("PanSlider");
bc->set_shadow_type (Gtk::SHADOW_NONE);
boost::shared_ptr<AutomationControl> ac = _panner->pan_control (asz);
if (asz) {
- bc->StartGesture.connect (mem_fun (*ac, &AutomationControl::start_touch));
- bc->StopGesture.connect (mem_fun (*ac, &AutomationControl::stop_touch));
+ bc->StartGesture.connect (sigc::mem_fun (*ac, &AutomationControl::start_touch));
+ bc->StopGesture.connect (sigc::mem_fun (*ac, &AutomationControl::stop_touch));
}
char buf[64];
ARDOUR_UI::instance()->tooltips().set_tip (bc->event_widget(), buf);
bc->event_widget().signal_button_release_event().connect
- (bind (mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz));
+ (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz));
bc->set_size_request (-1, pan_bar_height);
panner->set_name ("MixerPanZone");
panner->show ();
- panner->signal_button_press_event().connect
- (bind (mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) 0), false);
+ panner->signal_button_press_event().connect
+ (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) 0), false);
}
update_pan_sensitive ();
(dynamic_cast<CheckMenuItem*> (&items.back()))->set_active (_panner->streampanner(which).muted());
(dynamic_cast<CheckMenuItem*> (&items.back()))->signal_toggled().connect
- (bind (mem_fun(*this, &PannerUI::pan_mute), which));
+ (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_mute), which));
- items.push_back (CheckMenuElem (_("Bypass"), mem_fun(*this, &PannerUI::pan_bypass_toggle)));
+ items.push_back (CheckMenuElem (_("Bypass"), sigc::mem_fun(*this, &PannerUI::pan_bypass_toggle)));
bypass_menu_item = static_cast<CheckMenuItem*> (&items.back());
/* set state first, connect second */
bypass_menu_item->set_active (_panner->bypassed());
- bypass_menu_item->signal_toggled().connect (mem_fun(*this, &PannerUI::pan_bypass_toggle));
+ bypass_menu_item->signal_toggled().connect (sigc::mem_fun(*this, &PannerUI::pan_bypass_toggle));
- items.push_back (MenuElem (_("Reset"), bind (mem_fun (*this, &PannerUI::pan_reset), which)));
+ items.push_back (MenuElem (_("Reset"), sigc::bind (sigc::mem_fun (*this, &PannerUI::pan_reset), which)));
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Reset all"), mem_fun (*this, &PannerUI::pan_reset_all)));
+ items.push_back (MenuElem (_("Reset all"), sigc::mem_fun (*this, &PannerUI::pan_reset_all)));
}
void
the panner objects have no access to the session,
so do this here. ick.
*/
- _session.set_dirty();
+ _session->set_dirty();
}
}
}
void
PannerUI::pan_value_changed (uint32_t which)
{
- ENSURE_GUI_THREAD (bind (mem_fun(*this, &PannerUI::pan_value_changed), which));
+ ENSURE_GUI_THREAD (*this, &PannerUI::pan_value_changed, which)
if (_panner->npanners() > 1 && which < _panner->npanners()) {
float xpos;
void
PannerUI::pan_automation_style_changed ()
{
- ENSURE_GUI_THREAD(mem_fun(*this, &PannerUI::pan_automation_style_changed));
+ ENSURE_GUI_THREAD (*this, &PannerUI::pan_automation_style_changed)
switch (_width) {
case Wide:
void
PannerUI::pan_automation_state_changed ()
{
- ENSURE_GUI_THREAD(mem_fun(*this, &PannerUI::pan_automation_state_changed));
+ ENSURE_GUI_THREAD (*this, &PannerUI::pan_automation_state_changed)
bool x;
pan_watching.disconnect();
if (x) {
- pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (mem_fun (*this, &PannerUI::effective_pan_display));
+ pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (sigc::mem_fun (*this, &PannerUI::effective_pan_display));
}
}