use new syntax for connecting to backend signals that enforces explicit connection scope, plus a few other related matters

git-svn-id: svn://localhost/ardour2/branches/3.0@6376 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-12-19 20:26:31 +00:00
parent 67460c2af4
commit aae367b63c
256 changed files with 1123 additions and 1113 deletions

View file

@ -234,20 +234,20 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
last_shuttle_request = last_peak_grab = 0; // get_microseconds(); last_shuttle_request = last_peak_grab = 0; // get_microseconds();
ARDOUR::Diskstream::DiskOverrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::disk_overrun_handler)); ARDOUR::Diskstream::DiskOverrun.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
ARDOUR::Diskstream::DiskUnderrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::disk_underrun_handler)); ARDOUR::Diskstream::DiskUnderrun.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
/* handle dialog requests */ /* handle dialog requests */
ARDOUR::Session::Dialog.connect (sigc::mem_fun(*this, &ARDOUR_UI::session_dialog)); ARDOUR::Session::Dialog.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::session_dialog));
/* handle pending state with a dialog */ /* handle pending state with a dialog */
ARDOUR::Session::AskAboutPendingState.connect (sigc::mem_fun(*this, &ARDOUR_UI::pending_state_dialog)); ARDOUR::Session::AskAboutPendingState.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::pending_state_dialog));
/* handle sr mismatch with a dialog */ /* handle sr mismatch with a dialog */
ARDOUR::Session::AskAboutSampleRateMismatch.connect (sigc::mem_fun(*this, &ARDOUR_UI::sr_mismatch_dialog)); ARDOUR::Session::AskAboutSampleRateMismatch.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::sr_mismatch_dialog));
/* lets get this party started */ /* lets get this party started */
@ -329,10 +329,10 @@ ARDOUR_UI::create_engine ()
return -1; return -1;
} }
engine->Stopped.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_stopped)); engine->Stopped.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::engine_stopped));
engine->Running.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_running)); engine->Running.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::engine_running));
engine->Halted.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_halted)); engine->Halted.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::engine_halted));
engine->SampleRateChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::update_sample_rate)); engine->SampleRateChanged.connect (forever_connections, sigc::mem_fun(*this, &ARDOUR_UI::update_sample_rate));
post_engine (); post_engine ();
@ -407,7 +407,7 @@ ARDOUR_UI::post_engine ()
update_cpu_load (); update_cpu_load ();
update_sample_rate (engine->frame_rate()); update_sample_rate (engine->frame_rate());
Config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed)); Config->ParameterChanged.connect (forever_connections, sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
Config->map_parameters (pc); Config->map_parameters (pc);

View file

@ -694,6 +694,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void platform_specific (); void platform_specific ();
void platform_setup (); void platform_setup ();
void fontconfig_dialog (); void fontconfig_dialog ();
PBD::ScopedConnectionList forever_connections;
}; };
#endif /* __ardour_gui_h__ */ #endif /* __ardour_gui_h__ */

View file

@ -113,15 +113,14 @@ ARDOUR_UI::set_session (Session *s)
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_blink)); Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_blink));
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink)); Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink));
_session_connections.add_connection (_session->Xrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::xrun_handler))); _session->Xrun.connect (_session_connections, sigc::mem_fun(*this, &ARDOUR_UI::xrun_handler));
_session_connections.add_connection (_session->RecordStateChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::record_state_changed))); _session->RecordStateChanged.connect (_session_connections, sigc::mem_fun (*this, &ARDOUR_UI::record_state_changed));
_session_connections.add_connection (_session->locations()->added.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change))); _session->locations()->added.connect (_session_connections, sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change));
_session_connections.add_connection (_session->locations()->removed.connect (sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change))); _session->locations()->removed.connect (_session_connections, sigc::mem_fun (*this, &ARDOUR_UI::handle_locations_change));
_session_connections.add_connection (_session->TransportStateChange.connect (sigc::mem_fun(*this, &ARDOUR_UI::map_transport_state))); _session->TransportStateChange.connect (_session_connections, sigc::mem_fun(*this, &ARDOUR_UI::map_transport_state));
_session_connections.add_connection (_session->AuditionActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::auditioning_changed))); _session->AuditionActive.connect (_session_connections, sigc::mem_fun(*this, &ARDOUR_UI::auditioning_changed));
_session_connections.add_connection (_session->SoloActive.connect (sigc::mem_fun(*this, &ARDOUR_UI::soloing_changed))); _session->SoloActive.connect (_session_connections, sigc::mem_fun(*this, &ARDOUR_UI::soloing_changed));
_session_connections.add_connection (_session->DirtyChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::update_autosave))); _session->DirtyChanged.connect (_session_connections, sigc::mem_fun(*this, &ARDOUR_UI::update_autosave));
/* Clocks are on by default after we are connected to a session, so show that here. /* Clocks are on by default after we are connected to a session, so show that here.
*/ */

View file

@ -270,7 +270,7 @@ ARDOUR_UI::toggle_editing_space()
void void
ARDOUR_UI::setup_session_options () ARDOUR_UI::setup_session_options ()
{ {
_session->config.ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed)); _session->config.ParameterChanged.connect (_session_connections, sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
boost::function<void (std::string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); boost::function<void (std::string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
_session->config.map_parameters (pc); _session->config.map_parameters (pc);
} }

View file

@ -214,7 +214,7 @@ AudioClock::AudioClock (std::string clock_name, bool transient, std::string widg
clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
clock_base.signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &AudioClock::field_button_release_event), Timecode_Hours)); clock_base.signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &AudioClock::field_button_release_event), Timecode_Hours));
Session::TimecodeOffsetChanged.connect (sigc::mem_fun (*this, &AudioClock::timecode_offset_changed)); Session::TimecodeOffsetChanged.connect (_session_connections, sigc::mem_fun (*this, &AudioClock::timecode_offset_changed));
if (editable) { if (editable) {
setup_events (); setup_events ();

View file

@ -155,7 +155,7 @@ AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr<AudioRegion>
bounds_changed (Change (StartChanged|LengthChanged|PositionChanged|Region::SyncOffsetChanged)); bounds_changed (Change (StartChanged|LengthChanged|PositionChanged|Region::SyncOffsetChanged));
gain_changed (); gain_changed ();
_region->StateChanged.connect (sigc::mem_fun(*this, &AudioRegionEditor::region_changed)); _region->StateChanged.connect (state_connection, sigc::mem_fun(*this, &AudioRegionEditor::region_changed));
spin_arrow_grab = false; spin_arrow_grab = false;
@ -228,7 +228,7 @@ AudioRegionEditor::connect_editor_events ()
gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &AudioRegionEditor::gain_adjustment_changed)); gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &AudioRegionEditor::gain_adjustment_changed));
audition_button.signal_toggled().connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_button_toggled)); audition_button.signal_toggled().connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_button_toggled));
_session->AuditionActive.connect (sigc::mem_fun(*this, &AudioRegionEditor::audition_state_changed)); _session->AuditionActive.connect (audition_connection, sigc::mem_fun(*this, &AudioRegionEditor::audition_state_changed));
} }
void void

View file

@ -35,7 +35,8 @@
#include <gtkmm/spinbutton.h> #include <gtkmm/spinbutton.h>
#include <libgnomecanvas/libgnomecanvas.h> #include <libgnomecanvas/libgnomecanvas.h>
#include <sigc++/signal.h>
#include "pbd/signals.h"
#include "audio_clock.h" #include "audio_clock.h"
#include "ardour_dialog.h" #include "ardour_dialog.h"
@ -94,6 +95,9 @@ class AudioRegionEditor : public RegionEditor
Gtk::VSeparator sep1; Gtk::VSeparator sep1;
Gtk::VSeparator sep2; Gtk::VSeparator sep2;
PBD::ScopedConnection state_connection;
PBD::ScopedConnection audition_connection;
void region_changed (ARDOUR::Change); void region_changed (ARDOUR::Change);
void bounds_changed (ARDOUR::Change); void bounds_changed (ARDOUR::Change);
void name_changed (); void name_changed ();

View file

@ -1186,7 +1186,7 @@ AudioRegionView::add_ghost (TimeAxisView& tv)
ghost->set_colors(); ghost->set_colors();
ghosts.push_back (ghost); ghosts.push_back (ghost);
ghost->GoingAway.connect (boost::bind (&RegionView::remove_ghost, this, _1)); ghost->GoingAway.connect (*this, boost::bind (&RegionView::remove_ghost, this, _1));
return ghost; return ghost;
} }

View file

@ -66,7 +66,7 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
use_rec_regions = tv.editor().show_waveforms_recording (); use_rec_regions = tv.editor().show_waveforms_recording ();
Config->ParameterChanged.connect (sigc::mem_fun (*this, &AudioStreamView::parameter_changed)); Config->ParameterChanged.connect (*this, sigc::mem_fun (*this, &AudioStreamView::parameter_changed));
} }
AudioStreamView::~AudioStreamView () AudioStreamView::~AudioStreamView ()
@ -190,7 +190,7 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
/* catch region going away */ /* catch region going away */
scoped_connect (r->GoingAway, boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r))); r->GoingAway.connect (*this, boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r)));
RegionViewAdded (region_view); RegionViewAdded (region_view);
@ -281,12 +281,14 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
{ {
ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_changed_weak, boost::weak_ptr<Diskstream> (ds)); ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_changed_weak, boost::weak_ptr<Diskstream> (ds));
playlist_connections.drop_connections ();
StreamView::playlist_changed(ds); StreamView::playlist_changed(ds);
boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist()); boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(ds->playlist());
if (apl) { if (apl) {
playlist_connections.add_connection (apl->NewCrossfade.connect (boost::bind (&AudioStreamView::add_crossfade, this, _1))); apl->NewCrossfade.connect (playlist_connections, boost::bind (&AudioStreamView::add_crossfade, this, _1));
} }
} }
@ -345,7 +347,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
region_color, region_color,
*lview, *rview); *lview, *rview);
cv->set_valid (true); cv->set_valid (true);
crossfade->Invalidated.connect (sigc::mem_fun (*this, &AudioStreamView::remove_crossfade)); crossfade->Invalidated.connect (*this, sigc::mem_fun (*this, &AudioStreamView::remove_crossfade));
crossfade_views[cv->crossfade] = cv; crossfade_views[cv->crossfade] = cv;
if (!_trackview.session()->config.get_xfades_visible() || !crossfades_visible) { if (!_trackview.session()->config.get_xfades_visible() || !crossfades_visible) {
cv->hide (); cv->hide ();
@ -481,9 +483,9 @@ AudioStreamView::setup_rec_box ()
if (src) { if (src) {
sources.push_back (src); sources.push_back (src);
rec_data_ready_connections.add_connection (src->PeakRangeReady.connect (rec_data_ready_connections,
(src->PeakRangeReady.connect boost::bind (&AudioStreamView::rec_peak_range_ready,
(boost::bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr<Source>(src)))); this, _1, _2, boost::weak_ptr<Source>(src))));
} }
} }

View file

@ -108,9 +108,7 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
} }
if (_route->panner()) { if (_route->panner()) {
_route->panner()->Changed.connect (sigc::bind ( _route->panner()->Changed.connect (*this, (boost::bind (&AudioTimeAxisView::ensure_pan_views, this, false)));
sigc::mem_fun(*this, &AudioTimeAxisView::ensure_pan_views),
false));
} }
/* map current state of the route */ /* map current state of the route */

View file

@ -54,7 +54,7 @@ AutomationController::AutomationController(boost::shared_ptr<AutomationControl>
_screen_update_connection = ARDOUR_UI::RapidScreenUpdate.connect ( _screen_update_connection = ARDOUR_UI::RapidScreenUpdate.connect (
sigc::mem_fun (*this, &AutomationController::display_effective_value)); sigc::mem_fun (*this, &AutomationController::display_effective_value));
ac->Changed.connect (sigc::mem_fun(*this, &AutomationController::value_changed)); ac->Changed.connect (_changed_connection, sigc::mem_fun(*this, &AutomationController::value_changed));
} }
AutomationController::~AutomationController() AutomationController::~AutomationController()

View file

@ -23,7 +23,9 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <gtkmm.h> #include <gtkmm.h>
#include <gtkmm2ext/barcontroller.h>
#include "gtkmm2ext/barcontroller.h"
#include "pbd/signals.h"
namespace ARDOUR { namespace ARDOUR {
class Session; class Session;
@ -63,6 +65,7 @@ private:
boost::shared_ptr<ARDOUR::AutomationControl> _controllable; boost::shared_ptr<ARDOUR::AutomationControl> _controllable;
Gtk::Adjustment* _adjustment; Gtk::Adjustment* _adjustment;
sigc::connection _screen_update_connection; sigc::connection _screen_update_connection;
PBD::ScopedConnection _changed_connection;
}; };

View file

@ -85,7 +85,7 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanv
line->signal_event().connect (sigc::mem_fun (*this, &AutomationLine::event_handler)); line->signal_event().connect (sigc::mem_fun (*this, &AutomationLine::event_handler));
alist->StateChanged.connect (sigc::mem_fun(*this, &AutomationLine::list_changed)); alist->StateChanged.connect (_state_connection, boost::bind (&AutomationLine::list_changed, this));
trackview.session()->register_with_memento_command_factory(alist->id(), this); trackview.session()->register_with_memento_command_factory(alist->id(), this);

View file

@ -171,6 +171,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
void reset_callback (const Evoral::ControlList&); void reset_callback (const Evoral::ControlList&);
void list_changed (); void list_changed ();
PBD::ScopedConnection _state_connection;
virtual bool event_handler (GdkEvent*); virtual bool event_handler (GdkEvent*);
virtual void add_model_point (ALPoints& tmp_points, double frame, double yfract); virtual void add_model_point (ALPoints& tmp_points, double frame, double yfract);

View file

@ -59,7 +59,7 @@ AutomationRegionView::init (Gdk::Color const & basic_color, bool /*wfd*/)
set_height (trackview.current_height()); set_height (trackview.current_height());
_region->StateChanged.connect (sigc::mem_fun(*this, &AutomationRegionView::region_changed)); _region->StateChanged.connect (*this, boost::bind (&RegionView::region_changed, this, _1));
set_colors (); set_colors ();

View file

@ -129,7 +129,7 @@ AutomationStreamView::add_region_view_internal (boost::shared_ptr<Region> region
display_region(region_view); display_region(region_view);
/* catch regionview going away */ /* catch regionview going away */
scoped_connect (region->GoingAway, boost::bind (&AutomationStreamView::remove_region_view, this, boost::weak_ptr<Region>(region))); region->GoingAway.connect (*this, boost::bind (&AutomationStreamView::remove_region_view, this, boost::weak_ptr<Region>(region)));
RegionViewAdded (region_view); RegionViewAdded (region_view);

View file

@ -833,8 +833,7 @@ AutomationTimeAxisView::add_line (boost::shared_ptr<AutomationLine> line)
assert(!_line); assert(!_line);
assert(line->the_list() == _control->list()); assert(line->the_list() == _control->list());
automation_connection = _control->alist()->automation_state_changed.connect _control->alist()->automation_state_changed.connect (automation_connection, boost::bind (&AutomationTimeAxisView::automation_state_changed, this));
(boost::bind (&AutomationTimeAxisView::automation_state_changed, this));
_line = line; _line = line;
//_controller = AutomationController::create(_session, line->the_list(), _control); //_controller = AutomationController::create(_session, line->the_list(), _control);

View file

@ -395,7 +395,7 @@ BundleManager::add_bundle (boost::shared_ptr<Bundle> b)
(*i)[_list_model_columns.name] = u->name (); (*i)[_list_model_columns.name] = u->name ();
(*i)[_list_model_columns.bundle] = u; (*i)[_list_model_columns.bundle] = u;
u->Changed.connect (sigc::bind (sigc::mem_fun (*this, &BundleManager::bundle_changed), u)); u->Changed.connect (bundle_connections, boost::bind (&BundleManager::bundle_changed, this, _1, u));
} }
void void

View file

@ -117,6 +117,7 @@ class BundleManager : public ArdourDialog
ModelColumns _list_model_columns; ModelColumns _list_model_columns;
Gtk::Button edit_button; Gtk::Button edit_button;
Gtk::Button delete_button; Gtk::Button delete_button;
PBD::ScopedConnectionList bundle_connections;
}; };
class NameChannelDialog : public ArdourDialog class NameChannelDialog : public ArdourDialog

View file

@ -291,9 +291,9 @@ CrossfadeEditor::CrossfadeEditor (Session* s, boost::shared_ptr<Crossfade> xf, d
curve_select_clicked (In); curve_select_clicked (In);
xfade->StateChanged.connect (sigc::mem_fun(*this, &CrossfadeEditor::xfade_changed)); xfade->StateChanged.connect (state_connection, boost::bind (&CrossfadeEditor::xfade_changed, this, _1));
_session_connections.add_connection (_session->AuditionActive.connect (sigc::mem_fun(*this, &CrossfadeEditor::audition_state_changed))); _session->AuditionActive.connect (_session_connections, sigc::mem_fun(*this, &CrossfadeEditor::audition_state_changed));
show_all_children(); show_all_children();
} }

View file

@ -183,7 +183,8 @@ class CrossfadeEditor : public ArdourDialog
void set (const ARDOUR::AutomationList& alist, WhichFade); void set (const ARDOUR::AutomationList& alist, WhichFade);
boost::signals2::scoped_connection peaks_ready_connection; PBD::ScopedConnection peaks_ready_connection;
PBD::ScopedConnection state_connection;
void make_waves (boost::shared_ptr<ARDOUR::AudioRegion>, WhichFade); void make_waves (boost::shared_ptr<ARDOUR::AudioRegion>, WhichFade);
void peaks_ready (boost::weak_ptr<ARDOUR::AudioRegion> r, WhichFade); void peaks_ready (boost::weak_ptr<ARDOUR::AudioRegion> r, WhichFade);

View file

@ -39,7 +39,7 @@ using namespace Editing;
using namespace Gnome; using namespace Gnome;
using namespace Canvas; using namespace Canvas;
boost::signals2::signal<void(CrossfadeView*)> CrossfadeView::GoingAway; PBD::Signal1<void,CrossfadeView*> CrossfadeView::GoingAway;
CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent, CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
RouteTimeAxisView &tv, RouteTimeAxisView &tv,
@ -83,7 +83,7 @@ CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
crossfade_changed (Change (~0)); crossfade_changed (Change (~0));
crossfade->StateChanged.connect (sigc::mem_fun(*this, &CrossfadeView::crossfade_changed)); crossfade->StateChanged.connect (*this, sigc::mem_fun(*this, &CrossfadeView::crossfade_changed));
ColorsChanged.connect (sigc::mem_fun (*this, &CrossfadeView::color_handler)); ColorsChanged.connect (sigc::mem_fun (*this, &CrossfadeView::color_handler));
} }

View file

@ -22,7 +22,7 @@
#include <vector> #include <vector>
#include <libgnomecanvasmm.h> #include <libgnomecanvasmm.h>
#include <boost/signals2.hpp> #include "pbd/signals.h"
#include "ardour/crossfade.h" #include "ardour/crossfade.h"
#include "time_axis_view_item.h" #include "time_axis_view_item.h"
@ -52,7 +52,7 @@ struct CrossfadeView : public TimeAxisViewItem
bool visible() const { return _visible; } bool visible() const { return _visible; }
void set_valid (bool yn); void set_valid (bool yn);
static boost::signals2::signal<void(CrossfadeView*)> GoingAway; static PBD::Signal1<void,CrossfadeView*> GoingAway;
AudioRegionView& upper_regionview () const; AudioRegionView& upper_regionview () const;

View file

@ -627,7 +627,7 @@ Editor::Editor ()
_playlist_selector = new PlaylistSelector(); _playlist_selector = new PlaylistSelector();
_playlist_selector->signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (_playlist_selector))); _playlist_selector->signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (_playlist_selector)));
scoped_connect (RegionView::RegionViewGoingAway, boost::bind (&Editor::catch_vanishing_regionview, this, _1)); RegionView::RegionViewGoingAway.connect (*this, boost::bind (&Editor::catch_vanishing_regionview, this, _1));
/* nudge stuff */ /* nudge stuff */
@ -677,13 +677,13 @@ Editor::Editor ()
/* allow external control surfaces/protocols to do various things */ /* allow external control surfaces/protocols to do various things */
ControlProtocol::ZoomToSession.connect (sigc::mem_fun (*this, &Editor::temporal_zoom_session)); ControlProtocol::ZoomToSession.connect (*this, boost::bind (&Editor::temporal_zoom_session, this));
ControlProtocol::ZoomIn.connect (sigc::bind (sigc::mem_fun (*this, &Editor::temporal_zoom_step), false)); ControlProtocol::ZoomIn.connect (*this, boost::bind (&Editor::temporal_zoom_step, this, false));
ControlProtocol::ZoomOut.connect (sigc::bind (sigc::mem_fun (*this, &Editor::temporal_zoom_step), true)); ControlProtocol::ZoomOut.connect (*this, boost::bind (&Editor::temporal_zoom_step, this, true));
ControlProtocol::ScrollTimeline.connect (sigc::mem_fun (*this, &Editor::control_scroll)); ControlProtocol::ScrollTimeline.connect (*this, boost::bind (&Editor::control_scroll, this, _1));
BasicUI::AccessAction.connect (sigc::mem_fun (*this, &Editor::access_action)); BasicUI::AccessAction.connect (*this, boost::bind (&Editor::access_action, this, _1, _2));
Config->ParameterChanged.connect (sigc::mem_fun (*this, &Editor::parameter_changed)); Config->ParameterChanged.connect (*this, boost::bind (&Editor::parameter_changed, this, _1));
_last_normalization_value = 0; _last_normalization_value = 0;
@ -1075,24 +1075,24 @@ Editor::set_session (Session *t)
update_title (); update_title ();
_session_connections.add_connection (_session->history().Changed.connect (boost::bind (&Editor::history_changed, this))); _session->history().Changed.connect (_session_connections, boost::bind (&Editor::history_changed, this));
/* These signals can all be emitted by a non-GUI thread. Therefore the /* These signals can all be emitted by a non-GUI thread. Therefore the
handlers for them must not attempt to directly interact with the GUI, handlers for them must not attempt to directly interact with the GUI,
but use Gtkmm2ext::UI::instance()->call_slot(); but use Gtkmm2ext::UI::instance()->call_slot();
*/ */
_session_connections.add_connection (_session->TransportStateChange.connect (boost::bind (&Editor::map_transport_state, this))); _session->TransportStateChange.connect (_session_connections, boost::bind (&Editor::map_transport_state, this));
_session_connections.add_connection (_session->PositionChanged.connect (boost::bind (&Editor::map_position_change, this, _1))); _session->PositionChanged.connect (_session_connections, boost::bind (&Editor::map_position_change, this, _1));
_session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&Editor::handle_new_route, this, _1))); _session->RouteAdded.connect (_session_connections, boost::bind (&Editor::handle_new_route, this, _1));
_session_connections.add_connection (_session->DurationChanged.connect (boost::bind (&Editor::handle_new_duration, this))); _session->DurationChanged.connect (_session_connections, boost::bind (&Editor::handle_new_duration, this));
_session_connections.add_connection (_session->DirtyChanged.connect (boost::bind (&Editor::update_title, this))); _session->DirtyChanged.connect (_session_connections, boost::bind (&Editor::update_title, this));
_session_connections.add_connection (_session->StateSaved.connect (boost::bind (&Editor::update_title, this))); _session->StateSaved.connect (_session_connections, boost::bind (&Editor::update_title, this));
_session_connections.add_connection (_session->AskAboutPlaylistDeletion.connect (boost::bind (&Editor::playlist_deletion_dialog, this, _1))); _session->AskAboutPlaylistDeletion.connect (_session_connections, boost::bind (&Editor::playlist_deletion_dialog, this, _1));
_session_connections.add_connection (_session->TimecodeOffsetChanged.connect (boost::bind (&Editor::update_just_timecode, this))); _session->TimecodeOffsetChanged.connect (_session_connections, boost::bind (&Editor::update_just_timecode, this));
_session_connections.add_connection (_session->tempo_map().StateChanged.connect (boost::bind (&Editor::tempo_map_changed, this, _1))); _session->tempo_map().StateChanged.connect (_session_connections, boost::bind (&Editor::tempo_map_changed, this, _1));
_session_connections.add_connection (_session->Located.connect (boost::bind (&Editor::located, this))); _session->Located.connect (_session_connections, boost::bind (&Editor::located, this));
_session_connections.add_connection (_session->config.ParameterChanged.connect (boost::bind (&Editor::parameter_changed, this, _1))); _session->config.ParameterChanged.connect (_session_connections, boost::bind (&Editor::parameter_changed, this, _1));
if (Profile->get_sae()) { if (Profile->get_sae()) {
BBT_Time bbt; BBT_Time bbt;
@ -1144,13 +1144,13 @@ Editor::set_session (Session *t)
/* static signal - no need to drop connection when session is deleted (XXX or we are?)*/ /* static signal - no need to drop connection when session is deleted (XXX or we are?)*/
_session->StateSaved.connect (sigc::mem_fun(*this, &Editor::session_state_saved)); _session->StateSaved.connect (*this, boost::bind (&Editor::session_state_saved, this, _1));
_session_connections.add_connection (_session->locations()->added.connect (sigc::mem_fun(*this, &Editor::add_new_location))); _session->locations()->added.connect (_session_connections, sigc::mem_fun(*this, &Editor::add_new_location));
_session_connections.add_connection (_session->locations()->removed.connect (sigc::mem_fun(*this, &Editor::location_gone))); _session->locations()->removed.connect (_session_connections, sigc::mem_fun(*this, &Editor::location_gone));
_session_connections.add_connection (_session->locations()->changed.connect (sigc::mem_fun(*this, &Editor::refresh_location_display))); _session->locations()->changed.connect (_session_connections, sigc::mem_fun(*this, &Editor::refresh_location_display));
_session_connections.add_connection (_session->locations()->StateChanged.connect (sigc::mem_fun(*this, &Editor::refresh_location_display_s))); _session->locations()->StateChanged.connect (_session_connections, sigc::mem_fun(*this, &Editor::refresh_location_display_s));
_session_connections.add_connection (_session->locations()->end_location()->changed.connect (sigc::mem_fun(*this, &Editor::end_location_changed))); _session->locations()->end_location()->changed.connect (_session_connections, sigc::mem_fun(*this, &Editor::end_location_changed));
handle_new_duration (); handle_new_duration ();
@ -3135,26 +3135,6 @@ Editor::State::~State ()
delete selection; delete selection;
} }
void
Editor::store_state (State& state) const
{
*state.selection = *selection;
}
void
Editor::restore_state (State *state)
{
if (*selection == *state->selection) {
return;
}
*selection = *state->selection;
time_selection_changed ();
region_selection_changed ();
/* XXX other selection change handlers? */
}
void void
Editor::begin_reversible_command (string name) Editor::begin_reversible_command (string name)
{ {
@ -4829,7 +4809,7 @@ Editor::handle_new_route (RouteList& routes)
rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added)); rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added));
rtv->view()->HeightChanged.connect (sigc::mem_fun (*this, &Editor::streamview_height_changed)); rtv->view()->HeightChanged.connect (sigc::mem_fun (*this, &Editor::streamview_height_changed));
scoped_connect (rtv->GoingAway, boost::bind (&Editor::remove_route, this, rtv)); rtv->GoingAway.connect (*this, boost::bind (&Editor::remove_route, this, rtv));
} }
_routes->routes_added (new_views); _routes->routes_added (new_views);

View file

@ -46,7 +46,7 @@
#include <gtkmm2ext/dndtreeview.h> #include <gtkmm2ext/dndtreeview.h>
#include "pbd/stateful.h" #include "pbd/stateful.h"
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/import_status.h" #include "ardour/import_status.h"
#include "ardour/tempo.h" #include "ardour/tempo.h"
@ -154,7 +154,7 @@ struct EditorCursor {
void set_length (double units); void set_length (double units);
void set_y_axis (double position); void set_y_axis (double position);
sigc::signal<void, nframes64_t> PositionChanged; PBD::Signal1<void, nframes64_t> PositionChanged;
}; };
class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
@ -1756,9 +1756,6 @@ public:
~State (); ~State ();
}; };
void store_state (State&) const;
void restore_state (State *);
void instant_save (); void instant_save ();
boost::shared_ptr<ARDOUR::AudioRegion> last_audition_region; boost::shared_ptr<ARDOUR::AudioRegion> last_audition_region;

View file

@ -237,7 +237,7 @@ RegionDrag::RegionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<Re
_primary (p), _primary (p),
_views (v) _views (v)
{ {
death_connection = RegionView::RegionViewGoingAway.connect (sigc::mem_fun (*this, &RegionDrag::region_going_away)); RegionView::RegionViewGoingAway.connect (death_connection, boost::bind (&RegionDrag::region_going_away, this, _1));
} }
void void

View file

@ -1092,7 +1092,7 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
row[route_display_columns.tv] = iftav; row[route_display_columns.tv] = iftav;
route_list_display.get_selection()->select (row); route_list_display.get_selection()->select (row);
scoped_connect (iftav->GoingAway, boost::bind (&Editor::remove_route, this, (TimeAxisView*)iftav)); iftav->GoingAway.connect (*this, boost::bind (&Editor::remove_route, this, (TimeAxisView*)iftav));
iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ; iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ;
} }
@ -1109,7 +1109,7 @@ Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, T
row[route_display_columns.tv] = mta; row[route_display_columns.tv] = mta;
route_list_display.get_selection()->select (row); route_list_display.get_selection()->select (row);
scoped_connect (mta->GoingAway, boost::bind (&Editor::remove_route, this, (TimeAxisView*)mta)); mta->GoingAway.connect (*this, boost::bind (&Editor::remove_route, this, (TimeAxisView*)mta));
} }

View file

@ -123,11 +123,11 @@ Editor::add_new_location (Location *location)
lam->show (); lam->show ();
} }
location->start_changed.connect (sigc::mem_fun(*this, &Editor::location_changed)); location->start_changed.connect (*this, boost::bind (&Editor::location_changed, this, _1));
location->end_changed.connect (sigc::mem_fun(*this, &Editor::location_changed)); location->end_changed.connect (*this, boost::bind (&Editor::location_changed, this, _1));
location->changed.connect (sigc::mem_fun(*this, &Editor::location_changed)); location->changed.connect (*this, boost::bind (&Editor::location_changed, this, _1));
location->name_changed.connect (sigc::mem_fun(*this, &Editor::location_changed)); location->name_changed.connect (*this, boost::bind (&Editor::location_changed, this, _1));
location->FlagsChanged.connect (sigc::mem_fun(*this, &Editor::location_flags_changed)); location->FlagsChanged.connect (*this, boost::bind (&Editor::location_flags_changed, this, _1, _2));
pair<Location*,LocationMarkers*> newpair; pair<Location*,LocationMarkers*> newpair;

View file

@ -168,7 +168,7 @@ Editor::create_editor_mixer ()
_session, _session,
false); false);
current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden)); current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden));
scoped_connect (current_mixer_strip->GoingAway, boost::bind (&Editor::current_mixer_strip_removed, this)); current_mixer_strip->GoingAway.connect (*this, boost::bind (&Editor::current_mixer_strip_removed, this));
#ifdef GTKOSX #ifdef GTKOSX
current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn)); current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn));
#endif #endif

View file

@ -125,7 +125,7 @@ EditorRegions::EditorRegions (Editor* e)
//ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (sigc::mem_fun(*this, &Editor::redisplay_regions)); //ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (sigc::mem_fun(*this, &Editor::redisplay_regions));
ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (sigc::mem_fun(*this, &EditorRegions::update_all_rows)); ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (sigc::mem_fun(*this, &EditorRegions::update_all_rows));
ARDOUR::Region::RegionPropertyChanged.connect (sigc::mem_fun(*this, &EditorRegions::update_row)); ARDOUR::Region::RegionPropertyChanged.connect (region_property_connection, sigc::mem_fun(*this, &EditorRegions::update_row));
} }
@ -135,9 +135,9 @@ EditorRegions::set_session (ARDOUR::Session* s)
EditorComponent::set_session (s); EditorComponent::set_session (s);
if (_session) { if (_session) {
_session_connections.add_connection (_session->RegionsAdded.connect (boost::bind (&EditorRegions::handle_new_regions, this, _1))); _session->RegionsAdded.connect (_session_connections, boost::bind (&EditorRegions::handle_new_regions, this, _1));
_session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorRegions::handle_region_removed, this, _1))); _session->RegionRemoved.connect (_session_connections, boost::bind (&EditorRegions::handle_region_removed, this, _1));
_session_connections.add_connection (_session->RegionHiddenChange.connect (boost::bind (&EditorRegions::region_hidden, this, _1))); _session->RegionHiddenChange.connect (_session_connections, boost::bind (&EditorRegions::region_hidden, this, _1));
} }
redisplay (); redisplay ();

View file

@ -149,6 +149,7 @@ private:
Editing::RegionListSortType _sort_type; Editing::RegionListSortType _sort_type;
bool _no_redisplay; bool _no_redisplay;
std::list<boost::shared_ptr<ARDOUR::Region> > tmp_region_list; std::list<boost::shared_ptr<ARDOUR::Region> > tmp_region_list;
PBD::ScopedConnection region_property_connection;
}; };
#endif /* __gtk_ardour_editor_regions_h__ */ #endif /* __gtk_ardour_editor_regions_h__ */

View file

@ -574,7 +574,7 @@ EditorRouteGroups::add (RouteGroup* group)
focus = true; focus = true;
} }
group->FlagsChanged.connect (sigc::bind (sigc::mem_fun (*this, &EditorRouteGroups::flags_changed), group)); group->FlagsChanged.connect (flags_connection, boost::bind (&EditorRouteGroups::flags_changed, this, _1, group));
if (focus) { if (focus) {
TreeViewColumn* col = _display.get_column (0); TreeViewColumn* col = _display.get_column (0);
@ -668,8 +668,8 @@ EditorRouteGroups::set_session (Session* s)
EditorComponent::set_session (s); EditorComponent::set_session (s);
if (_session) { if (_session) {
_session_connections.add_connection (_session->route_group_added.connect (boost::bind (&EditorRouteGroups::add, this, _1))); _session->route_group_added.connect (_session_connections, boost::bind (&EditorRouteGroups::add, this, _1));
_session_connections.add_connection (_session->route_group_removed.connect (boost::bind (&EditorRouteGroups::groups_changed, this))); _session->route_group_removed.connect (_session_connections, boost::bind (&EditorRouteGroups::groups_changed, this));
} }
groups_changed (); groups_changed ();

View file

@ -93,6 +93,7 @@ private:
Gtk::ScrolledWindow _scroller; Gtk::ScrolledWindow _scroller;
Gtk::VBox* _display_packer; Gtk::VBox* _display_packer;
bool _in_row_change; bool _in_row_change;
PBD::ScopedConnection flags_connection;
}; };

View file

@ -150,7 +150,7 @@ EditorRoutes::EditorRoutes (Editor* e)
_model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered)); _model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered));
_display.signal_button_press_event().connect (sigc::mem_fun (*this, &EditorRoutes::button_press), false); _display.signal_button_press_event().connect (sigc::mem_fun (*this, &EditorRoutes::button_press), false);
scoped_connect (Route::SyncOrderKeys, (sigc::mem_fun (*this, &EditorRoutes::sync_order_keys))); Route::SyncOrderKeys.connect (*this, (sigc::mem_fun (*this, &EditorRoutes::sync_order_keys)));
} }
void void
@ -161,7 +161,7 @@ EditorRoutes::set_session (Session* s)
initial_display (); initial_display ();
if (_session) { if (_session) {
scoped_connect (_session->SoloChanged, (sigc::mem_fun (*this, &EditorRoutes::solo_changed_so_update_mute))); _session->SoloChanged.connect (*this, (sigc::mem_fun (*this, &EditorRoutes::solo_changed_so_update_mute)));
} }
} }
@ -383,18 +383,18 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
boost::weak_ptr<Route> wr ((*x)->route()); boost::weak_ptr<Route> wr ((*x)->route());
scoped_connect ((*x)->route()->gui_changed, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2)); (*x)->route()->gui_changed.connect (*this, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2));
scoped_connect ((*x)->route()->NameChanged, boost::bind (&EditorRoutes::route_name_changed, this, wr)); (*x)->route()->NameChanged.connect (*this, boost::bind (&EditorRoutes::route_name_changed, this, wr));
scoped_connect ((*x)->GoingAway, boost::bind (&EditorRoutes::route_removed, this, *x)); (*x)->GoingAway.connect (*this, boost::bind (&EditorRoutes::route_removed, this, *x));
if ((*x)->is_track()) { if ((*x)->is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> ((*x)->route()); boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> ((*x)->route());
scoped_connect (t->diskstream()->RecordEnableChanged, boost::bind (&EditorRoutes::update_rec_display, this)); t->diskstream()->RecordEnableChanged.connect (*this, boost::bind (&EditorRoutes::update_rec_display, this));
} }
scoped_connect ((*x)->route()->mute_changed, boost::bind (&EditorRoutes::update_mute_display, this)); (*x)->route()->mute_changed.connect (*this, boost::bind (&EditorRoutes::update_mute_display, this));
scoped_connect ((*x)->route()->solo_changed, boost::bind (&EditorRoutes::update_solo_display, this)); (*x)->route()->solo_changed.connect (*this, boost::bind (&EditorRoutes::update_solo_display, this));
scoped_connect ((*x)->route()->solo_isolated_changed, boost::bind (&EditorRoutes::update_solo_isolate_display, this)); (*x)->route()->solo_isolated_changed.connect (*this, boost::bind (&EditorRoutes::update_solo_isolate_display, this));
} }
update_rec_display (); update_rec_display ();

View file

@ -20,7 +20,7 @@
#ifndef __ardour_gtk_editor_route_h__ #ifndef __ardour_gtk_editor_route_h__
#define __ardour_gtk_editor_route_h__ #define __ardour_gtk_editor_route_h__
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "editor_component.h" #include "editor_component.h"
class EditorRoutes : public EditorComponent, public PBD::ScopedConnectionList class EditorRoutes : public EditorComponent, public PBD::ScopedConnectionList

View file

@ -47,8 +47,8 @@ EditorSummary::EditorSummary (Editor* e)
_zoom_dragging (false) _zoom_dragging (false)
{ {
Region::RegionPropertyChanged.connect (sigc::hide (sigc::mem_fun (*this, &EditorSummary::set_dirty))); Region::RegionPropertyChanged.connect (region_property_connection, boost::bind (&CairoWidget::set_dirty, this));
_editor->playhead_cursor->PositionChanged.connect (sigc::mem_fun (*this, &EditorSummary::playhead_position_changed)); _editor->playhead_cursor->PositionChanged.connect (position_connection, boost::bind (&EditorSummary::playhead_position_changed, this, _1));
} }
/** Connect to a session. /** Connect to a session.
@ -62,9 +62,9 @@ EditorSummary::set_session (Session* s)
set_dirty (); set_dirty ();
if (_session) { if (_session) {
_session_connections.add_connection (_session->RegionRemoved.connect (boost::bind (&EditorSummary::set_dirty, this))); _session->RegionRemoved.connect (_session_connections, boost::bind (&EditorSummary::set_dirty, this));
_session_connections.add_connection (_session->StartTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); _session->StartTimeChanged.connect (_session_connections, boost::bind (&EditorSummary::set_dirty, this));
_session_connections.add_connection (_session->EndTimeChanged.connect (boost::bind (&EditorSummary::set_dirty, this))); _session->EndTimeChanged.connect (_session_connections, boost::bind (&EditorSummary::set_dirty, this));
} }
} }

View file

@ -78,6 +78,9 @@ private:
bool _zoom_dragging; bool _zoom_dragging;
bool _zoom_left; bool _zoom_left;
PBD::ScopedConnectionList position_connection;
PBD::ScopedConnectionList region_property_connection;
}; };
#endif #endif

View file

@ -86,7 +86,7 @@ ExportDialog::set_session (ARDOUR::Session* s)
timespan_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); timespan_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings));
channel_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); channel_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings));
file_notebook->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); file_notebook->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings));
status->Aborting.connect (sigc::mem_fun (*this, &ExportDialog::notify_errors)); status->Aborting.connect (abort_connection, sigc::mem_fun (*this, &ExportDialog::notify_errors));
update_warnings (); update_warnings ();
} }

View file

@ -107,6 +107,7 @@ class ExportDialog : public ArdourDialog {
PublicEditor & editor; PublicEditor & editor;
StatusPtr status; StatusPtr status;
PBD::ScopedConnection abort_connection;
/*** GUI components ***/ /*** GUI components ***/

View file

@ -196,7 +196,7 @@ ExportFileNotebook::FilePage::FilePage (Session * s, ManagerPtr profile_manager,
tab_close_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*parent, &ExportFileNotebook::remove_file_page), this)); tab_close_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*parent, &ExportFileNotebook::remove_file_page), this));
profile_manager->FormatListChanged.connect (sigc::mem_fun (format_selector, &ExportFormatSelector::update_format_list)); profile_manager->FormatListChanged.connect (format_connection, boost::bind (&ExportFormatSelector::update_format_list, &format_selector));
format_selector.FormatEdited.connect (sigc::mem_fun (*this, &ExportFileNotebook::FilePage::save_format_to_manager)); format_selector.FormatEdited.connect (sigc::mem_fun (*this, &ExportFileNotebook::FilePage::save_format_to_manager));
format_selector.FormatRemoved.connect (sigc::mem_fun (*profile_manager, &ExportProfileManager::remove_format_profile)); format_selector.FormatRemoved.connect (sigc::mem_fun (*profile_manager, &ExportProfileManager::remove_format_profile));

View file

@ -97,6 +97,7 @@ class ExportFileNotebook : public Gtk::Notebook, public ARDOUR::SessionHandlePtr
Gtk::Label format_label; Gtk::Label format_label;
Gtk::Alignment format_align; Gtk::Alignment format_align;
ExportFormatSelector format_selector; ExportFormatSelector format_selector;
PBD::ScopedConnection format_connection;
Gtk::Label filename_label; Gtk::Label filename_label;
Gtk::Alignment filename_align; Gtk::Alignment filename_align;

View file

@ -127,7 +127,7 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
close_button = add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_APPLY); close_button = add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_APPLY);
close_button->set_sensitive (false); close_button->set_sensitive (false);
close_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportFormatDialog::end_dialog)); close_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportFormatDialog::end_dialog));
manager.CompleteChanged.connect (sigc::mem_fun (*close_button, &Gtk::Button::set_sensitive)); manager.CompleteChanged.connect (*this, sigc::mem_fun (close_button, &Gtk::Button::set_sensitive));
/* Load state before hooking up the rest of the signals */ /* Load state before hooking up the rest of the signals */
@ -319,7 +319,7 @@ ExportFormatDialog::init_format_table ()
row[compatibility_cols.label] = (*it)->name(); row[compatibility_cols.label] = (*it)->name();
WeakCompatPtr ptr (*it); WeakCompatPtr ptr (*it);
(*it)->SelectChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_compatibility_selection), ptr)); (*it)->SelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_compatibility_selection, this, _1, ptr));
} }
compatibility_view.append_column_editable ("", compatibility_cols.selected); compatibility_view.append_column_editable ("", compatibility_cols.selected);
@ -347,8 +347,8 @@ ExportFormatDialog::init_format_table ()
row[quality_cols.label] = (*it)->name(); row[quality_cols.label] = (*it)->name();
WeakQualityPtr ptr (*it); WeakQualityPtr ptr (*it);
(*it)->SelectChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_quality_selection), ptr)); (*it)->SelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_quality_selection, this, _1, ptr));
(*it)->CompatibleChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_quality_compatibility), ptr)); (*it)->CompatibleChanged.connect (*this, boost::bind (&ExportFormatDialog::change_quality_compatibility, this, _1, ptr));
} }
quality_view.append_column ("", quality_cols.label); quality_view.append_column ("", quality_cols.label);
@ -369,19 +369,19 @@ ExportFormatDialog::init_format_table ()
row[format_cols.label] = (*it)->name(); row[format_cols.label] = (*it)->name();
WeakFormatPtr ptr (*it); WeakFormatPtr ptr (*it);
(*it)->SelectChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_format_selection), ptr)); (*it)->SelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_format_selection, this, _1, ptr));
(*it)->CompatibleChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_format_compatibility), ptr)); (*it)->CompatibleChanged.connect (*this, boost::bind (&ExportFormatDialog::change_format_compatibility, this, _1, ptr));
/* Encoding options */ /* Encoding options */
boost::shared_ptr<HasSampleFormat> hsf; boost::shared_ptr<HasSampleFormat> hsf;
if (hsf = boost::dynamic_pointer_cast<HasSampleFormat> (*it)) { if (hsf = boost::dynamic_pointer_cast<HasSampleFormat> (*it)) {
hsf->SampleFormatSelectChanged.connect (sigc::mem_fun (*this, &ExportFormatDialog::change_sample_format_selection)); hsf->SampleFormatSelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_sample_format_selection, this, _1, _2));
hsf->SampleFormatCompatibleChanged.connect (sigc::mem_fun (*this, &ExportFormatDialog::change_sample_format_compatibility)); hsf->SampleFormatCompatibleChanged.connect (*this, boost::bind (&ExportFormatDialog::change_sample_format_compatibility, this, _1, _2));
hsf->DitherTypeSelectChanged.connect (sigc::mem_fun (*this, &ExportFormatDialog::change_dither_type_selection)); hsf->DitherTypeSelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_dither_type_selection, this, _1, _2));
hsf->DitherTypeCompatibleChanged.connect (sigc::mem_fun (*this, &ExportFormatDialog::change_dither_type_compatibility)); hsf->DitherTypeCompatibleChanged.connect (*this, boost::bind (&ExportFormatDialog::change_dither_type_compatibility, this, _1, _2));
} }
} }
@ -403,8 +403,8 @@ ExportFormatDialog::init_format_table ()
row[sample_rate_cols.label] = (*it)->name(); row[sample_rate_cols.label] = (*it)->name();
WeakSampleRatePtr ptr (*it); WeakSampleRatePtr ptr (*it);
(*it)->SelectChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_sample_rate_selection), ptr)); (*it)->SelectChanged.connect (*this, boost::bind (&ExportFormatDialog::change_sample_rate_selection, this, _1, ptr));
(*it)->CompatibleChanged.connect (sigc::bind (sigc::mem_fun (*this, &ExportFormatDialog::change_sample_rate_compatibility), ptr)); (*it)->CompatibleChanged.connect (*this, boost::bind (&ExportFormatDialog::change_sample_rate_compatibility, this, _1, ptr));
} }
sample_rate_view.append_column ("", sample_rate_cols.label); sample_rate_view.append_column ("", sample_rate_cols.label);

View file

@ -27,13 +27,14 @@
#include "ardour/export_formats.h" #include "ardour/export_formats.h"
#include "pbd/xml++.h" #include "pbd/xml++.h"
#include "pbd/signals.h"
#include "ardour_dialog.h" #include "ardour_dialog.h"
#include "audio_clock.h" #include "audio_clock.h"
#include <gtkmm.h> #include <gtkmm.h>
class ExportFormatDialog : public ArdourDialog { class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList {
private: private:
typedef ARDOUR::ExportFormatManager::WeakCompatPtr WeakCompatPtr; typedef ARDOUR::ExportFormatManager::WeakCompatPtr WeakCompatPtr;

View file

@ -226,13 +226,13 @@ GainMeterBase::set_controls (boost::shared_ptr<Route> r,
boost::shared_ptr<AutomationControl> gc = amp->gain_control(); boost::shared_ptr<AutomationControl> gc = amp->gain_control();
model_connections.add_connection (gc->alist()->automation_state_changed.connect (boost::bind (&GainMeter::gain_automation_state_changed, this))); gc->alist()->automation_state_changed.connect (model_connections, boost::bind (&GainMeter::gain_automation_state_changed, this));
model_connections.add_connection (gc->alist()->automation_style_changed.connect (boost::bind (&GainMeter::gain_automation_style_changed, this))); gc->alist()->automation_style_changed.connect (model_connections, boost::bind (&GainMeter::gain_automation_style_changed, this));
gain_automation_state_changed (); gain_automation_state_changed ();
} }
model_connections.add_connection (amp->gain_control()->Changed.connect (boost::bind (&GainMeterBase::gain_changed, this))); amp->gain_control()->Changed.connect (model_connections, boost::bind (&GainMeterBase::gain_changed, this));
gain_changed (); gain_changed ();
show_gain (); show_gain ();

View file

@ -32,7 +32,7 @@
#include <gtkmm/drawingarea.h> #include <gtkmm/drawingarea.h>
#include <gdkmm/colormap.h> #include <gdkmm/colormap.h>
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/types.h" #include "ardour/types.h"
#include "ardour/session_handle.h" #include "ardour/session_handle.h"

View file

@ -125,8 +125,7 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
main_contents.pack_start (hpacker, false, false); main_contents.pack_start (hpacker, false, false);
} }
pi->ActiveChanged.connect (sigc::bind(sigc::mem_fun(*this, &GenericPluginUI::processor_active_changed), pi->ActiveChanged.connect (active_connection, boost::bind (&GenericPluginUI::processor_active_changed, this, boost::weak_ptr<Processor>(pi)));
boost::weak_ptr<Processor>(pi)));
bypass_button.set_active (!pi->active()); bypass_button.set_active (!pi->active());
@ -421,7 +420,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
//control_ui->combo->set_value_in_list(true, false); //control_ui->combo->set_value_in_list(true, false);
set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui)); set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui));
control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui)); control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
mcontrol->Changed.connect (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui)); mcontrol->Changed.connect (control_connections, boost::bind (&GenericPluginUI::parameter_changed, this, control_ui));
control_ui->pack_start(control_ui->label, true, true); control_ui->pack_start(control_ui->label, true, true);
control_ui->pack_start(*control_ui->combo, false, true); control_ui->pack_start(*control_ui->combo, false, true);
@ -442,7 +441,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
//control_ui->combo->set_value_in_list(true, false); //control_ui->combo->set_value_in_list(true, false);
set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui)); set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui));
control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui)); control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
mcontrol->Changed.connect (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui)); mcontrol->Changed.connect (control_connections, boost::bind (&GenericPluginUI::parameter_changed, this, control_ui));
control_ui->pack_start(control_ui->label, true, true); control_ui->pack_start(control_ui->label, true, true);
control_ui->pack_start(*control_ui->combo, false, true); control_ui->pack_start(*control_ui->combo, false, true);
@ -467,7 +466,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
// control_ui->pack_start (control_ui->automate_button, false, false); // control_ui->pack_start (control_ui->automate_button, false, false);
control_ui->button->signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_port_toggled), control_ui)); control_ui->button->signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_port_toggled), control_ui));
mcontrol->Changed.connect (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::toggle_parameter_changed), control_ui)); mcontrol->Changed.connect (control_connections, boost::bind (&GenericPluginUI::toggle_parameter_changed, this, control_ui));
if (plugin->get_parameter (port_index) > 0.5){ if (plugin->get_parameter (port_index) > 0.5){
control_ui->button->set_active(true); control_ui->button->set_active(true);
@ -543,9 +542,8 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
automation_state_changed (control_ui); automation_state_changed (control_ui);
mcontrol->Changed.connect (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui)); mcontrol->Changed.connect (control_connections, boost::bind (&GenericPluginUI::parameter_changed, this, control_ui));
mcontrol->alist()->automation_state_changed.connect mcontrol->alist()->automation_state_changed.connect (control_connections, boost::bind (&GenericPluginUI::automation_state_changed, this, control_ui));
(sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::automation_state_changed), control_ui));
} else if (plugin->parameter_is_output (port_index)) { } else if (plugin->parameter_is_output (port_index)) {
@ -594,7 +592,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
output_controls.push_back (control_ui); output_controls.push_back (control_ui);
} }
mcontrol->Changed.connect (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui)); mcontrol->Changed.connect (control_connections, boost::bind (&GenericPluginUI::parameter_changed, this, control_ui));
return control_ui; return control_ui;
} }

View file

@ -34,7 +34,7 @@ using namespace Editing;
using namespace ArdourCanvas; using namespace ArdourCanvas;
using namespace ARDOUR; using namespace ARDOUR;
boost::signals2::signal<void(GhostRegion*)> GhostRegion::GoingAway; PBD::Signal1<void,GhostRegion*> GhostRegion::GoingAway;
GhostRegion::GhostRegion (ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos) GhostRegion::GhostRegion (ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos)
: trackview (tv) : trackview (tv)

View file

@ -22,7 +22,7 @@
#include <vector> #include <vector>
#include <libgnomecanvasmm.h> #include <libgnomecanvasmm.h>
#include <boost/signals2.hpp> #include "pbd/signals.h"
#include "canvas.h" #include "canvas.h"
namespace Gnome { namespace Gnome {
@ -57,7 +57,7 @@ public:
ArdourCanvas::Group* group; ArdourCanvas::Group* group;
ArdourCanvas::SimpleRect* base_rect; ArdourCanvas::SimpleRect* base_rect;
static boost::signals2::signal<void(GhostRegion*)> GoingAway; static PBD::Signal1<void,GhostRegion*> GoingAway;
}; };
class AudioGhostRegion : public GhostRegion { class AudioGhostRegion : public GhostRegion {

View file

@ -45,7 +45,7 @@ GroupTabs::set_session (Session* s)
EditorComponent::set_session (s); EditorComponent::set_session (s);
if (_session) { if (_session) {
_session_connections.add_connection (_session->RouteGroupChanged.connect (boost::bind (&GroupTabs::set_dirty, this))); _session->RouteGroupChanged.connect (_session_connections, boost::bind (&GroupTabs::set_dirty, this));
} }
} }

View file

@ -322,7 +322,7 @@ ImageFrameTimeAxis::add_marker_time_axis(MarkerTimeAxis* marker_track, void* src
else else
{ {
marker_time_axis_list.push_back(marker_track) ; marker_time_axis_list.push_back(marker_track) ;
scoped_connect (marker_track->GoingAway, boost::bind (&ImageFrameTimeAxis::remove_time_axis_view, this, marker_track, (void*)this)); marker_track->GoingAway.connect (*this, boost::bind (&ImageFrameTimeAxis::remove_time_axis_view, this, marker_track, (void*)this));
MarkerTimeAxisAdded(marker_track, src) ; /* EMIT_SIGNAL */ MarkerTimeAxisAdded(marker_track, src) ; /* EMIT_SIGNAL */
ret = true ; ret = true ;

View file

@ -216,7 +216,7 @@ ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t
imageframe_views.push_front(ifv) ; imageframe_views.push_front(ifv) ;
scoped_connect (ifv->GoingAway, boost::bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, (void*)this)); ifv->GoingAway.connect (*this, boost::bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, (void*)this));
ImageFrameAdded(ifv, src) ; /* EMIT_SIGNAL */ ImageFrameAdded(ifv, src) ; /* EMIT_SIGNAL */
} }

View file

@ -214,9 +214,9 @@ ImageFrameTimeAxisView::add_imageframe_group(std::string group_id, void* src)
imageframe_groups.push_front(iftag) ; imageframe_groups.push_front(iftag) ;
scoped_connect (iftag->GoingAway, boost::bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, iftag, (void*)this)) ; iftag->GoingAway.connect (*this, boost::bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, iftag, (void*)this));
ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */ ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */
} }
return(iftag) ; return(iftag) ;

View file

@ -287,7 +287,7 @@ ImageFrameView::add_marker_view_item(MarkerView* item, void* src)
{ {
marker_view_list.push_back(item) ; marker_view_list.push_back(item) ;
scoped_connect (item->GoingAway, boost::bind (&ImageFrameView::remove_marker_view_item, this, (void*)this)); item->GoingAway.connect (*this, boost::bind (&ImageFrameView::remove_marker_view_item, this, (void*)this));
MarkerViewAdded(item, src) ; /* EMIT_SIGNAL */ MarkerViewAdded(item, src) ; /* EMIT_SIGNAL */
} }

View file

@ -272,7 +272,7 @@ PortInsertWindow::PortInsertWindow (ARDOUR::Session* sess, boost::shared_ptr<ARD
signal_delete_event().connect (sigc::mem_fun (*this, &PortInsertWindow::wm_delete), false); signal_delete_event().connect (sigc::mem_fun (*this, &PortInsertWindow::wm_delete), false);
going_away_connection = pi->GoingAway.connect (sigc::mem_fun (*this, &PortInsertWindow::plugin_going_away)); pi->GoingAway.connect (going_away_connection, boost::bind (&PortInsertWindow::plugin_going_away, this));
} }
bool bool

View file

@ -59,7 +59,7 @@ LevelMeter::LevelMeter (Session* s)
{ {
set_session (s); set_session (s);
set_spacing (1); set_spacing (1);
Config->ParameterChanged.connect (sigc::mem_fun (*this, &LevelMeter::parameter_changed)); Config->ParameterChanged.connect (_parameter_connection, boost::bind (&LevelMeter::parameter_changed, this, _1));
UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &LevelMeter::on_theme_changed)); UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &LevelMeter::on_theme_changed));
ColorsChanged.connect (sigc::mem_fun (*this, &LevelMeter::color_handler)); ColorsChanged.connect (sigc::mem_fun (*this, &LevelMeter::color_handler));
max_peak = minus_infinity(); max_peak = minus_infinity();
@ -85,7 +85,7 @@ LevelMeter::set_meter (PeakMeter* meter)
_meter = meter; _meter = meter;
if (_meter) { if (_meter) {
_configuration_connection = _meter->ConfigurationChanged.connect(boost::bind (&LevelMeter::configuration_changed, this, _1, _2)); _meter->ConfigurationChanged.connect (_configuration_connection, boost::bind (&LevelMeter::configuration_changed, this, _1, _2));
} }
} }

View file

@ -91,7 +91,8 @@ class LevelMeter : public Gtk::HBox, public ARDOUR::SessionHandlePtr
std::vector<MeterInfo> meters; std::vector<MeterInfo> meters;
float max_peak; float max_peak;
boost::signals2::scoped_connection _configuration_connection; PBD::ScopedConnection _configuration_connection;
PBD::ScopedConnection _parameter_connection;
void hide_all_meters (); void hide_all_meters ();
gint meter_button_release (GdkEventButton*, uint32_t); gint meter_button_release (GdkEventButton*, uint32_t);

View file

@ -282,11 +282,11 @@ LocationEditRow::set_location (Location *loc)
end_clock.set_sensitive (!location->locked()); end_clock.set_sensitive (!location->locked());
length_clock.set_sensitive (!location->locked()); length_clock.set_sensitive (!location->locked());
connections.add_connection (location->start_changed.connect (boost::bind (&LocationEditRow::start_changed, this, _1))); location->start_changed.connect (connections, boost::bind (&LocationEditRow::start_changed, this, _1));
connections.add_connection (location->end_changed.connect (boost::bind (&LocationEditRow::end_changed, this, _1))); location->end_changed.connect (connections, boost::bind (&LocationEditRow::end_changed, this, _1));
connections.add_connection (location->name_changed.connect (boost::bind (&LocationEditRow::name_changed, this, _1))); location->name_changed.connect (connections, boost::bind (&LocationEditRow::name_changed, this, _1));
connections.add_connection (location->changed.connect (boost::bind (&LocationEditRow::location_changed, this, _1))); location->changed.connect (connections, boost::bind (&LocationEditRow::location_changed, this, _1));
connections.add_connection (location->FlagsChanged.connect (boost::bind (&LocationEditRow::flags_changed, this, _1, _2))); location->FlagsChanged.connect (connections, boost::bind (&LocationEditRow::flags_changed, this, _1, _2));
} }
void void
@ -860,10 +860,10 @@ LocationUI::set_session(ARDOUR::Session* s)
SessionHandlePtr::set_session (s); SessionHandlePtr::set_session (s);
if (_session) { if (_session) {
_session_connections.add_connection (_session->locations()->changed.connect (boost::bind (&LocationUI::refresh_location_list, this))); _session->locations()->changed.connect (_session_connections, boost::bind (&LocationUI::refresh_location_list, this));
_session_connections.add_connection (_session->locations()->StateChanged.connect (boost::bind (&LocationUI::refresh_location_list, this))); _session->locations()->StateChanged.connect (_session_connections, boost::bind (&LocationUI::refresh_location_list, this));
_session_connections.add_connection (_session->locations()->added.connect (boost::bind (&LocationUI::location_added, this, _1))); _session->locations()->added.connect (_session_connections, boost::bind (&LocationUI::location_added, this, _1));
_session_connections.add_connection (_session->locations()->removed.connect (boost::bind (&LocationUI::location_removed, this, _1))); _session->locations()->removed.connect (_session_connections, boost::bind (&LocationUI::location_removed, this, _1));
} }
refresh_location_list (); refresh_location_list ();

View file

@ -29,7 +29,7 @@
#include <gtkmm/paned.h> #include <gtkmm/paned.h>
#include <gtkmm/scrolledwindow.h> #include <gtkmm/scrolledwindow.h>
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/location.h" #include "ardour/location.h"
#include "ardour/session_handle.h" #include "ardour/session_handle.h"

View file

@ -227,7 +227,7 @@ LV2PluginUI::lv2ui_instantiate(const Glib::ustring& title)
} }
} }
_lv2->ParameterChanged.connect(sigc::mem_fun(*this, &LV2PluginUI::parameter_changed)); _lv2->ParameterChanged.connect (parameter_connection, boost::bind (&LV2PluginUI::parameter_changed, this, _1, _2));
} }
LV2PluginUI::~LV2PluginUI () LV2PluginUI::~LV2PluginUI ()

View file

@ -92,6 +92,8 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
virtual bool on_window_show(const Glib::ustring& title); virtual bool on_window_show(const Glib::ustring& title);
virtual void on_window_hide(); virtual void on_window_hide();
PBD::ScopedConnection parameter_connection;
}; };
#endif // HAVE_SLV2 #endif // HAVE_SLV2

View file

@ -211,7 +211,7 @@ MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type,
ifv->add_marker_view_item(mv, src) ; ifv->add_marker_view_item(mv, src) ;
marker_view_list.push_front(mv) ; marker_view_list.push_front(mv) ;
scoped_connect (mv->GoingAway, boost::bind (&MarkerTimeAxisView::remove_marker_view, this, (void*)this)); mv->GoingAway.connect (*this, boost::bind (&MarkerTimeAxisView::remove_marker_view, this, (void*)this));
MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */ MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */

View file

@ -585,7 +585,7 @@ MidiRegionView::display_model(boost::shared_ptr<MidiModel> model)
{ {
_model = model; _model = model;
content_connection.disconnect (); content_connection.disconnect ();
content_connection = _model->ContentsChanged.connect (boost::bind (&MidiRegionView::redisplay_model, this)); _model->ContentsChanged.connect (content_connection, boost::bind (&MidiRegionView::redisplay_model, this));
clear_events (); clear_events ();
@ -1071,7 +1071,7 @@ MidiRegionView::add_ghost (TimeAxisView& tv)
} }
} }
ghost->GoingAway.connect (boost::bind (&RegionView::remove_ghost, this, _1)); ghost->GoingAway.connect (*this, boost::bind (&RegionView::remove_ghost, this, _1));
return ghost; return ghost;
} }

View file

@ -180,7 +180,7 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd,
display_region (region_view, wfd); display_region (region_view, wfd);
/* catch regionview going away */ /* catch regionview going away */
scoped_connect (region->GoingAway, boost::bind (&MidiStreamView::remove_region_view, this, region)); region->GoingAway.connect (*this, boost::bind (&MidiStreamView::remove_region_view, this, region));
RegionViewAdded (region_view); RegionViewAdded (region_view);
@ -401,9 +401,9 @@ MidiStreamView::setup_rec_box ()
sources.push_back(mds->write_source()); sources.push_back(mds->write_source());
rec_data_ready_connections.add_connection (mds->write_source()->ViewDataRangeReady.connect mds->write_source()->ViewDataRangeReady.connect
(boost::bind (&MidiStreamView::rec_data_range_ready, this, (rec_data_ready_connections, boost::bind (&MidiStreamView::rec_data_range_ready, this,
_1, _2, boost::weak_ptr<Source>(mds->write_source())))); _1, _2, boost::weak_ptr<Source>(mds->write_source())));
// handle multi // handle multi

View file

@ -137,7 +137,7 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session* sess,
set_state (*xml_node, Stateful::loading_state_version); set_state (*xml_node, Stateful::loading_state_version);
_route->processors_changed.connect (sigc::mem_fun(*this, &MidiTimeAxisView::processors_changed)); _route->processors_changed.connect (*this, boost::bind (&MidiTimeAxisView::processors_changed, this, _1));
if (is_track()) { if (is_track()) {
_piano_roll_header = new PianoRollHeader(*midi_view()); _piano_roll_header = new PianoRollHeader(*midi_view());

View file

@ -257,8 +257,8 @@ MixerStrip::init ()
_packed = false; _packed = false;
_embedded = false; _embedded = false;
_session->engine().Stopped.connect (sigc::mem_fun(*this, &MixerStrip::engine_stopped)); _session->engine().Stopped.connect (*this, boost::bind (&MixerStrip::engine_stopped, this));
_session->engine().Running.connect (sigc::mem_fun(*this, &MixerStrip::engine_running)); _session->engine().Running.connect (*this, boost::bind (&MixerStrip::engine_running, this));
input_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::input_press), false); input_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::input_press), false);
output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::output_press), false); output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::output_press), false);
@ -363,7 +363,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
boost::shared_ptr<AudioTrack> at = audio_track(); boost::shared_ptr<AudioTrack> at = audio_track();
connections.add_connection (at->FreezeChange.connect (sigc::mem_fun(*this, &MixerStrip::map_frozen))); at->FreezeChange.connect (route_connections, boost::bind (&MixerStrip::map_frozen, this));
button_table.attach (*rec_enable_button, 0, 2, 2, 3); button_table.attach (*rec_enable_button, 0, 2, 2, 3);
rec_enable_button->set_sensitive (_session->writable()); rec_enable_button->set_sensitive (_session->writable());
@ -412,22 +412,22 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
_("Click to Add/Edit Comments"): _("Click to Add/Edit Comments"):
_route->comment()); _route->comment());
connections.add_connection (_route->meter_change.connect (sigc::mem_fun(*this, &MixerStrip::meter_changed))); _route->meter_change.connect (route_connections, boost::bind (&MixerStrip::meter_changed, this, _1));
connections.add_connection (_route->input()->changed.connect (sigc::mem_fun(*this, &MixerStrip::input_changed))); _route->input()->changed.connect (route_connections, boost::bind (&MixerStrip::input_changed, this, _1, _2));
connections.add_connection (_route->output()->changed.connect (sigc::mem_fun(*this, &MixerStrip::output_changed))); _route->output()->changed.connect (route_connections, boost::bind (&MixerStrip::output_changed, this, _1, _2));
connections.add_connection (_route->route_group_changed.connect (sigc::mem_fun(*this, &MixerStrip::route_group_changed))); _route->route_group_changed.connect (route_connections, boost::bind (&MixerStrip::route_group_changed, this));
if (_route->panner()) { if (_route->panner()) {
connections.add_connection (_route->panner()->Changed.connect (sigc::mem_fun(*this, &MixerStrip::connect_to_pan))); _route->panner()->Changed.connect (route_connections, boost::bind (&MixerStrip::connect_to_pan, this));
} }
if (is_audio_track()) { if (is_audio_track()) {
connections.add_connection (audio_track()->DiskstreamChanged.connect (sigc::mem_fun(*this, &MixerStrip::diskstream_changed))); audio_track()->DiskstreamChanged.connect (route_connections, boost::bind (&MixerStrip::diskstream_changed, this));
} }
connections.add_connection (_route->NameChanged.connect (sigc::mem_fun(*this, &RouteUI::name_changed))); _route->NameChanged.connect (route_connections, boost::bind (&RouteUI::name_changed, this));
connections.add_connection (_route->comment_changed.connect (sigc::mem_fun(*this, &MixerStrip::comment_changed))); _route->comment_changed.connect (route_connections, boost::bind (&MixerStrip::comment_changed, this, _1));
connections.add_connection (_route->gui_changed.connect (sigc::mem_fun(*this, &MixerStrip::route_gui_changed))); _route->gui_changed.connect (route_connections, boost::bind (&MixerStrip::route_gui_changed, this, _1, _2));
set_stuff_from_route (); set_stuff_from_route ();
@ -928,8 +928,8 @@ MixerStrip::connect_to_pan ()
_route->panner()->data().control(Evoral::Parameter(PanAutomation))); _route->panner()->data().control(Evoral::Parameter(PanAutomation)));
if (pan_control) { if (pan_control) {
panstate_connection = pan_control->alist()->automation_state_changed.connect (sigc::mem_fun(panners, &PannerUI::pan_automation_state_changed)); pan_control->alist()->automation_state_changed.connect (panstate_connection, boost::bind (&PannerUI::pan_automation_state_changed, &panners));
panstyle_connection = pan_control->alist()->automation_style_changed.connect (sigc::mem_fun(panners, &PannerUI::pan_automation_style_changed)); pan_control->alist()->automation_style_changed.connect (panstyle_connection, boost::bind (&PannerUI::pan_automation_style_changed, &panners));
} }
panners.pan_changed (this); panners.pan_changed (this);
@ -1693,7 +1693,7 @@ MixerStrip::show_send (boost::shared_ptr<Send> send)
_current_delivery = send; _current_delivery = send;
send->set_metering (true); send->set_metering (true);
send_gone_connection = _current_delivery->GoingAway.connect (sigc::mem_fun (*this, &MixerStrip::revert_to_default_display)); _current_delivery->GoingAway.connect (send_gone_connection, boost::bind (&MixerStrip::revert_to_default_display, this));
gain_meter().set_controls (_route, send->meter(), send->amp()); gain_meter().set_controls (_route, send->meter(), send->amp());
gain_meter().setup_meters (); gain_meter().setup_meters ();

View file

@ -74,7 +74,7 @@ Mixer_UI::Mixer_UI ()
strip_redisplay_does_not_sync_order_keys = false; strip_redisplay_does_not_sync_order_keys = false;
ignore_sync = false; ignore_sync = false;
Route::SyncOrderKeys.connect (sigc::mem_fun (*this, &Mixer_UI::sync_order_keys)); Route::SyncOrderKeys.connect (*this, boost::bind (&Mixer_UI::sync_order_keys, this, _1));
scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
scroller_base.set_name ("MixerWindow"); scroller_base.set_name ("MixerWindow");
@ -333,9 +333,9 @@ Mixer_UI::add_strip (RouteList& routes)
route->set_order_key (N_("signal"), track_model->children().size()-1); route->set_order_key (N_("signal"), track_model->children().size()-1);
} }
route->NameChanged.connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_name_changed), strip)); route->NameChanged.connect (*this, boost::bind (&Mixer_UI::strip_name_changed, this, strip));
scoped_connect (strip->GoingAway, boost::bind (&Mixer_UI::remove_strip, this, strip)); strip->GoingAway.connect (*this, boost::bind (&Mixer_UI::remove_strip, this, strip));
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed)); strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_button_release_event), strip)); strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
} }
@ -476,10 +476,10 @@ Mixer_UI::set_session (Session* sess)
initial_track_display (); initial_track_display ();
_session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&Mixer_UI::add_strip, this, _1))); _session->RouteAdded.connect (_session_connections, boost::bind (&Mixer_UI::add_strip, this, _1));
_session_connections.add_connection (_session->route_group_added.connect (boost::bind (&Mixer_UI::add_route_group, this, _1))); _session->route_group_added.connect (_session_connections, boost::bind (&Mixer_UI::add_route_group, this, _1));
_session_connections.add_connection (_session->route_group_removed.connect (boost::bind (&Mixer_UI::route_groups_changed, this))); _session->route_group_removed.connect (_session_connections, boost::bind (&Mixer_UI::route_groups_changed, this));
_session_connections.add_connection (_session->config.ParameterChanged.connect (boost::bind (&Mixer_UI::parameter_changed, this, _1))); _session->config.ParameterChanged.connect (_session_connections, boost::bind (&Mixer_UI::parameter_changed, this, _1));
route_groups_changed (); route_groups_changed ();
@ -1252,7 +1252,7 @@ Mixer_UI::add_route_group (RouteGroup* group)
focus = true; focus = true;
} }
group->FlagsChanged.connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::group_flags_changed), group)); group->FlagsChanged.connect (*this, boost::bind (&Mixer_UI::group_flags_changed, this, _1, group));
if (focus) { if (focus) {
TreeViewColumn* col = group_display.get_column (0); TreeViewColumn* col = group_display.get_column (0);

View file

@ -33,7 +33,7 @@
#include <gtkmm/treeview.h> #include <gtkmm/treeview.h>
#include "pbd/stateful.h" #include "pbd/stateful.h"
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/ardour.h" #include "ardour/ardour.h"
#include "ardour/session_handle.h" #include "ardour/session_handle.h"

View file

@ -164,7 +164,7 @@ OptionEditor::OptionEditor (Configuration* c, std::string const & t)
show_all_children(); show_all_children();
/* Watch out for changes to parameters */ /* Watch out for changes to parameters */
_config->ParameterChanged.connect (sigc::mem_fun (*this, &OptionEditor::parameter_changed)); _config->ParameterChanged.connect (config_connection, boost::bind (&OptionEditor::parameter_changed, this, _1));
} }
OptionEditor::~OptionEditor () OptionEditor::~OptionEditor ()

View file

@ -364,6 +364,7 @@ protected:
private: private:
void parameter_changed (std::string const &); void parameter_changed (std::string const &);
PBD::ScopedConnection config_connection;
Gtk::Notebook _notebook; Gtk::Notebook _notebook;
std::map<std::string, OptionEditorPage*> _pages; std::map<std::string, OptionEditorPage*> _pages;

View file

@ -72,8 +72,8 @@ Panner2d::Panner2d (boost::shared_ptr<Panner> p, int32_t h)
allow_y = false; allow_y = false;
allow_target = false; allow_target = false;
panner->StateChanged.connect (sigc::mem_fun(*this, &Panner2d::handle_state_change)); panner->StateChanged.connect (state_connection, boost::bind (&Panner2d::handle_state_change, this));
panner->Changed.connect (sigc::mem_fun(*this, &Panner2d::handle_position_change)); panner->Changed.connect (change_connection, boost::bind (&Panner2d::handle_position_change, this));
drag_target = 0; drag_target = 0;
set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);

View file

@ -128,6 +128,9 @@ class Panner2d : public Gtk::DrawingArea
void toggle_bypass (); void toggle_bypass ();
void handle_state_change (); void handle_state_change ();
void handle_position_change (); void handle_position_change ();
PBD::ScopedConnection state_connection;
PBD::ScopedConnection change_connection;
}; };
class Panner2dWindow : public Gtk::Window class Panner2dWindow : public Gtk::Window

View file

@ -151,9 +151,9 @@ PannerUI::set_panner (boost::shared_ptr<Panner> p)
return; return;
} }
connections.add_connection (_panner->Changed.connect (sigc::mem_fun(*this, &PannerUI::panner_changed))); _panner->Changed.connect (connections, boost::bind (&PannerUI::panner_changed, this));
connections.add_connection (_panner->LinkStateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_linkage))); _panner->LinkStateChanged.connect (connections, boost::bind (&PannerUI::update_pan_linkage, this));
connections.add_connection (_panner->StateChanged.connect (sigc::mem_fun(*this, &PannerUI::update_pan_state))); _panner->StateChanged.connect (connections, boost::bind (&PannerUI::update_pan_state, this));
setup_pan (); setup_pan ();
@ -404,8 +404,7 @@ PannerUI::setup_pan ()
pan_adjustments.back()->set_value(rx); 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)); 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 (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_value_changed), (uint32_t) asz)); _panner->pan_control( asz )->Changed.connect (connections, boost::bind (&PannerUI::pan_value_changed, this, (uint32_t) asz));
bc->set_name ("PanSlider"); bc->set_name ("PanSlider");
bc->set_shadow_type (Gtk::SHADOW_NONE); bc->set_shadow_type (Gtk::SHADOW_NONE);

View file

@ -115,7 +115,7 @@ PluginEqGui::PluginEqGui(boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert)
// Connect the realtime signal collection callback // Connect the realtime signal collection callback
_plugin_insert->AnalysisDataGathered.connect( sigc::mem_fun(*this, &PluginEqGui::signal_collect_callback )); _plugin_insert->AnalysisDataGathered.connect (analysis_connection, boost::bind (&PluginEqGui::signal_collect_callback, this, _1, _2));
} }
PluginEqGui::~PluginEqGui() PluginEqGui::~PluginEqGui()

View file

@ -137,6 +137,8 @@ class PluginEqGui : public Gtk::Table
sigc::connection _update_connection; sigc::connection _update_connection;
sigc::connection _window_unmap_connection; sigc::connection _window_unmap_connection;
sigc::connection _window_map_connection; sigc::connection _window_map_connection;
PBD::ScopedConnection analysis_connection;
}; };
#endif #endif

View file

@ -74,7 +74,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
manager = mgr; manager = mgr;
in_row_change = false; in_row_change = false;
manager->PluginListChanged.connect (sigc::mem_fun (*this, &PluginSelector::build_plugin_menu)); manager->PluginListChanged.connect (plugin_list_changed_connection, boost::bind (&PluginSelector::build_plugin_menu, this));
build_plugin_menu (); build_plugin_menu ();
plugin_model = Gtk::ListStore::create (plugin_columns); plugin_model = Gtk::ListStore::create (plugin_columns);

View file

@ -138,6 +138,7 @@ class PluginSelector : public ArdourDialog
Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&);
Gtk::Menu* create_by_category_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_category_menu (ARDOUR::PluginInfoList&);
void build_plugin_menu (); void build_plugin_menu ();
PBD::ScopedConnection plugin_list_changed_connection;
}; };
#endif // __ardour_plugin_selector_h__ #endif // __ardour_plugin_selector_h__

View file

@ -142,7 +142,7 @@ PluginUIWindow::PluginUIWindow (Gtk::Window* win, boost::shared_ptr<PluginInsert
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)), false); signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)), false);
death_connection = insert->GoingAway.connect (sigc::mem_fun(*this, &PluginUIWindow::plugin_going_away)); insert->GoingAway.connect (death_connection, boost::bind (&PluginUIWindow::plugin_going_away, this));
gint h = _pluginui->get_preferred_height (); gint h = _pluginui->get_preferred_height ();
gint w = _pluginui->get_preferred_width (); gint w = _pluginui->get_preferred_width ();
@ -390,9 +390,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
save_button.set_name ("PluginSaveButton"); save_button.set_name ("PluginSaveButton");
save_button.signal_clicked().connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting)); save_button.signal_clicked().connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting));
insert->ActiveChanged.connect (sigc::bind( insert->ActiveChanged.connect (active_connection, boost::bind (&PlugUIBase::processor_active_changed, this, boost::weak_ptr<Processor>(insert)));
sigc::mem_fun(*this, &PlugUIBase::processor_active_changed),
boost::weak_ptr<Processor>(insert)));
bypass_button.set_active (!pi->active()); bypass_button.set_active (!pi->active());
@ -416,7 +414,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis)); plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis));
plugin_analysis_expander.set_expanded(false); plugin_analysis_expander.set_expanded(false);
death_connection = insert->GoingAway.connect (sigc::mem_fun (*this, &PlugUIBase::plugin_going_away)); insert->GoingAway.connect (death_connection, boost::bind (&PlugUIBase::plugin_going_away, this));
} }
PlugUIBase::~PlugUIBase() PlugUIBase::~PlugUIBase()

View file

@ -121,7 +121,10 @@ class PlugUIBase : public virtual sigc::trackable
void toggle_plugin_analysis (); void toggle_plugin_analysis ();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p); void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
void plugin_going_away (); void plugin_going_away ();
boost::signals2::scoped_connection death_connection;
PBD::ScopedConnection death_connection;
PBD::ScopedConnection active_connection;
PBD::ScopedConnectionList control_connections;
}; };
class GenericPluginUI : public PlugUIBase, public Gtk::VBox class GenericPluginUI : public PlugUIBase, public Gtk::VBox

View file

@ -116,7 +116,7 @@ PortGroup::add_bundle_internal (boost::shared_ptr<Bundle> b, boost::shared_ptr<I
} }
BundleRecord* br = new BundleRecord (b, io, colour, has_colour); BundleRecord* br = new BundleRecord (b, io, colour, has_colour);
br->changed_connection = b->Changed.connect (boost::bind (&PortGroup::bundle_changed, this, _1)); b->Changed.connect (br->changed_connection, boost::bind (&PortGroup::bundle_changed, this, _1));
_bundles.push_back (br); _bundles.push_back (br);
Changed (); Changed ();
@ -521,9 +521,8 @@ PortGroupList::add_group (boost::shared_ptr<PortGroup> g)
{ {
_groups.push_back (g); _groups.push_back (g);
g->Changed.connect (sigc::mem_fun (*this, &PortGroupList::emit_changed)); g->Changed.connect (_changed_connections, boost::bind (&PortGroupList::emit_changed, this));
g->BundleChanged.connect (_bundle_changed_connections, boost::bind (&PortGroupList::emit_bundle_changed, this, _1));
_bundle_changed_connections.add_connection (g->BundleChanged.connect (sigc::mem_fun (*this, &PortGroupList::emit_bundle_changed)));
emit_changed (); emit_changed ();
} }

View file

@ -24,7 +24,7 @@
#include <string> #include <string>
#include <set> #include <set>
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <boost/signals2.hpp> #include "pbd/signals.h"
#include <gtkmm/widget.h> #include <gtkmm/widget.h>
#include <gtkmm/checkbutton.h> #include <gtkmm/checkbutton.h>
@ -66,10 +66,10 @@ public:
bool has_port (std::string const &) const; bool has_port (std::string const &) const;
/** The bundle list has changed in some way; a bundle has been added or removed, or the list cleared etc. */ /** The bundle list has changed in some way; a bundle has been added or removed, or the list cleared etc. */
sigc::signal<void> Changed; PBD::Signal0<void> Changed;
/** An individual bundle on our list has changed in some way */ /** An individual bundle on our list has changed in some way */
boost::signals2::signal<void(ARDOUR::Bundle::Change)> BundleChanged; PBD::Signal1<void,ARDOUR::Bundle::Change> BundleChanged;
struct BundleRecord { struct BundleRecord {
boost::shared_ptr<ARDOUR::Bundle> bundle; boost::shared_ptr<ARDOUR::Bundle> bundle;
@ -132,10 +132,10 @@ class PortGroupList : public sigc::trackable
bool empty () const; bool empty () const;
/** The group list has changed in some way; a group has been added or removed, or the list cleared etc. */ /** The group list has changed in some way; a group has been added or removed, or the list cleared etc. */
boost::signals2::signal<void()> Changed; PBD::Signal0<void> Changed;
/** A bundle in one of our groups has changed */ /** A bundle in one of our groups has changed */
boost::signals2::signal<void(ARDOUR::Bundle::Change)> BundleChanged; PBD::Signal1<void,ARDOUR::Bundle::Change> BundleChanged;
private: private:
bool port_has_prefix (std::string const &, std::string const &) const; bool port_has_prefix (std::string const &, std::string const &) const;
@ -152,6 +152,7 @@ class PortGroupList : public sigc::trackable
mutable PortGroup::BundleList _bundles; mutable PortGroup::BundleList _bundles;
List _groups; List _groups;
PBD::ScopedConnectionList _bundle_changed_connections; PBD::ScopedConnectionList _bundle_changed_connections;
PBD::ScopedConnectionList _changed_connections;
bool _signals_suspended; bool _signals_suspended;
bool _pending_change; bool _pending_change;
ARDOUR::Bundle::Change _pending_bundle_change; ARDOUR::Bundle::Change _pending_bundle_change;

View file

@ -135,10 +135,10 @@ PortMatrix::init ()
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
/* watch for the content of _ports[] changing */ /* watch for the content of _ports[] changing */
_ports[i].Changed.connect (sigc::mem_fun (*this, &PortMatrix::setup)); _ports[i].Changed.connect (_changed_connections, boost::bind (&PortMatrix::setup, this));
/* and for bundles in _ports[] changing */ /* and for bundles in _ports[] changing */
_ports[i].BundleChanged.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrix::setup))); _ports[i].BundleChanged.connect (_bundle_changed_connections, boost::bind (&PortMatrix::setup, this));
} }
/* scrolling stuff */ /* scrolling stuff */
@ -149,13 +149,13 @@ PortMatrix::init ()
/* Part 2: notice when things have changed that require our subclass to clear and refill _ports[] */ /* Part 2: notice when things have changed that require our subclass to clear and refill _ports[] */
/* watch for routes being added or removed */ /* watch for routes being added or removed */
_session_connections.add_connection (_session->RouteAdded.connect (boost::bind (&PortMatrix::routes_changed, this))); _session->RouteAdded.connect (_session_connections, boost::bind (&PortMatrix::routes_changed, this));
/* and also bundles */ /* and also bundles */
_session_connections.add_connection (_session->BundleAdded.connect (boost::bind (&PortMatrix::setup_global_ports, this))); _session->BundleAdded.connect (_session_connections, boost::bind (&PortMatrix::setup_global_ports, this));
/* and also ports */ /* and also ports */
_session_connections.add_connection (_session->engine().PortRegisteredOrUnregistered.connect (boost::bind (&PortMatrix::setup_global_ports, this))); _session->engine().PortRegisteredOrUnregistered.connect (_session_connections, boost::bind (&PortMatrix::setup_global_ports, this));
reconnect_to_routes (); reconnect_to_routes ();
@ -170,7 +170,7 @@ PortMatrix::reconnect_to_routes ()
boost::shared_ptr<RouteList> routes = _session->get_routes (); boost::shared_ptr<RouteList> routes = _session->get_routes ();
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
_route_connections.add_connection ((*i)->processors_changed.connect (sigc::mem_fun (*this, &PortMatrix::route_processors_changed))); (*i)->processors_changed.connect (_route_connections, boost::bind (&PortMatrix::route_processors_changed, this, _1));
} }
} }

View file

@ -193,6 +193,8 @@ private:
/// port type that we are working with /// port type that we are working with
ARDOUR::DataType _type; ARDOUR::DataType _type;
PBD::ScopedConnectionList _route_connections; PBD::ScopedConnectionList _route_connections;
PBD::ScopedConnectionList _changed_connections;
PBD::ScopedConnectionList _bundle_changed_connections;
PortMatrixBody* _body; PortMatrixBody* _body;
Gtk::HScrollbar _hscroll; Gtk::HScrollbar _hscroll;

View file

@ -254,7 +254,7 @@ PortMatrixBody::setup ()
PortGroup::BundleList r = _matrix->visible_rows()->bundles (); PortGroup::BundleList r = _matrix->visible_rows()->bundles ();
for (PortGroup::BundleList::iterator i = r.begin(); i != r.end(); ++i) { for (PortGroup::BundleList::iterator i = r.begin(); i != r.end(); ++i) {
_bundle_connections.add_connection ((*i)->bundle->Changed.connect (boost::bind (&PortMatrixBody::rebuild_and_draw_row_labels, this))); (*i)->bundle->Changed.connect (_bundle_connections, boost::bind (&PortMatrixBody::rebuild_and_draw_row_labels, this));
} }
} }
@ -262,7 +262,7 @@ PortMatrixBody::setup ()
if (_matrix->visible_columns()) { if (_matrix->visible_columns()) {
PortGroup::BundleList c = _matrix->visible_columns()->bundles (); PortGroup::BundleList c = _matrix->visible_columns()->bundles ();
for (PortGroup::BundleList::iterator i = c.begin(); i != c.end(); ++i) { for (PortGroup::BundleList::iterator i = c.begin(); i != c.end(); ++i) {
_bundle_connections.add_connection ((*i)->bundle->Changed.connect (boost::bind (&PortMatrixBody::rebuild_and_draw_column_labels, this))); (*i)->bundle->Changed.connect (_bundle_connections, boost::bind (&PortMatrixBody::rebuild_and_draw_column_labels, this));
} }
} }

View file

@ -106,8 +106,8 @@ ProcessorEntry::ProcessorEntry (boost::shared_ptr<Processor> p, Width w)
_active.set_active (_processor->active ()); _active.set_active (_processor->active ());
_active.signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::active_toggled)); _active.signal_toggled().connect (sigc::mem_fun (*this, &ProcessorEntry::active_toggled));
_processor->ActiveChanged.connect (sigc::mem_fun (*this, &ProcessorEntry::processor_active_changed)); _processor->ActiveChanged.connect (active_connection, boost::bind (&ProcessorEntry::processor_active_changed, this));
_processor->NameChanged.connect (sigc::mem_fun (*this, &ProcessorEntry::processor_name_changed)); _processor->NameChanged.connect (name_connection, boost::bind (&ProcessorEntry::processor_name_changed, this));
} }
EventBox& EventBox&
@ -229,7 +229,7 @@ SendProcessorEntry::SendProcessorEntry (boost::shared_ptr<Send> s, Width w)
_vbox.pack_start (_fader); _vbox.pack_start (_fader);
_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &SendProcessorEntry::gain_adjusted)); _adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &SendProcessorEntry::gain_adjusted));
_send->amp()->gain_control()->Changed.connect (sigc::mem_fun (*this, &SendProcessorEntry::show_gain)); _send->amp()->gain_control()->Changed.connect (send_gain_connection, boost::bind (&SendProcessorEntry::show_gain, this));
show_gain (); show_gain ();
} }
@ -326,9 +326,9 @@ ProcessorBox::set_route (boost::shared_ptr<Route> r)
no_processor_redisplay = false; no_processor_redisplay = false;
_route = r; _route = r;
connections.add_connection (_route->processors_changed.connect (sigc::mem_fun (*this, &ProcessorBox::route_processors_changed))); _route->processors_changed.connect (connections, boost::bind (&ProcessorBox::route_processors_changed, this, _1));
connections.add_connection (_route->GoingAway.connect (sigc::mem_fun (*this, &ProcessorBox::route_going_away))); _route->GoingAway.connect (connections, boost::bind (&ProcessorBox::route_going_away, this));
connections.add_connection (_route->NameChanged.connect (sigc::mem_fun(*this, &ProcessorBox::route_name_changed))); _route->NameChanged.connect (connections, boost::bind (&ProcessorBox::route_name_changed, this));
redisplay_processors (); redisplay_processors ();
} }

View file

@ -36,7 +36,7 @@
#include <gtkmm2ext/pixfader.h> #include <gtkmm2ext/pixfader.h>
#include "pbd/stateful.h" #include "pbd/stateful.h"
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/types.h" #include "ardour/types.h"
#include "ardour/ardour.h" #include "ardour/ardour.h"
@ -100,6 +100,8 @@ private:
Gtk::CheckButton _active; Gtk::CheckButton _active;
boost::shared_ptr<ARDOUR::Processor> _processor; boost::shared_ptr<ARDOUR::Processor> _processor;
Width _width; Width _width;
PBD::ScopedConnection active_connection;
PBD::ScopedConnection name_connection;
}; };
class SendProcessorEntry : public ProcessorEntry class SendProcessorEntry : public ProcessorEntry
@ -120,6 +122,7 @@ private:
Gtk::Adjustment _adjustment; Gtk::Adjustment _adjustment;
Gtkmm2ext::HSliderController _fader; Gtkmm2ext::HSliderController _fader;
bool _ignore_gain_change; bool _ignore_gain_change;
PBD::ScopedConnection send_gain_connection;
static Glib::RefPtr<Gdk::Pixbuf> _slider; static Glib::RefPtr<Gdk::Pixbuf> _slider;
}; };

View file

@ -107,6 +107,7 @@ private:
MIDI::Manager::PortList const & ports = MIDI::Manager::instance()->get_midi_ports (); MIDI::Manager::PortList const & ports = MIDI::Manager::instance()->get_midi_ports ();
_store->clear (); _store->clear ();
port_connections.drop_connections ();
for (MIDI::Manager::PortList::const_iterator i = ports.begin(); i != ports.end(); ++i) { for (MIDI::Manager::PortList::const_iterator i = ports.begin(); i != ports.end(); ++i) {
@ -116,7 +117,7 @@ private:
if ((*i)->input()) { if ((*i)->input()) {
r[_model.online] = !(*i)->input()->offline(); r[_model.online] = !(*i)->input()->offline();
(*i)->input()->OfflineStatusChanged.connect (sigc::bind (sigc::mem_fun (*this, &MIDIPorts::port_offline_changed), (*i))); (*i)->input()->OfflineStatusChanged.connect (port_connections, boost::bind (&MIDIPorts::port_offline_changed, this, (*i)));
r[_model.trace_input] = (*i)->input()->tracing(); r[_model.trace_input] = (*i)->input()->tracing();
} }
@ -216,6 +217,7 @@ private:
ComboBoxText _mmc_combo; ComboBoxText _mmc_combo;
ComboBoxText _mpc_combo; ComboBoxText _mpc_combo;
list<ComboOption<string>* > _port_combos; list<ComboOption<string>* > _port_combos;
PBD::ScopedConnectionList port_connections;
}; };

View file

@ -32,7 +32,7 @@ using namespace PBD;
*/ */
RegionSelection::RegionSelection () RegionSelection::RegionSelection ()
{ {
death_connection = RegionView::RegionViewGoingAway.connect (boost::bind (&RegionSelection::remove_it, this, _1)); RegionView::RegionViewGoingAway.connect (death_connection, boost::bind (&RegionSelection::remove_it, this, _1));
_current_start = 0; _current_start = 0;
_current_end = 0; _current_end = 0;
@ -44,7 +44,7 @@ RegionSelection::RegionSelection ()
RegionSelection::RegionSelection (const RegionSelection& other) RegionSelection::RegionSelection (const RegionSelection& other)
: std::list<RegionView*>() : std::list<RegionView*>()
{ {
death_connection = RegionView::RegionViewGoingAway.connect (boost::bind (&RegionSelection::remove_it, this, _1)); RegionView::RegionViewGoingAway.connect (death_connection, boost::bind (&RegionSelection::remove_it, this, _1));
_current_start = other._current_start; _current_start = other._current_start;
_current_end = other._current_end; _current_end = other._current_end;

View file

@ -58,7 +58,7 @@ using namespace ArdourCanvas;
static const int32_t sync_mark_width = 9; static const int32_t sync_mark_width = 9;
boost::signals2::signal<void(RegionView*)> RegionView::RegionViewGoingAway; PBD::Signal1<void,RegionView*> RegionView::RegionViewGoingAway;
RegionView::RegionView (ArdourCanvas::Group* parent, RegionView::RegionView (ArdourCanvas::Group* parent,
TimeAxisView& tv, TimeAxisView& tv,
@ -178,7 +178,7 @@ RegionView::init (Gdk::Color const & basic_color, bool wfd)
set_height (trackview.current_height()); set_height (trackview.current_height());
_region->StateChanged.connect (sigc::mem_fun(*this, &RegionView::region_changed)); _region->StateChanged.connect (*this, boost::bind (&RegionView::region_changed, this, _1));
group->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this)); group->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this));

View file

@ -89,7 +89,7 @@ class RegionView : public TimeAxisViewItem
void enable_display(bool yn) { _enable_display = yn; } void enable_display(bool yn) { _enable_display = yn; }
virtual void update_coverage_frames (LayerDisplay); virtual void update_coverage_frames (LayerDisplay);
static boost::signals2::signal<void(RegionView*)> RegionViewGoingAway; static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
protected: protected:
@ -139,7 +139,7 @@ class RegionView : public TimeAxisViewItem
bool in_destructor; bool in_destructor;
bool wait_for_data; bool wait_for_data;
boost::signals2::scoped_connection data_ready_connection; PBD::ScopedConnection data_ready_connection;
std::vector<GhostRegion*> ghosts; std::vector<GhostRegion*> ghosts;

View file

@ -57,7 +57,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session* s
show_all (); show_all ();
_return->set_metering (true); _return->set_metering (true);
_return->input()->changed.connect (sigc::mem_fun (*this, &ReturnUI::ins_changed)); _return->input()->changed.connect (input_change_connection, boost::bind (&ReturnUI::ins_changed, this, _1, _2));
_gpm.setup_meters (); _gpm.setup_meters ();
_gpm.set_fader_name ("ReturnUIFrame"); _gpm.set_fader_name ("ReturnUIFrame");
@ -110,7 +110,7 @@ ReturnUIWindow::ReturnUIWindow (boost::shared_ptr<Return> r, ARDOUR::Session* s)
set_name ("ReturnUIWindow"); set_name ("ReturnUIWindow");
going_away_connection = r->GoingAway.connect (sigc::mem_fun (*this, &ReturnUIWindow::return_going_away)); r->GoingAway.connect (going_away_connection, boost::bind (&ReturnUIWindow::return_going_away, this));
signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this))); signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this)));
} }

View file

@ -52,6 +52,7 @@ class ReturnUI : public Gtk::HBox
sigc::connection screen_update_connection; sigc::connection screen_update_connection;
sigc::connection fast_screen_update_connection; sigc::connection fast_screen_update_connection;
PBD::ScopedConnection input_change_connection;
void ins_changed (ARDOUR::IOChange, void*); void ins_changed (ARDOUR::IOChange, void*);
}; };

View file

@ -181,8 +181,8 @@ RouteParams_UI::add_routes (RouteList& routes)
//route_select_list.rows().back().select (); //route_select_list.rows().back().select ();
scoped_connect (route->NameChanged, boost::bind (&RouteParams_UI::route_name_changed, this, boost::weak_ptr<Route>(route))); route->NameChanged.connect (*this, boost::bind (&RouteParams_UI::route_name_changed, this, boost::weak_ptr<Route>(route)));
scoped_connect (route->GoingAway, boost::bind (&RouteParams_UI::route_removed, this, boost::weak_ptr<Route>(route))); route->GoingAway.connect (*this, boost::bind (&RouteParams_UI::route_removed, this, boost::weak_ptr<Route>(route)));
} }
} }
@ -293,8 +293,8 @@ RouteParams_UI::setup_latency_frame ()
latency_packer.pack_start (delay_label); latency_packer.pack_start (delay_label);
latency_click_connection = latency_apply_button.signal_clicked().connect (sigc::mem_fun (*latency_widget, &LatencyGUI::finish)); latency_click_connection = latency_apply_button.signal_clicked().connect (sigc::mem_fun (*latency_widget, &LatencyGUI::finish));
latency_connections.add_connection (_route->signal_latency_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency))); _route->signal_latency_changed.connect (latency_connections, sigc::mem_fun (*this, &RouteParams_UI::refresh_latency));
latency_connections.add_connection ( _route->initial_delay_changed.connect (sigc::mem_fun (*this, &RouteParams_UI::refresh_latency))); _route->initial_delay_changed.connect (latency_connections, sigc::mem_fun (*this, &RouteParams_UI::refresh_latency));
latency_frame.add (latency_packer); latency_frame.add (latency_packer);
latency_frame.show_all (); latency_frame.show_all ();
@ -399,7 +399,7 @@ RouteParams_UI::set_session (Session *sess)
if (_session) { if (_session) {
boost::shared_ptr<RouteList> r = _session->get_routes(); boost::shared_ptr<RouteList> r = _session->get_routes();
add_routes (*r); add_routes (*r);
_session_connections.add_connection (_session->RouteAdded.connect (sigc::mem_fun(*this, &RouteParams_UI::add_routes))); _session->RouteAdded.connect (_session_connections, sigc::mem_fun(*this, &RouteParams_UI::add_routes));
start_updating (); start_updating ();
} else { } else {
stop_updating (); stop_updating ();
@ -458,7 +458,7 @@ RouteParams_UI::route_selected()
setup_processor_boxes(); setup_processor_boxes();
setup_latency_frame (); setup_latency_frame ();
_route_processors_connection = route->processors_changed.connect (boost::bind (&RouteParams_UI::processors_changed, this, _1)); route->processors_changed.connect (_route_processors_connection, boost::bind (&RouteParams_UI::processors_changed, this, _1));
track_input_label.set_text (_route->name()); track_input_label.set_text (_route->name());
@ -522,9 +522,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> proc)
SendUI *send_ui = new SendUI (this, send, _session); SendUI *send_ui = new SendUI (this, send, _session);
cleanup_view(); cleanup_view();
_processor_going_away_connection = send->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this, send->GoingAway.connect (_processor_going_away_connection, boost::bind (&RouteParams_UI::processor_going_away, this, boost::weak_ptr<Processor>(proc)));
boost::weak_ptr<Processor>(proc)));
_active_view = send_ui; _active_view = send_ui;
redir_hpane.add2 (*_active_view); redir_hpane.add2 (*_active_view);
@ -535,8 +533,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> proc)
ReturnUI *return_ui = new ReturnUI (this, retrn, _session); ReturnUI *return_ui = new ReturnUI (this, retrn, _session);
cleanup_view(); cleanup_view();
_processor_going_away_connection = retrn->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this, retrn->GoingAway.connect (_processor_going_away_connection, boost::bind (&RouteParams_UI::processor_going_away, this, boost::weak_ptr<Processor>(proc)));
boost::weak_ptr<Processor>(proc)));
_active_view = return_ui; _active_view = return_ui;
redir_hpane.add2 (*_active_view); redir_hpane.add2 (*_active_view);
@ -547,9 +544,10 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> proc)
GenericPluginUI *plugin_ui = new GenericPluginUI (plugin_insert, true); GenericPluginUI *plugin_ui = new GenericPluginUI (plugin_insert, true);
cleanup_view(); cleanup_view();
_processor_going_away_connection = plugin_insert->plugin()->GoingAway.connect (boost::bind (&RouteParams_UI::plugin_going_away, this, PreFader)); plugin_insert->plugin()->GoingAway.connect (_processor_going_away_connection, boost::bind (&RouteParams_UI::plugin_going_away, this, PreFader));
plugin_ui->start_updating (0); plugin_ui->start_updating (0);
_active_view = plugin_ui; _active_view = plugin_ui;
redir_hpane.pack2 (*_active_view); redir_hpane.pack2 (*_active_view);
redir_hpane.show_all(); redir_hpane.show_all();
@ -558,8 +556,9 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Processor> proc)
PortInsertUI *portinsert_ui = new PortInsertUI (this, _session, port_insert); PortInsertUI *portinsert_ui = new PortInsertUI (this, _session, port_insert);
cleanup_view(); cleanup_view();
_processor_going_away_connection = port_insert->GoingAway.connect (boost::bind (&RouteParams_UI::processor_going_away, this, boost::weak_ptr<Processor> (proc))); port_insert->GoingAway.connect (_processor_going_away_connection, boost::bind (&RouteParams_UI::processor_going_away, this, boost::weak_ptr<Processor> (proc)));
_active_view = portinsert_ui; _active_view = portinsert_ui;
redir_hpane.pack2 (*_active_view); redir_hpane.pack2 (*_active_view);
portinsert_ui->redisplay(); portinsert_ui->redisplay();
redir_hpane.show_all(); redir_hpane.show_all();

View file

@ -33,7 +33,7 @@
#include <gtkmm/treeview.h> #include <gtkmm/treeview.h>
#include "pbd/stateful.h" #include "pbd/stateful.h"
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/ardour.h" #include "ardour/ardour.h"

View file

@ -69,6 +69,7 @@ void
RouteRedirectSelection::clear_routes () RouteRedirectSelection::clear_routes ()
{ {
routes.clear (); routes.clear ();
drop_connections ();
RoutesChanged (); RoutesChanged ();
} }
@ -93,7 +94,7 @@ RouteRedirectSelection::add (boost::shared_ptr<Route> r)
{ {
if (find (routes.begin(), routes.end(), r) == routes.end()) { if (find (routes.begin(), routes.end(), r) == routes.end()) {
routes.push_back (r); routes.push_back (r);
r->GoingAway.connect (boost::bind (&RouteRedirectSelection::removed, this, boost::weak_ptr<Route>(r))); r->GoingAway.connect (*this, boost::bind (&RouteRedirectSelection::removed, this, boost::weak_ptr<Route>(r)));
RoutesChanged(); RoutesChanged();
} }
} }

View file

@ -21,7 +21,7 @@
#define __ardour_gtk_route_processor_selection_h__ #define __ardour_gtk_route_processor_selection_h__
#include <vector> #include <vector>
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "processor_selection.h" #include "processor_selection.h"
#include "route_selection.h" #include "route_selection.h"

View file

@ -193,9 +193,9 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
} }
controls_hbox.pack_start(gm.get_level_meter(), false, false); controls_hbox.pack_start(gm.get_level_meter(), false, false);
_route->meter_change.connect (sigc::mem_fun(*this, &RouteTimeAxisView::meter_changed)); _route->meter_change.connect (*this, boost::bind (&RouteTimeAxisView::meter_changed, this, _1));
_route->input()->changed.connect (sigc::mem_fun(*this, &RouteTimeAxisView::io_changed)); _route->input()->changed.connect (*this, boost::bind (&RouteTimeAxisView::io_changed, this, _1, _2));
_route->output()->changed.connect (sigc::mem_fun(*this, &RouteTimeAxisView::io_changed)); _route->output()->changed.connect (*this, boost::bind (&RouteTimeAxisView::io_changed, this, _1, _2));
controls_table.attach (*mute_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); controls_table.attach (*mute_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
controls_table.attach (*solo_button, 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); controls_table.attach (*solo_button, 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
@ -234,19 +234,19 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
_y_position = -1; _y_position = -1;
_route->mute_changed.connect (sigc::mem_fun(*this, &RouteUI::mute_changed)); _route->mute_changed.connect (*this, boost::bind (&RouteUI::mute_changed, this, _1));
_route->solo_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)); _route->solo_changed.connect (*this, boost::bind (&RouteUI::solo_changed, this, _1));
_route->processors_changed.connect (sigc::mem_fun(*this, &RouteTimeAxisView::processors_changed)); _route->processors_changed.connect (*this, boost::bind (&RouteTimeAxisView::processors_changed, this, _1));
_route->NameChanged.connect (sigc::mem_fun(*this, &RouteTimeAxisView::route_name_changed)); _route->NameChanged.connect (*this, boost::bind (&RouteTimeAxisView::route_name_changed, this));
_route->solo_isolated_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed)); _route->solo_isolated_changed.connect (*this, boost::bind (&RouteUI::solo_changed, this, _1));
if (is_track()) { if (is_track()) {
track()->TrackModeChanged.connect (sigc::mem_fun(*this, &RouteTimeAxisView::track_mode_changed)); track()->TrackModeChanged.connect (*this, boost::bind (&RouteTimeAxisView::track_mode_changed, this));
track()->FreezeChange.connect (sigc::mem_fun(*this, &RouteTimeAxisView::map_frozen)); track()->FreezeChange.connect (*this, boost::bind (&RouteTimeAxisView::map_frozen, this));
track()->DiskstreamChanged.connect (sigc::mem_fun(*this, &RouteTimeAxisView::diskstream_changed)); track()->DiskstreamChanged.connect (*this, boost::bind (&RouteTimeAxisView::diskstream_changed, this));
get_diskstream()->SpeedChanged.connect (sigc::mem_fun(*this, &RouteTimeAxisView::speed_changed)); get_diskstream()->SpeedChanged.connect (*this, boost::bind (&RouteTimeAxisView::speed_changed, this));
/* pick up the correct freeze state */ /* pick up the correct freeze state */
map_frozen (); map_frozen ();
@ -270,6 +270,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
RouteTimeAxisView::~RouteTimeAxisView () RouteTimeAxisView::~RouteTimeAxisView ()
{ {
drop_references (); drop_references ();
drop_connections ();
for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) { for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
delete *i; delete *i;
@ -531,8 +532,7 @@ RouteTimeAxisView::build_display_menu ()
if (!Profile->get_sae()) { if (!Profile->get_sae()) {
items.push_back (MenuElem (_("Alignment"), *alignment_menu)); items.push_back (MenuElem (_("Alignment"), *alignment_menu));
get_diskstream()->AlignmentStyleChanged.connect ( get_diskstream()->AlignmentStyleChanged.connect (route_connections, boost::bind (&RouteTimeAxisView::align_style_changed, this));
sigc::mem_fun(*this, &RouteTimeAxisView::align_style_changed));
RadioMenuItem::Group mode_group; RadioMenuItem::Group mode_group;
items.push_back (RadioMenuElem (mode_group, _("Normal mode"), sigc::bind ( items.push_back (RadioMenuElem (mode_group, _("Normal mode"), sigc::bind (
@ -564,8 +564,7 @@ RouteTimeAxisView::build_display_menu ()
} }
} }
get_diskstream()->AlignmentStyleChanged.connect ( get_diskstream()->AlignmentStyleChanged.connect (route_connections, boost::bind (&RouteTimeAxisView::align_style_changed, this));
sigc::mem_fun(*this, &RouteTimeAxisView::align_style_changed));
mode_menu = build_mode_menu(); mode_menu = build_mode_menu();
if (mode_menu) if (mode_menu)

View file

@ -136,17 +136,17 @@ RouteUI::init ()
show_sends_button->set_self_managed (true); show_sends_button->set_self_managed (true);
UI::instance()->set_tip (show_sends_button, _("make mixer strips show sends to this bus"), ""); UI::instance()->set_tip (show_sends_button, _("make mixer strips show sends to this bus"), "");
_session_connections.add_connection (_session->SoloChanged.connect (sigc::mem_fun(*this, &RouteUI::solo_changed_so_update_mute))); _session->SoloChanged.connect (_session_connections, sigc::mem_fun(*this, &RouteUI::solo_changed_so_update_mute));
_session_connections.add_connection (_session->TransportStateChange.connect (sigc::mem_fun (*this, &RouteUI::check_rec_enable_sensitivity))); _session->TransportStateChange.connect (_session_connections, sigc::mem_fun (*this, &RouteUI::check_rec_enable_sensitivity));
_session->RecordStateChanged.connect (_session_connections, boost::bind (&RouteUI::session_rec_enable_changed, this));
Config->ParameterChanged.connect (sigc::mem_fun (*this, &RouteUI::parameter_changed)); Config->ParameterChanged.connect (*this, boost::bind (&RouteUI::parameter_changed, this, _1));
} }
void void
RouteUI::reset () RouteUI::reset ()
{ {
route_going_away_connection.disconnect(); route_connections.drop_connections ();
connections.drop_connections ();
delete solo_menu; delete solo_menu;
solo_menu = 0; solo_menu = 0;
@ -172,8 +172,7 @@ RouteUI::self_delete ()
cerr << "\n\nExpect to see route " << _route->name() << " be deleted\n"; cerr << "\n\nExpect to see route " << _route->name() << " be deleted\n";
_route.reset (); /* drop reference to route, so that it can be cleaned up */ _route.reset (); /* drop reference to route, so that it can be cleaned up */
route_going_away_connection.disconnect (); route_connections.drop_connections ();
connections.drop_connections ();
delete_when_idle (this); delete_when_idle (this);
} }
@ -189,23 +188,22 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
} }
if (self_destruct) { if (self_destruct) {
route_going_away_connection = rp->GoingAway.connect (boost::bind (&RouteUI::self_delete, this)); rp->GoingAway.connect (route_connections, boost::bind (&RouteUI::self_delete, this));
} }
mute_button->set_controllable (_route->mute_control()); mute_button->set_controllable (_route->mute_control());
solo_button->set_controllable (_route->solo_control()); solo_button->set_controllable (_route->solo_control());
connections.add_connection (_route->active_changed.connect (sigc::mem_fun (*this, &RouteUI::route_active_changed))); _route->active_changed.connect (route_connections, boost::bind (&RouteUI::route_active_changed, this));
connections.add_connection (_route->mute_changed.connect (sigc::mem_fun(*this, &RouteUI::mute_changed))); _route->mute_changed.connect (route_connections, boost::bind (&RouteUI::mute_changed, this, _1));
connections.add_connection (_route->solo_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed))); _route->solo_changed.connect (route_connections, boost::bind (&RouteUI::solo_changed, this, _1));
connections.add_connection (_route->listen_changed.connect (sigc::mem_fun(*this, &RouteUI::listen_changed))); _route->listen_changed.connect (route_connections, boost::bind (&RouteUI::listen_changed, this, _1));
connections.add_connection (_route->solo_isolated_changed.connect (sigc::mem_fun(*this, &RouteUI::solo_changed))); _route->solo_isolated_changed.connect (route_connections, boost::bind (&RouteUI::solo_changed, this, _1));
if (_session->writable() && is_track()) { if (_session->writable() && is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route); boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route);
connections.add_connection (t->diskstream()->RecordEnableChanged.connect (sigc::mem_fun (*this, &RouteUI::route_rec_enable_changed))); t->diskstream()->RecordEnableChanged.connect (route_connections, boost::bind (&RouteUI::route_rec_enable_changed, this));
connections.add_connection (_session->RecordStateChanged.connect (sigc::mem_fun (*this, &RouteUI::session_rec_enable_changed)));
rec_enable_button->show(); rec_enable_button->show();
rec_enable_button->set_controllable (t->rec_enable_control()); rec_enable_button->set_controllable (t->rec_enable_control());
@ -832,12 +830,20 @@ RouteUI::route_rec_enable_changed ()
void void
RouteUI::session_rec_enable_changed () RouteUI::session_rec_enable_changed ()
{ {
if (!rec_enable_button) {
return;
}
Gtkmm2ext::UI::instance()->call_slot (boost::bind (&RouteUI::update_rec_display, this)); Gtkmm2ext::UI::instance()->call_slot (boost::bind (&RouteUI::update_rec_display, this));
} }
void void
RouteUI::update_rec_display () RouteUI::update_rec_display ()
{ {
if (!rec_enable_button) {
return;
}
bool model = _route->record_enabled(); bool model = _route->record_enabled();
bool view = rec_enable_button->get_active(); bool view = rec_enable_button->get_active();
@ -887,14 +893,14 @@ RouteUI::build_solo_menu (void)
check = new CheckMenuItem(_("Solo Isolate")); check = new CheckMenuItem(_("Solo Isolate"));
check->set_active (_route->solo_isolated()); check->set_active (_route->solo_isolated());
check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_isolated), check)); check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_isolated), check));
_route->solo_isolated_changed.connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::solo_isolated_toggle), check)); _route->solo_isolated_changed.connect (route_connections, boost::bind (&RouteUI::solo_isolated_toggle, this, _1, check));
items.push_back (CheckMenuElem(*check)); items.push_back (CheckMenuElem(*check));
check->show_all(); check->show_all();
check = new CheckMenuItem(_("Solo Safe")); check = new CheckMenuItem(_("Solo Safe"));
check->set_active (_route->solo_safe()); check->set_active (_route->solo_safe());
check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_safe), check)); check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_safe), check));
_route->solo_safe_changed.connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::solo_safe_toggle), check)); _route->solo_safe_changed.connect (route_connections, boost::bind (&RouteUI::solo_safe_toggle, this, _1, check));
items.push_back (CheckMenuElem(*check)); items.push_back (CheckMenuElem(*check));
check->show_all(); check->show_all();
@ -940,7 +946,7 @@ RouteUI::build_mute_menu(void)
//items.push_back (SeparatorElem()); //items.push_back (SeparatorElem());
// items.push_back (MenuElem (_("MIDI Bind"), sigc::mem_fun (*mute_button, &BindableToggleButton::midi_learn))); // items.push_back (MenuElem (_("MIDI Bind"), sigc::mem_fun (*mute_button, &BindableToggleButton::midi_learn)));
_route->mute_points_changed.connect (sigc::mem_fun (*this, &RouteUI::muting_change)); _route->mute_points_changed.connect (route_connections, boost::bind (&RouteUI::muting_change, this));
} }
void void

View file

@ -23,7 +23,7 @@
#include <list> #include <list>
#include "pbd/xml++.h" #include "pbd/xml++.h"
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "ardour/ardour.h" #include "ardour/ardour.h"
#include "ardour/mute_master.h" #include "ardour/mute_master.h"
@ -199,8 +199,7 @@ class RouteUI : public virtual AxisView
static int mute_visual_state (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>); static int mute_visual_state (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>);
protected: protected:
PBD::ScopedConnectionList connections; PBD::ScopedConnectionList route_connections;
boost::signals2::scoped_connection route_going_away_connection;
bool self_destruct; bool self_destruct;
void init (); void init ();

View file

@ -209,7 +209,7 @@ Selection::toggle (TimeAxisView* track)
if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) { if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) {
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove; void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
track->GoingAway.connect (boost::bind (pmf, this, track)); track->GoingAway.connect (*this, boost::bind (pmf, this, track));
tracks.push_back (track); tracks.push_back (track);
} else { } else {
tracks.erase (i); tracks.erase (i);
@ -338,7 +338,7 @@ Selection::add (const TrackViewList& track_list)
for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) { for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) {
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove; void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
scoped_connect ((*i)->GoingAway, boost::bind (pmf, this, (*i))); (*i)->GoingAway.connect (*this, boost::bind (pmf, this, (*i)));
} }
if (!added.empty()) { if (!added.empty()) {
@ -949,7 +949,7 @@ Selection::add (Marker* m)
void (Selection::*pmf)(Marker*) = &Selection::remove; void (Selection::*pmf)(Marker*) = &Selection::remove;
scoped_connect (m->GoingAway, boost::bind (pmf, this, m)); m->GoingAway.connect (*this, boost::bind (pmf, this, m));
markers.push_back (m); markers.push_back (m);
MarkersChanged(); MarkersChanged();

View file

@ -22,10 +22,11 @@
#include <vector> #include <vector>
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <boost/noncopyable.hpp>
#include <sigc++/signal.h> #include <sigc++/signal.h>
#include "pbd/scoped_connections.h" #include "pbd/signals.h"
#include "time_selection.h" #include "time_selection.h"
#include "region_selection.h" #include "region_selection.h"
@ -187,7 +188,6 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
template<class A> void foreach_region (void (ARDOUR::Region::*method)(A), A arg); template<class A> void foreach_region (void (ARDOUR::Region::*method)(A), A arg);
private: private:
Selection (const Selection& other) : tracks (other.tracks) {}
PublicEditor const * editor; PublicEditor const * editor;
uint32_t next_time_id; uint32_t next_time_id;

Some files were not shown because too many files have changed in this diff Show more