diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 18:24:23 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 18:24:23 +0000 |
commit | f6fdd8dcbf41f864e9f0cc32dabe81fe3533ddfe (patch) | |
tree | 5214c580b9e6c17a499fa587660dbf949e892bf2 /libs/ardour/ardour | |
parent | da762129f19c28aff64f833b6ec09fba946faef6 (diff) |
switch to using boost::signals2 instead of sigc++, at least for libardour. not finished yet, but compiles, loads sessions, records and can close a session without a crash
git-svn-id: svn://localhost/ardour2/branches/3.0@6372 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
72 files changed, 378 insertions, 344 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index a1b3d06f62..1333b58d6f 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -26,6 +26,8 @@ #include <limits.h> #include <signal.h> +#include <boost/signals2.hpp> + #include "pbd/error.h" #include "pbd/failed_constructor.h" #include "pbd/locale_guard.h" @@ -44,7 +46,7 @@ namespace ARDOUR { class AudioEngine; static const nframes_t max_frames = JACK_MAX_FRAMES; - extern sigc::signal<void,std::string> BootMessage; + extern boost::signals2::signal<void(std::string)> BootMessage; int init (bool with_vst, bool try_optimization); void init_post_engine (); diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index 838c9406ee..4d2209d79b 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -19,7 +19,6 @@ #ifndef __ardour_audio_diskstream_h__ #define __ardour_audio_diskstream_h__ -#include <sigc++/signal.h> #include <cmath> #include <string> diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index a9c414e566..ac367ddd64 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -26,17 +26,19 @@ #include <exception> #include <string> -#include <sigc++/signal.h> #include <glibmm/thread.h> #include "pbd/rcu.h" +#include "pbd/scoped_connections.h" #include "ardour/ardour.h" #include <jack/jack.h> #include <jack/transport.h> -#include "ardour/types.h" + #include "ardour/data_type.h" +#include "ardour/session_handle.h" +#include "ardour/types.h" namespace ARDOUR { @@ -45,7 +47,7 @@ class MidiPort; class Port; class Session; -class AudioEngine : public sigc::trackable +class AudioEngine : public SessionHandlePtr { public: typedef std::set<Port*> Ports; @@ -110,7 +112,7 @@ class AudioEngine : public sigc::trackable } void set_session (Session *); - void remove_session (); + void remove_session (); // not a replacement for SessionHandle::session_going_away() class PortRegistrationFailure : public std::exception { public: @@ -185,32 +187,32 @@ class AudioEngine : public sigc::trackable _ the regular process() call to session->process() is not made. */ - sigc::signal<int,nframes_t> Freewheel; + boost::signals2::signal<int(nframes_t)> Freewheel; - sigc::signal<void> Xrun; + boost::signals2::signal<void()> Xrun; /* this signal is if JACK notifies us of a graph order event */ - sigc::signal<void> GraphReordered; + boost::signals2::signal<void()> GraphReordered; /* this signal is emitted if the sample rate changes */ - sigc::signal<void,nframes_t> SampleRateChanged; + boost::signals2::signal<void(nframes_t)> SampleRateChanged; /* this signal is sent if JACK ever disconnects us */ - sigc::signal<void> Halted; + boost::signals2::signal<void()> Halted; /* these two are emitted when the engine itself is started and stopped */ - sigc::signal<void> Running; - sigc::signal<void> Stopped; + boost::signals2::signal<void()> Running; + boost::signals2::signal<void()> Stopped; /* this signal is emitted if a JACK port is registered or unregistered */ - sigc::signal<void> PortRegisteredOrUnregistered; + boost::signals2::signal<void()> PortRegisteredOrUnregistered; std::string make_port_name_relative (std::string); std::string make_port_name_non_relative (std::string); @@ -221,7 +223,6 @@ _ the regular process() call to session->process() is not made. private: static AudioEngine* _instance; - ARDOUR::Session* session; jack_client_t* volatile _jack; /* could be reset to null by SIGPIPE or another thread */ std::string jack_client_name; Glib::Mutex _process_lock; @@ -241,7 +242,7 @@ _ the regular process() call to session->process() is not made. bool _freewheeling; bool _freewheel_pending; bool _freewheel_thread_registered; - sigc::slot<int,nframes_t> freewheel_action; + boost::function<int(nframes_t)> freewheel_action; bool reconnect_on_halt; int _usecs_per_cycle; diff --git a/libs/ardour/ardour/audiofilesource.h b/libs/ardour/ardour/audiofilesource.h index 6c04ebffb1..3312bc889d 100644 --- a/libs/ardour/ardour/audiofilesource.h +++ b/libs/ardour/ardour/audiofilesource.h @@ -84,7 +84,7 @@ public: static void set_bwf_serial_number (int); static void set_header_position_offset (nframes_t offset ); - static sigc::signal<void> HeaderPositionOffsetChanged; + static boost::signals2::signal<void()> HeaderPositionOffsetChanged; protected: /** Constructor to be called for existing external-to-session files */ diff --git a/libs/ardour/ardour/audioplaylist.h b/libs/ardour/ardour/audioplaylist.h index 277fe5a8e1..927ccfbe11 100644 --- a/libs/ardour/ardour/audioplaylist.h +++ b/libs/ardour/ardour/audioplaylist.h @@ -52,9 +52,9 @@ class AudioPlaylist : public ARDOUR::Playlist int set_state (const XMLNode&, int version); - sigc::signal<void,boost::shared_ptr<Crossfade> > NewCrossfade; - - void foreach_crossfade (sigc::slot<void, boost::shared_ptr<Crossfade> >); + boost::signals2::signal<void(boost::shared_ptr<Crossfade>)> NewCrossfade; + + void foreach_crossfade (boost::function<void (boost::shared_ptr<Crossfade>)>); void crossfades_at (nframes_t frame, Crossfades&); bool destroy_region (boost::shared_ptr<Region>); diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index 328a23ac19..dfa103f2e3 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -27,8 +27,7 @@ #include <glibmm/thread.h> #include <glibmm/ustring.h> - -#include <sigc++/signal.h> +#include <boost/function.hpp> #include "ardour/source.h" #include "ardour/ardour.h" @@ -73,10 +72,10 @@ class AudioSource : virtual public Source, sframes_t start, nframes_t cnt, double samples_per_visual_peak) const; int build_peaks (); - bool peaks_ready (sigc::slot<void>, sigc::connection&) const; + bool peaks_ready (boost::function<void()> callWhenReady, boost::signals2::connection& connection_established_if_not_ready) const; - mutable sigc::signal<void> PeaksReady; - mutable sigc::signal<void,nframes_t,nframes_t> PeakRangeReady; + mutable boost::signals2::signal<void()> PeaksReady; + mutable boost::signals2::signal<void(nframes_t,nframes_t)> PeakRangeReady; XMLNode& get_state (); int set_state (const XMLNode&, int version); diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h index 69c8e38c95..c75abda0b7 100644 --- a/libs/ardour/ardour/automation_list.h +++ b/libs/ardour/ardour/automation_list.h @@ -24,7 +24,6 @@ #include <list> #include <cmath> -#include <sigc++/signal.h> #include <glibmm/thread.h> #include "pbd/undo.h" @@ -57,11 +56,11 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL void set_automation_state (AutoState); AutoState automation_state() const { return _state; } - sigc::signal<void> automation_state_changed; + boost::signals2::signal<void()> automation_state_changed; void set_automation_style (AutoStyle m); AutoStyle automation_style() const { return _style; } - sigc::signal<void> automation_style_changed; + boost::signals2::signal<void()> automation_style_changed; bool automation_playback() const { return (_state & Play) || ((_state & Touch) && !_touching); @@ -70,10 +69,10 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL return (_state & Write) || ((_state & Touch) && _touching); } - sigc::signal<void> StateChanged; + boost::signals2::signal<void()> StateChanged; - static sigc::signal<void, AutomationList*> AutomationListCreated; - mutable sigc::signal<void> Dirty; + static boost::signals2::signal<void(AutomationList*)> AutomationListCreated; + mutable boost::signals2::signal<void()> Dirty; void start_touch (); void stop_touch (); diff --git a/libs/ardour/ardour/bundle.h b/libs/ardour/ardour/bundle.h index 196b1f2a09..662c3799a5 100644 --- a/libs/ardour/ardour/bundle.h +++ b/libs/ardour/ardour/bundle.h @@ -23,8 +23,10 @@ #include <string> #include <vector> #include <glibmm/thread.h> -#include <sigc++/signal.h> #include <boost/shared_ptr.hpp> + +#include "pbd/scoped_connections.h" + #include "ardour/data_type.h" namespace ARDOUR { @@ -37,7 +39,7 @@ class AudioEngine; * `Channel' is a rather overloaded term but I can't think of a better * one right now. */ -class Bundle : public sigc::trackable +class Bundle : public PBD::ScopedConnectionList { public: @@ -118,7 +120,7 @@ class Bundle : public sigc::trackable DirectionChanged = 0x10 ///< the direction (whether ports are inputs or outputs) has changed }; - sigc::signal<void, Change> Changed; + boost::signals2::signal<void(Change)> Changed; protected: diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h index b88b820736..60697517fb 100644 --- a/libs/ardour/ardour/butler.h +++ b/libs/ardour/ardour/butler.h @@ -21,17 +21,18 @@ #define __ardour_butler_h__ #include <glibmm/thread.h> + #include "ardour/types.h" +#include "ardour/session_handle.h" namespace ARDOUR { -class Session; - -class Butler { -public: - Butler(Session* session); +class Butler : public SessionHandleRef +{ + public: + Butler (Session& session); ~Butler(); - + int start_thread(); void terminate_thread(); void schedule_transport_work(); @@ -58,7 +59,6 @@ public: }; }; - Session* session; pthread_t thread; Glib::Mutex request_lock; Glib::Cond paused; diff --git a/libs/ardour/ardour/configuration.h b/libs/ardour/ardour/configuration.h index 02bbcaca23..1c82309d87 100644 --- a/libs/ardour/ardour/configuration.h +++ b/libs/ardour/ardour/configuration.h @@ -19,7 +19,9 @@ #ifndef __ardour_configuration_h__ #define __ardour_configuration_h__ + #include <boost/function.hpp> +#include <boost/signals2.hpp> #include "pbd/stateful.h" #include "ardour/configuration_variable.h" @@ -39,7 +41,7 @@ class Configuration : public PBD::Stateful virtual XMLNode & get_variables () = 0; virtual void set_variables (XMLNode const &) = 0; - sigc::signal<void, std::string> ParameterChanged; + boost::signals2::signal<void(std::string)> ParameterChanged; }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h index d2b1796b18..6fedc95c6c 100644 --- a/libs/ardour/ardour/control_protocol_manager.h +++ b/libs/ardour/ardour/control_protocol_manager.h @@ -23,11 +23,11 @@ #include <string> #include <list> -#include <sigc++/sigc++.h> #include <glibmm/thread.h> #include "pbd/stateful.h" +#include "ardour/session_handle.h" namespace ARDOUR { @@ -49,16 +49,16 @@ struct ControlProtocolInfo { ~ControlProtocolInfo() { if (state) { delete state; } } }; - class ControlProtocolManager : public sigc::trackable, public PBD::Stateful +class ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandlePtr { public: ~ControlProtocolManager (); static ControlProtocolManager& instance(); - void set_session (Session&); + void set_session (Session*); void discover_control_protocols (); - void foreach_known_protocol (sigc::slot<void,const ControlProtocolInfo*>); + void foreach_known_protocol (boost::function<void(const ControlProtocolInfo*)>); void load_mandatory_protocols (); ControlProtocol* instantiate (ControlProtocolInfo&); @@ -77,11 +77,10 @@ struct ControlProtocolInfo { ControlProtocolManager (); static ControlProtocolManager* _instance; - Session* _session; Glib::Mutex protocols_lock; std::list<ControlProtocol*> control_protocols; - void drop_session (); + void session_going_away (); int control_protocol_discover (std::string path); ControlProtocolDescriptor* get_descriptor (std::string path); diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h index 5d8e0235fb..1a492b742b 100644 --- a/libs/ardour/ardour/crossfade.h +++ b/libs/ardour/ardour/crossfade.h @@ -24,7 +24,6 @@ #include <algorithm> #include <boost/shared_ptr.hpp> -#include <sigc++/signal.h> #include "pbd/undo.h" #include "pbd/statefuldestructible.h" @@ -106,8 +105,8 @@ class Crossfade : public ARDOUR::AudioRegion nframes_t overlap_length() const; - sigc::signal<void,boost::shared_ptr<Region> > Invalidated; - sigc::signal<void,Change> StateChanged; + boost::signals2::signal<void(boost::shared_ptr<Region>)> Invalidated; + boost::signals2::signal<void(Change)> StateChanged; bool covers (nframes_t frame) const { return _position <= frame && frame < _position + _length; diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h index 1b1a217466..7a5931c5fb 100644 --- a/libs/ardour/ardour/delivery.h +++ b/libs/ardour/ardour/delivery.h @@ -20,6 +20,7 @@ #define __ardour_delivery_h__ #include <string> + #include "ardour/types.h" #include "ardour/chan_count.h" #include "ardour/io_processor.h" @@ -31,7 +32,8 @@ class IO; class MuteMaster; class Panner; -class Delivery : public IOProcessor { +class Delivery : public IOProcessor +{ public: enum Role { /* main outputs - delivers out-of-place to port buffers, and cannot be removed */ @@ -83,9 +85,9 @@ public: BufferSet& output_buffers() { return *_output_buffers; } - sigc::signal<void> MuteChange; + boost::signals2::signal<void()> MuteChange; - static sigc::signal<void,nframes_t> CycleStart; + static boost::signals2::signal<void(nframes_t)> CycleStart; XMLNode& state (bool full); int set_state (const XMLNode&, int version); @@ -118,10 +120,10 @@ public: boost::shared_ptr<Panner> _panner; static bool panners_legal; - static sigc::signal<int> PannersLegal; + static boost::signals2::signal<int()> PannersLegal; int panners_became_legal (); - sigc::connection panner_legal_c; + boost::signals2::scoped_connection panner_legal_c; void output_changed (IOChange, void*); gain_t target_gain (); diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index 87fffb92f7..a9664daa32 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -27,8 +27,6 @@ #include <cmath> #include <time.h> -#include <sigc++/signal.h> - #include <boost/utility.hpp> #include "evoral/types.hpp" @@ -145,15 +143,15 @@ class Diskstream : public SessionObject, public boost::noncopyable void move_processor_automation (boost::weak_ptr<Processor>, std::list< Evoral::RangeMove<nframes_t> > const &); - sigc::signal<void> RecordEnableChanged; - sigc::signal<void> SpeedChanged; - sigc::signal<void> ReverseChanged; - sigc::signal<void> PlaylistChanged; - sigc::signal<void> AlignmentStyleChanged; - sigc::signal<void,Location *> LoopSet; + boost::signals2::signal<void()> RecordEnableChanged; + boost::signals2::signal<void()> SpeedChanged; + boost::signals2::signal<void()> ReverseChanged; + boost::signals2::signal<void()> PlaylistChanged; + boost::signals2::signal<void()> AlignmentStyleChanged; + boost::signals2::signal<void(Location *)> LoopSet; - static sigc::signal<void> DiskOverrun; - static sigc::signal<void> DiskUnderrun; + static boost::signals2::signal<void()> DiskOverrun; + static boost::signals2::signal<void()> DiskUnderrun; protected: friend class Session; @@ -306,11 +304,9 @@ class Diskstream : public SessionObject, public boost::noncopyable nframes_t scrub_buffer_size; nframes_t scrub_offset; - sigc::connection ports_created_c; - sigc::connection plmod_connection; - sigc::connection plgone_connection; - sigc::connection plregion_connection; - sigc::connection ic_connection; + PBD::ScopedConnectionList playlist_connections; + + boost::signals2::scoped_connection ic_connection; Flag _flags; diff --git a/libs/ardour/ardour/element_importer.h b/libs/ardour/ardour/element_importer.h index a203c5d37b..d728a4b989 100644 --- a/libs/ardour/ardour/element_importer.h +++ b/libs/ardour/ardour/element_importer.h @@ -24,8 +24,7 @@ #include <string> #include <utility> -#include <sigc++/signal.h> - +#include <boost/signals2.hpp> #include "ardour/types.h" class XMLTree; @@ -73,10 +72,10 @@ class ElementImporter bool broken () { return _broken; } /// Signal that requests for anew name - static sigc::signal <std::pair<bool, std::string>, std::string, std::string> Rename; + static boost::signals2::signal <std::pair<bool, std::string> (std::string, std::string)> Rename; /// Signal for ok/cancel prompting - static sigc::signal <bool, std::string> Prompt; + static boost::signals2::signal <bool(std::string)> Prompt; protected: diff --git a/libs/ardour/ardour/export.h b/libs/ardour/ardour/export.h index 78a0e9abb0..055168118d 100644 --- a/libs/ardour/ardour/export.h +++ b/libs/ardour/ardour/export.h @@ -24,7 +24,6 @@ #include <vector> #include <string> -#include <sigc++/signal.h> #include <sndfile.h> #include <samplerate.h> @@ -39,7 +38,7 @@ namespace ARDOUR typedef std::pair<Port *, uint32_t> PortChannelPair; typedef std::map<uint32_t, std::vector<PortChannelPair> > ExportPortMap; - struct ExportSpecification : public SF_INFO, public sigc::trackable { + struct ExportSpecification : public SF_INFO, public PBD::ScopedConnectionList { ExportSpecification(); ~ExportSpecification (); @@ -85,7 +84,7 @@ namespace ARDOUR SRC_STATE* src_state; nframes_t pos; - sigc::connection freewheel_connection; + boost::signals2::scoped_connection freewheel_connection; /* shared between UI thread and audio thread */ diff --git a/libs/ardour/ardour/export_channel.h b/libs/ardour/ardour/export_channel.h index fdb466a06e..4a2f74b775 100644 --- a/libs/ardour/ardour/export_channel.h +++ b/libs/ardour/ardour/export_channel.h @@ -21,13 +21,13 @@ #ifndef __ardour_export_channel_h__ #define __ardour_export_channel_h__ -#include "ardour/audioregion.h" -#include "ardour/buffer_set.h" - #include <set> +#include <boost/signals2.hpp> #include <boost/shared_ptr.hpp> -#include <sigc++/signal.h> + +#include "ardour/audioregion.h" +#include "ardour/buffer_set.h" namespace ARDOUR { @@ -89,7 +89,7 @@ class PortExportChannel : public ExportChannel }; /// Handles RegionExportChannels and does actual reading from region -class RegionExportChannelFactory : public sigc::trackable +class RegionExportChannelFactory { public: enum Type { @@ -106,7 +106,7 @@ class RegionExportChannelFactory : public sigc::trackable private: - int new_cycle_started () { buffers_up_to_date = false; return 0; } + int new_cycle_started (nframes_t) { buffers_up_to_date = false; return 0; } void update_buffers (nframes_t frames); AudioRegion const & region; @@ -122,6 +122,8 @@ class RegionExportChannelFactory : public sigc::trackable Sample * mixdown_buffer; Sample * gain_buffer; + + boost::signals2::scoped_connection export_connection; }; /// Export channel that reads from region channel diff --git a/libs/ardour/ardour/export_channel_configuration.h b/libs/ardour/ardour/export_channel_configuration.h index 8ef9bba6dc..b8d7fa6bf1 100644 --- a/libs/ardour/ardour/export_channel_configuration.h +++ b/libs/ardour/ardour/export_channel_configuration.h @@ -24,7 +24,6 @@ #include <list> #include <glibmm/ustring.h> -#include <sigc++/signal.h> #include "ardour/export_channel.h" #include "ardour/export_status.h" @@ -96,7 +95,7 @@ class ExportChannelConfiguration /// Writes all files for this channel config @return true if a new thread was spawned bool write_files (boost::shared_ptr<ExportProcessor> new_processor); - sigc::signal<void> FilesWritten; + boost::signals2::signal<void()> FilesWritten; // Tells the handler the necessary information for it to handle tempfiles void register_with_timespan (TimespanPtr timespan); diff --git a/libs/ardour/ardour/export_format_base.h b/libs/ardour/ardour/export_format_base.h index 7bc0125004..ceb11a2cc9 100644 --- a/libs/ardour/ardour/export_format_base.h +++ b/libs/ardour/ardour/export_format_base.h @@ -115,8 +115,8 @@ class ExportFormatBase { : _selected (false), _compatible (true) { } ~SelectableCompatible () {} - sigc::signal<void, bool> SelectChanged; - sigc::signal<void, bool> CompatibleChanged; + boost::signals2::signal<void(bool)> SelectChanged; + boost::signals2::signal<void(bool)> CompatibleChanged; bool selected () const { return _selected; } bool compatible () const { return _compatible; } diff --git a/libs/ardour/ardour/export_format_manager.h b/libs/ardour/ardour/export_format_manager.h index 705b9dcf17..52463350fe 100644 --- a/libs/ardour/ardour/export_format_manager.h +++ b/libs/ardour/ardour/export_format_manager.h @@ -26,8 +26,8 @@ #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> -#include <sigc++/signal.h> -#include <sigc++/trackable.h> + +#include "pbd/scoped_connections.h" #include "ardour/export_formats.h" @@ -39,7 +39,7 @@ class ExportFormatCompatibility; class ExportFormatSpecification; class AnyTime; -class ExportFormatManager : public sigc::trackable +class ExportFormatManager : public PBD::ScopedConnectionList { public: @@ -92,7 +92,7 @@ class ExportFormatManager : public sigc::trackable /* Signals */ - sigc::signal<void, bool> CompleteChanged; + boost::signals2::signal<void(bool)> CompleteChanged; /* Access to lists */ diff --git a/libs/ardour/ardour/export_formats.h b/libs/ardour/ardour/export_formats.h index 3312e9abd6..3ef207097b 100644 --- a/libs/ardour/ardour/export_formats.h +++ b/libs/ardour/ardour/export_formats.h @@ -21,12 +21,14 @@ #ifndef __ardour_export_formats_h__ #define __ardour_export_formats_h__ -#include "ardour/export_format_base.h" -#include "ardour/export_format_compatibility.h" - #include <list> #include <boost/weak_ptr.hpp> + #include "pbd/failed_constructor.h" +#include "pbd/scoped_connections.h" + +#include "ardour/export_format_base.h" +#include "ardour/export_format_compatibility.h" namespace ARDOUR { @@ -84,7 +86,7 @@ class ExportFormat : public ExportFormatBase, public ExportFormatBase::Selectabl }; /// Class to be inherited by export formats that have a selectable sample format -class HasSampleFormat { +class HasSampleFormat : public PBD::ScopedConnectionList { public: class SampleFormatState : public ExportFormatBase::SelectableCompatible { @@ -126,11 +128,11 @@ class HasSampleFormat { /* Proxies for signals from sample formats and dither types */ - sigc::signal<void, bool, WeakSampleFormatPtr> SampleFormatSelectChanged; - sigc::signal<void, bool, WeakSampleFormatPtr> SampleFormatCompatibleChanged; + boost::signals2::signal<void(bool, WeakSampleFormatPtr)> SampleFormatSelectChanged; + boost::signals2::signal<void(bool, WeakSampleFormatPtr)> SampleFormatCompatibleChanged; - sigc::signal<void, bool, WeakDitherTypePtr> DitherTypeSelectChanged; - sigc::signal<void, bool, WeakDitherTypePtr> DitherTypeCompatibleChanged; + boost::signals2::signal<void(bool, WeakDitherTypePtr)> DitherTypeSelectChanged; + boost::signals2::signal<void(bool, WeakDitherTypePtr)> DitherTypeCompatibleChanged; static std::string get_sample_format_name (ExportFormatBase::SampleFormat format); diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h index fad21ac780..ded6ed5b02 100644 --- a/libs/ardour/ardour/export_handler.h +++ b/libs/ardour/ardour/export_handler.h @@ -68,7 +68,7 @@ class ExportElementFactory Session & session; }; -class ExportHandler : public ExportElementFactory, public sigc::trackable +class ExportHandler : public ExportElementFactory { private: @@ -118,8 +118,10 @@ class ExportHandler : public ExportElementFactory, public sigc::trackable bool realtime; - sigc::connection files_written_connection; + boost::signals2::scoped_connection files_written_connection; + boost::signals2::scoped_connection export_read_finished_connection; std::list<Glib::ustring> files_written; + void add_file (const Glib::ustring&); /* CD Marker stuff */ @@ -175,7 +177,7 @@ class ExportHandler : public ExportElementFactory, public sigc::trackable TimespanPtr current_timespan; ConfigMap::iterator current_map_it; TimespanBounds timespan_bounds; - sigc::connection channel_config_connection; + boost::signals2::scoped_connection channel_config_connection; }; diff --git a/libs/ardour/ardour/export_multiplication.h b/libs/ardour/ardour/export_multiplication.h index 4826a35668..aace72cc42 100644 --- a/libs/ardour/ardour/export_multiplication.h +++ b/libs/ardour/ardour/export_multiplication.h @@ -36,7 +36,7 @@ bool selected () const { return _selected; } void select (bool value); - sigc::signal<void, bool> SelectChanged; + boost::signals2::signal<void(bool)> SelectChanged; protected: @@ -151,7 +151,7 @@ void split_node (GraphNode * node, float position); void remove_node (GraphNode * node); - sigc::signal<void> GraphChanged; + boost::signals2::signal<void()> GraphChanged; private: diff --git a/libs/ardour/ardour/export_processor.h b/libs/ardour/ardour/export_processor.h index c2cb5034c7..8e7918d7c5 100644 --- a/libs/ardour/ardour/export_processor.h +++ b/libs/ardour/ardour/export_processor.h @@ -80,7 +80,7 @@ class ExportProcessor void write_files (); - static sigc::signal<void, Glib::ustring> WritingFile; + static boost::signals2::signal<void(const Glib::ustring&)> WritingFile; private: diff --git a/libs/ardour/ardour/export_profile_manager.h b/libs/ardour/ardour/export_profile_manager.h index 47acacd387..30bb3c5b91 100644 --- a/libs/ardour/ardour/export_profile_manager.h +++ b/libs/ardour/ardour/export_profile_manager.h @@ -28,7 +28,6 @@ #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> -#include <sigc++/signal.h> #include <glibmm/ustring.h> #include "pbd/uuid.h" @@ -207,7 +206,7 @@ class ExportProfileManager void remove_format_profile (FormatPtr format); FormatPtr get_new_format (FormatPtr original); - sigc::signal<void> FormatListChanged; + boost::signals2::signal<void()> FormatListChanged; private: diff --git a/libs/ardour/ardour/export_status.h b/libs/ardour/ardour/export_status.h index 3322ca639c..9fd3c84ecc 100644 --- a/libs/ardour/ardour/export_status.h +++ b/libs/ardour/ardour/export_status.h @@ -22,9 +22,9 @@ #define __ardour_export_status_h__ #include <list> +#include <boost/signals2.hpp> #include <stdint.h> -#include <sigc++/signal.h> namespace ARDOUR { @@ -36,7 +36,7 @@ enum ExportStage { export_Write }; -struct ExportStatus : public sigc::trackable { +struct ExportStatus { ExportStatus (); void init (); @@ -46,12 +46,12 @@ struct ExportStatus : public sigc::trackable { volatile bool stop; volatile bool running; - sigc::signal<void> Aborting; + boost::signals2::signal<void()> Aborting; void abort (bool error_occurred = false); bool aborted () const { return _aborted; } bool errors () const { return _errors; } - sigc::signal<void> Finished; + boost::signals2::signal<void()> Finished; void finish (); bool finished () const { return _finished; } diff --git a/libs/ardour/ardour/export_timespan.h b/libs/ardour/ardour/export_timespan.h index 255d1e377d..461caf6dd8 100644 --- a/libs/ardour/ardour/export_timespan.h +++ b/libs/ardour/ardour/export_timespan.h @@ -36,7 +36,7 @@ namespace ARDOUR class ExportChannel; class ExportTempFile; -class ExportTimespan : public sigc::trackable +class ExportTimespan { private: typedef boost::shared_ptr<ExportTempFile> TempFilePtr; @@ -69,7 +69,7 @@ class ExportTimespan : public sigc::trackable /// Reads data from each channel and writes to tempfile int process (nframes_t frames); - sigc::connection process_connection; + boost::signals2::scoped_connection process_connection; void set_range (nframes_t start, nframes_t end); nframes_t get_length () const { return end_frame - start_frame; } diff --git a/libs/ardour/ardour/import_status.h b/libs/ardour/ardour/import_status.h index 25a14f3fae..e6207c6ee8 100644 --- a/libs/ardour/ardour/import_status.h +++ b/libs/ardour/ardour/import_status.h @@ -24,7 +24,6 @@ #include <vector> #include <stdint.h> -#include <sigc++/signal.h> #include "ardour/types.h" diff --git a/libs/ardour/ardour/internal_return.h b/libs/ardour/ardour/internal_return.h index 205559fe4e..498c9f3605 100644 --- a/libs/ardour/ardour/internal_return.h +++ b/libs/ardour/ardour/internal_return.h @@ -20,7 +20,6 @@ #ifndef __ardour_internal_return_h__ #define __ardour_internal_return_h__ -#include <sigc++/signal.h> #include "ardour/ardour.h" #include "ardour/return.h" @@ -48,7 +47,7 @@ class InternalReturn : public Return BufferSet* get_buffers(); void release_buffers(); - static sigc::signal<void,nframes_t> CycleStart; + static boost::signals2::signal<void(nframes_t)> CycleStart; private: BufferSet buffers; diff --git a/libs/ardour/ardour/internal_send.h b/libs/ardour/ardour/internal_send.h index 12279b166e..7573efd685 100644 --- a/libs/ardour/ardour/internal_send.h +++ b/libs/ardour/ardour/internal_send.h @@ -53,7 +53,7 @@ class InternalSend : public Send BufferSet* target; boost::shared_ptr<Route> _send_to; PBD::ID _send_to_id; - sigc::connection connect_c; + boost::signals2::scoped_connection connect_c; void send_to_going_away (); void send_to_name_changed (); diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h index da0b88e5fe..eeb7ed64f0 100644 --- a/libs/ardour/ardour/io.h +++ b/libs/ardour/ardour/io.h @@ -23,7 +23,6 @@ #include <string> #include <vector> #include <cmath> -#include <sigc++/signal.h> #include <jack/jack.h> #include <glibmm/thread.h> @@ -133,7 +132,7 @@ class IO : public SessionObject, public Latent const ChanCount& n_ports () const { return _ports.count(); } - sigc::signal<void,IOChange,void*> changed; + boost::signals2::signal<void(IOChange,void*)> changed; virtual XMLNode& state (bool full); XMLNode& get_state (void); @@ -145,7 +144,7 @@ class IO : public SessionObject, public Latent static int disable_ports (void); static int enable_ports (void); - static sigc::signal<void,ChanCount> PortCountChanged; // emitted when the number of ports changes + static boost::signals2::signal<void(ChanCount)> PortCountChanged; // emitted when the number of ports changes static std::string name_from_state (const XMLNode&); static void set_name_in_state (XMLNode&, const std::string&); @@ -153,7 +152,7 @@ class IO : public SessionObject, public Latent /* we have to defer/order port connection. this is how we do it. */ - static sigc::signal<int> ConnectingLegal; + static boost::signals2::signal<int()> ConnectingLegal; static bool connecting_legal; XMLNode *pending_state_node; @@ -180,20 +179,18 @@ class IO : public SessionObject, public Latent bool _active; private: - int connecting_became_legal (); - sigc::connection connection_legal_c; + boost::signals2::scoped_connection connection_legal_c; boost::shared_ptr<Bundle> _bundle; ///< a bundle representing our ports struct UserBundleInfo { - UserBundleInfo (IO*, boost::shared_ptr<UserBundle> b); - - boost::shared_ptr<UserBundle> bundle; - sigc::connection changed; + UserBundleInfo (IO*, boost::shared_ptr<UserBundle> b); + boost::shared_ptr<UserBundle> bundle; + boost::signals2::scoped_connection changed; }; - - std::vector<UserBundleInfo> _bundles_connected; ///< user bundles connected to our ports + + std::vector<UserBundleInfo*> _bundles_connected; ///< user bundles connected to our ports static int parse_io_string (const std::string&, std::vector<std::string>& chns); static int parse_gain_string (const std::string&, std::vector<std::string>& chns); @@ -201,7 +198,7 @@ class IO : public SessionObject, public Latent int ensure_ports (ChanCount, bool clear, bool lockit, void *src); void check_bundles_connected (); - void check_bundles (std::vector<UserBundleInfo>&, const PortSet&); + void check_bundles (std::vector<UserBundleInfo*>&, const PortSet&); void bundle_changed (Bundle::Change); diff --git a/libs/ardour/ardour/io_processor.h b/libs/ardour/ardour/io_processor.h index 0d564bb00c..e4a42a80e2 100644 --- a/libs/ardour/ardour/io_processor.h +++ b/libs/ardour/ardour/io_processor.h @@ -22,7 +22,6 @@ #include <string> #include <boost/shared_ptr.hpp> -#include <sigc++/signal.h> #include <glibmm/thread.h> @@ -68,8 +67,8 @@ class IOProcessor : public Processor virtual bool feeds (boost::shared_ptr<Route> other) const; - sigc::signal<void,IOProcessor*,bool> AutomationPlaybackChanged; - sigc::signal<void,IOProcessor*,uint32_t> AutomationChanged; + boost::signals2::signal<void(IOProcessor*,bool)> AutomationPlaybackChanged; + boost::signals2::signal<void(IOProcessor*,uint32_t)> AutomationChanged; XMLNode& state (bool full_state); int set_state (const XMLNode&, int version); diff --git a/libs/ardour/ardour/jack_port.h b/libs/ardour/ardour/jack_port.h index 3101ce9523..0bb0752d55 100644 --- a/libs/ardour/ardour/jack_port.h +++ b/libs/ardour/ardour/jack_port.h @@ -20,7 +20,6 @@ #ifndef __ardour_jack_port_h__ #define __ardour_jack_port_h__ -#include <sigc++/signal.h> #include "pbd/failed_constructor.h" #include "ardour/port.h" #include <jack/jack.h> diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h index 656c13afae..00f00c99b6 100644 --- a/libs/ardour/ardour/ladspa_plugin.h +++ b/libs/ardour/ardour/ladspa_plugin.h @@ -25,7 +25,6 @@ #include <string> #include <dlfcn.h> -#include <sigc++/signal.h> #include "pbd/stateful.h" diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index 149a559d85..b50a645a93 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -26,7 +26,6 @@ #include <map> #include <sys/types.h> -#include <sigc++/signal.h> #include <glibmm/thread.h> @@ -109,15 +108,15 @@ class Location : public PBD::StatefulDestructible bool is_range_marker() const { return _flags & IsRangeMarker; } bool matches (Flags f) const { return _flags & f; } - sigc::signal<void,Location*> name_changed; - sigc::signal<void,Location*> end_changed; - sigc::signal<void,Location*> start_changed; + boost::signals2::signal<void(Location*)> name_changed; + boost::signals2::signal<void(Location*)> end_changed; + boost::signals2::signal<void(Location*)> start_changed; - sigc::signal<void,Location*,void*> FlagsChanged; + boost::signals2::signal<void(Location*,void*)> FlagsChanged; /* this is sent only when both start&end change at the same time */ - sigc::signal<void,Location*> changed; + boost::signals2::signal<void(Location*)> changed; /* CD Track / CD-Text info */ @@ -176,11 +175,11 @@ class Locations : public PBD::StatefulDestructible void find_all_between (nframes64_t start, nframes64_t, LocationList&, Location::Flags); - sigc::signal<void,Location*> current_changed; - sigc::signal<void> changed; - sigc::signal<void,Location*> added; - sigc::signal<void,Location*> removed; - sigc::signal<void,Change> StateChanged; + boost::signals2::signal<void(Location*)> current_changed; + boost::signals2::signal<void()> changed; + boost::signals2::signal<void(Location*)> added; + boost::signals2::signal<void(Location*)> removed; + boost::signals2::signal<void(Change)> StateChanged; template<class T> void apply (T& obj, void (T::*method)(LocationList&)) { Glib::Mutex::Lock lm (lock); diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 9705459ee1..157d9144b8 100644 --- a/libs/ardour/ardour/lv2_plugin.h +++ b/libs/ardour/ardour/lv2_plugin.h @@ -26,7 +26,6 @@ #include <string> #include <dlfcn.h> -#include <sigc++/signal.h> #include "pbd/stateful.h" diff --git a/libs/ardour/ardour/meter.h b/libs/ardour/ardour/meter.h index ae0a1672db..1f5e3307d6 100644 --- a/libs/ardour/ardour/meter.h +++ b/libs/ardour/ardour/meter.h @@ -20,7 +20,6 @@ #define __ardour_meter_h__ #include <vector> -#include <sigc++/slot.h> #include "ardour/types.h" #include "ardour/processor.h" #include "pbd/fastlog.h" @@ -34,10 +33,10 @@ class Session; class Metering { public: static void update_meters (); - static sigc::signal<void> Meter; + static boost::signals2::signal<void()> Meter; - static sigc::connection connect (sigc::slot<void> the_slot); - static void disconnect (sigc::connection& c); + static boost::signals2::connection connect (boost::function<void()>); + static void disconnect (boost::signals2::connection& c); private: /* this object is not meant to be instantiated */ diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h index 930d37330a..72667ca662 100644 --- a/libs/ardour/ardour/midi_diskstream.h +++ b/libs/ardour/ardour/midi_diskstream.h @@ -21,7 +21,6 @@ #ifndef __ardour_midi_diskstream_h__ #define __ardour_midi_diskstream_h__ -#include <sigc++/signal.h> #include <cmath> #include <cassert> diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index b099f575a1..9961b51528 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -158,7 +158,7 @@ public: XMLNode& get_state(); int set_state(const XMLNode&) { return 0; } - sigc::signal<void> ContentsChanged; + boost::signals2::signal<void()> ContentsChanged; const MidiSource* midi_source() const { return _midi_source; } void set_midi_source(MidiSource* source) { _midi_source = source; } diff --git a/libs/ardour/ardour/midi_patch_manager.h b/libs/ardour/ardour/midi_patch_manager.h index a48c9ddfe7..8c4ff43d5c 100644 --- a/libs/ardour/ardour/midi_patch_manager.h +++ b/libs/ardour/ardour/midi_patch_manager.h @@ -22,6 +22,8 @@ #define MIDI_PATCH_MANAGER_H_ #include "midi++/midnam_patch.h" +#include "pbd/scoped_connections.h" +#include "ardour/session_handle.h" namespace ARDOUR { class Session; @@ -33,7 +35,7 @@ namespace MIDI namespace Name { -class MidiPatchManager +class MidiPatchManager : public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr { /// Singleton private: @@ -55,7 +57,7 @@ public: return *_manager; } - void set_session (ARDOUR::Session&); + void set_session (ARDOUR::Session*); boost::shared_ptr<MIDINameDocument> document_by_model(std::string model_name) { return _documents[model_name]; } @@ -76,7 +78,6 @@ public: } } - boost::shared_ptr<Patch> find_patch( std::string model, std::string custom_device_mode, @@ -133,10 +134,9 @@ public: const MasterDeviceNames::Models& all_models() const { return _all_models; } private: - void drop_session(); + void session_going_away(); void refresh(); - ARDOUR::Session* _session; MidiNameDocuments _documents; MIDINameDocument::MasterDeviceNamesList _master_devices_by_model; MasterDeviceNames::Models _all_models; @@ -145,4 +145,5 @@ private: } // namespace Name } // namespace MIDI + #endif /* MIDI_PATCH_MANAGER_H_ */ diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index dfbd5ea6a2..74448991d9 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -22,7 +22,6 @@ #include <string> #include <time.h> -#include <sigc++/signal.h> #include <glibmm/thread.h> #include "pbd/stateful.h" #include "pbd/xml++.h" @@ -87,10 +86,10 @@ class MidiSource : virtual public Source uint32_t read_data_count() const { return _read_data_count; } uint32_t write_data_count() const { return _write_data_count; } - static sigc::signal<void,MidiSource*> MidiSourceCreated; + static boost::signals2::signal<void(MidiSource*)> MidiSourceCreated; // Signal a range of recorded data is available for reading from model() - mutable sigc::signal<void,sframes_t,nframes_t> ViewDataRangeReady; + mutable boost::signals2::signal<void(sframes_t,nframes_t)> ViewDataRangeReady; XMLNode& get_state (); int set_state (const XMLNode&, int version); diff --git a/libs/ardour/ardour/midi_ui.h b/libs/ardour/ardour/midi_ui.h index 2daec06774..0ecf1b0589 100644 --- a/libs/ardour/ardour/midi_ui.h +++ b/libs/ardour/ardour/midi_ui.h @@ -2,6 +2,7 @@ #define __libardour_midi_ui_h__ #include <list> +#include <boost/signals2.hpp> #include "pbd/abstract_ui.h" namespace MIDI { @@ -41,7 +42,8 @@ class MidiControlUI : public AbstractUI<MidiUIRequest> typedef std::list<GSource*> PortSources; PortSources port_sources; ARDOUR::Session& _session; - + boost::signals2::scoped_connection rebind_connection; + bool midi_input_handler (Glib::IOCondition, MIDI::Port*); void reset_ports (); void clear_ports (); diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h index ef65e69aba..a76775c710 100644 --- a/libs/ardour/ardour/mute_master.h +++ b/libs/ardour/ardour/mute_master.h @@ -64,7 +64,7 @@ class MuteMaster : public AutomationControl void set_value (float); /* note: float is used as a bitfield of MutePoints */ float get_value () const; - sigc::signal<void> MutePointChanged; + boost::signals2::signal<void()> MutePointChanged; XMLNode& get_state(); int set_state(const XMLNode&, int version); diff --git a/libs/ardour/ardour/named_selection.h b/libs/ardour/ardour/named_selection.h index d41f104e1a..0c930d5b72 100644 --- a/libs/ardour/ardour/named_selection.h +++ b/libs/ardour/ardour/named_selection.h @@ -46,7 +46,7 @@ struct NamedSelection : public PBD::Stateful int set_state (const XMLNode&, int version); - static sigc::signal<void,NamedSelection*> NamedSelectionCreated; + static boost::signals2::signal<void(NamedSelection*)> NamedSelectionCreated; }; }/* namespace ARDOUR */ diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h index 7ea37e9974..bf5a04c745 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -25,7 +25,6 @@ #include <vector> #include <string> #include <iostream> -#include <sigc++/signal.h> #include "pbd/stateful.h" #include "pbd/controllable.h" @@ -41,7 +40,7 @@ class Panner; class BufferSet; class AudioBuffer; -class StreamPanner : public sigc::trackable, public PBD::Stateful +class StreamPanner : public PBD::Stateful { public: StreamPanner (Panner& p, Evoral::Parameter param); @@ -82,8 +81,8 @@ class StreamPanner : public sigc::trackable, public PBD::Stateful boost::shared_ptr<AutomationControl> pan_control() { return _control; } - sigc::signal<void> Changed; /* for position */ - sigc::signal<void> StateChanged; /* for mute */ + boost::signals2::signal<void()> Changed; /* for position */ + boost::signals2::signal<void()> StateChanged; /* for mute */ int set_state (const XMLNode&, int version); virtual XMLNode& state (bool full_state) = 0; @@ -271,9 +270,9 @@ public: StreamPanner &streampanner( uint32_t n ) const { assert( n < _streampanners.size() ); return *_streampanners[n]; } uint32_t npanners() const { return _streampanners.size(); } - sigc::signal<void> Changed; - sigc::signal<void> LinkStateChanged; - sigc::signal<void> StateChanged; /* for bypass */ + boost::signals2::signal<void()> Changed; + boost::signals2::signal<void()> LinkStateChanged; + boost::signals2::signal<void()> StateChanged; /* for bypass */ /* only StreamPanner should call these */ diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 3ed32f0984..9c089c2f05 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -32,7 +32,6 @@ #include <glib.h> -#include <sigc++/signal.h> #include "pbd/undo.h" #include "pbd/stateful.h" @@ -51,9 +50,9 @@ namespace ARDOUR { class Session; class Region; -class Playlist : public SessionObject, - public boost::noncopyable, - public boost::enable_shared_from_this<Playlist> { +class Playlist : public SessionObject + , public boost::noncopyable + , public boost::enable_shared_from_this<Playlist> { public: typedef std::list<boost::shared_ptr<Region> > RegionList; @@ -125,19 +124,19 @@ class Playlist : public SessionObject, nframes64_t find_next_transient (nframes64_t position, int dir); - void foreach_region (sigc::slot<void, boost::shared_ptr<Region> >); + void foreach_region (boost::function<void (boost::shared_ptr<Region>)>); XMLNode& get_state (); int set_state (const XMLNode&, int version); XMLNode& get_template (); - sigc::signal<void,bool> InUse; - sigc::signal<void> Modified; - sigc::signal<void, boost::weak_ptr<Region> > RegionAdded; - sigc::signal<void, boost::weak_ptr<Region> > RegionRemoved; - sigc::signal<void> NameChanged; - sigc::signal<void> LengthChanged; - sigc::signal<void, std::list< Evoral::RangeMove<nframes_t> > const &> RangesMoved; + boost::signals2::signal<void(bool)> InUse; + boost::signals2::signal<void()> Modified; + boost::signals2::signal<void(boost::weak_ptr<Region>)> RegionAdded; + boost::signals2::signal<void(boost::weak_ptr<Region>)> RegionRemoved; + boost::signals2::signal<void()> NameChanged; + boost::signals2::signal<void()> LengthChanged; + boost::signals2::signal<void(std::list< Evoral::RangeMove<nframes_t> > const &)> RangesMoved; static std::string bump_name (std::string old_name, Session&); @@ -195,7 +194,7 @@ class Playlist : public SessionObject, RegionList regions; /* the current list of regions in the playlist */ std::set<boost::shared_ptr<Region> > all_regions; /* all regions ever added to this playlist */ - std::list<sigc::connection> region_state_changed_connections; + PBD::ScopedConnectionList region_state_changed_connections; DataType _type; mutable gint block_notifications; mutable gint ignore_state_changes; diff --git a/libs/ardour/ardour/playlist_factory.h b/libs/ardour/ardour/playlist_factory.h index 02bd68ae7a..4c3680ae8e 100644 --- a/libs/ardour/ardour/playlist_factory.h +++ b/libs/ardour/ardour/playlist_factory.h @@ -31,7 +31,7 @@ class Session; class PlaylistFactory { public: - static sigc::signal<void,boost::shared_ptr<Playlist>, bool> PlaylistCreated; + static boost::signals2::signal<void(boost::shared_ptr<Playlist>, bool)> PlaylistCreated; static boost::shared_ptr<Playlist> create (Session&, const XMLNode&, bool hidden = false, bool unused = false); static boost::shared_ptr<Playlist> create (DataType type, Session&, std::string name, bool hidden = false); diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index 5a86b6e005..ea8f95d8f5 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -21,7 +21,6 @@ #define __ardour_plugin_h__ #include <boost/shared_ptr.hpp> -#include <sigc++/signal.h> #include <glibmm/ustring.h> #include "pbd/statefuldestructible.h" @@ -144,7 +143,7 @@ class Plugin : public PBD::StatefulDestructible, public Latent virtual bool has_editor() const = 0; - sigc::signal<void,uint32_t,float> ParameterChanged; + boost::signals2::signal<void(uint32_t,float)> ParameterChanged; /* NOTE: this block of virtual methods looks like the interface to a Processor, but Plugin does not inherit from Processor. diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 593db1ff0d..6be8f1dda6 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -25,7 +25,6 @@ #include <boost/weak_ptr.hpp> -#include <sigc++/signal.h> #include "ardour/ardour.h" #include "ardour/types.h" #include "ardour/processor.h" @@ -107,7 +106,7 @@ class PluginInsert : public Processor void collect_signal_for_analysis(nframes_t nframes); - sigc::signal<void, BufferSet*, BufferSet*> AnalysisDataGathered; + boost::signals2::signal<void(BufferSet*, BufferSet*)> AnalysisDataGathered; private: /* disallow copy construction */ diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 0a056b574a..44c529835e 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -70,7 +70,7 @@ class PluginManager : public boost::noncopyable { PluginStatusType get_status (const PluginInfoPtr&); /** plugins were added to or removed from one of the PluginInfoLists */ - sigc::signal<void> PluginListChanged; + boost::signals2::signal<void()> PluginListChanged; private: struct PluginStatus { diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h index 2597fa9601..be4df6bd02 100644 --- a/libs/ardour/ardour/port.h +++ b/libs/ardour/ardour/port.h @@ -25,7 +25,8 @@ #include <vector> #include <jack/jack.h> #include <boost/utility.hpp> -#include <sigc++/trackable.h> +#include <boost/signals2.hpp> + #include "ardour/data_type.h" #include "ardour/types.h" @@ -34,7 +35,7 @@ namespace ARDOUR { class AudioEngine; class Buffer; -class Port : public sigc::trackable, public boost::noncopyable +class Port : public boost::noncopyable { public: enum Flags { @@ -117,7 +118,7 @@ public: static void set_engine (AudioEngine *); - sigc::signal<void, bool> MonitorInputChanged; + boost::signals2::signal<void(bool)> MonitorInputChanged; protected: diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h index 97f930df6e..5e50b4775e 100644 --- a/libs/ardour/ardour/port_insert.h +++ b/libs/ardour/ardour/port_insert.h @@ -24,7 +24,6 @@ #include <string> #include <exception> -#include <sigc++/signal.h> #include "ardour/ardour.h" #include "ardour/io_processor.h" #include "ardour/types.h" diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h index c57eb4354c..5962e8f44e 100644 --- a/libs/ardour/ardour/processor.h +++ b/libs/ardour/ardour/processor.h @@ -26,7 +26,6 @@ #include "pbd/statefuldestructible.h" -#include <sigc++/signal.h> #include "ardour/ardour.h" #include "ardour/automatable_controls.h" @@ -99,10 +98,10 @@ class Processor : public SessionObject, public AutomatableControls, public Laten void *get_gui () const { return _gui; } void set_gui (void *p) { _gui = p; } - static sigc::signal<void,Processor*> ProcessorCreated; + static boost::signals2::signal<void(Processor*)> ProcessorCreated; - sigc::signal<void> ActiveChanged; - sigc::signal<void,ChanCount,ChanCount> ConfigurationChanged; + boost::signals2::signal<void()> ActiveChanged; + boost::signals2::signal<void(ChanCount,ChanCount)> ConfigurationChanged; protected: int _pending_active; diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 7bae98e573..a276fb19ee 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -26,6 +26,7 @@ #include <boost/utility.hpp> #include "pbd/undo.h" +#include "pbd/scoped_connections.h" #include "ardour/ardour.h" #include "ardour/data_type.h" @@ -95,8 +96,8 @@ class Region static Change LayerChanged; static Change HiddenChanged; - sigc::signal<void,Change> StateChanged; - static sigc::signal<void,boost::shared_ptr<ARDOUR::Region> > RegionPropertyChanged; + boost::signals2::signal<void(Change)> StateChanged; + static boost::signals2::signal<void(boost::shared_ptr<ARDOUR::Region>)> RegionPropertyChanged; void unlock_property_changes () { _flags = Flag (_flags & ~DoNotSendPropertyChanges); } void block_property_changes () { _flags = Flag (_flags | DoNotSendPropertyChanges); } @@ -218,7 +219,7 @@ class Region boost::shared_ptr<ARDOUR::Playlist> playlist() const { return _playlist.lock(); } virtual void set_playlist (boost::weak_ptr<ARDOUR::Playlist>); - void source_deleted (boost::shared_ptr<Source>); + void source_deleted (boost::weak_ptr<Source>); boost::shared_ptr<Source> source (uint32_t n=0) const { return _sources[ (n < _sources.size()) ? n : 0 ]; } uint32_t n_channels() const { return _sources.size(); } diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h index e702a2433f..51858e4926 100644 --- a/libs/ardour/ardour/region_factory.h +++ b/libs/ardour/ardour/region_factory.h @@ -40,7 +40,7 @@ class RegionFactory { itself, to permit dynamic_cast<> to be used to infer the type of Region. */ - static sigc::signal<void,boost::shared_ptr<Region> > CheckNewRegion; + static boost::signals2::signal<void(boost::shared_ptr<Region>)> CheckNewRegion; static boost::shared_ptr<Region> create (boost::shared_ptr<const Region>); diff --git a/libs/ardour/ardour/return.h b/libs/ardour/ardour/return.h index a3d3859899..f663c109a5 100644 --- a/libs/ardour/ardour/return.h +++ b/libs/ardour/ardour/return.h @@ -21,7 +21,6 @@ #ifndef __ardour_return_h__ #define __ardour_return_h__ -#include <sigc++/signal.h> #include <string> diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 92a3c8c6b8..dd6173e963 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -163,7 +163,7 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou void flush_processors (); - void foreach_processor (sigc::slot<void, boost::weak_ptr<Processor> > method) { + void foreach_processor (boost::function<void(boost::weak_ptr<Processor>)> method) { Glib::RWLock::ReaderLock lm (_processor_lock); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { method (boost::weak_ptr<Processor> (*i)); @@ -227,28 +227,28 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou void set_user_latency (nframes_t); nframes_t initial_delay() const { return _initial_delay; } - sigc::signal<void> active_changed; - sigc::signal<void> phase_invert_changed; - sigc::signal<void> denormal_protection_changed; - sigc::signal<void,void*> listen_changed; - sigc::signal<void,void*> solo_changed; - sigc::signal<void,void*> solo_safe_changed; - sigc::signal<void,void*> solo_isolated_changed; - sigc::signal<void,void*> comment_changed; - sigc::signal<void,void*> mute_changed; - sigc::signal<void> mute_points_changed; + boost::signals2::signal<void()> active_changed; + boost::signals2::signal<void()> phase_invert_changed; + boost::signals2::signal<void()> denormal_protection_changed; + boost::signals2::signal<void(void*)> listen_changed; + boost::signals2::signal<void(void*)> solo_changed; + boost::signals2::signal<void(void*)> solo_safe_changed; + boost::signals2::signal<void(void*)> solo_isolated_changed; + boost::signals2::signal<void(void*)> comment_changed; + boost::signals2::signal<void(void*)> mute_changed; + boost::signals2::signal<void()> mute_points_changed; /** the processors have changed; the parameter indicates what changed */ - sigc::signal<void, RouteProcessorChange> processors_changed; - sigc::signal<void,void*> record_enable_changed; + boost::signals2::signal<void(RouteProcessorChange)> processors_changed; + boost::signals2::signal<void(void*)> record_enable_changed; /** the metering point has changed */ - sigc::signal<void,void*> meter_change; - sigc::signal<void> signal_latency_changed; - sigc::signal<void> initial_delay_changed; + boost::signals2::signal<void(void*)> meter_change; + boost::signals2::signal<void()> signal_latency_changed; + boost::signals2::signal<void()> initial_delay_changed; /* gui's call this for their own purposes. */ - sigc::signal<void,std::string,void*> gui_changed; + boost::signals2::signal<void(std::string,void*)> gui_changed; /* stateful */ @@ -261,7 +261,7 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou int save_as_template (const std::string& path, const std::string& name); - sigc::signal<void,void*> SelectedChanged; + boost::signals2::signal<void(void*)> SelectedChanged; int listen_via (boost::shared_ptr<Route>, Placement p, bool active, bool aux); void drop_listen (boost::shared_ptr<Route>); @@ -306,10 +306,10 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou void set_remote_control_id (uint32_t id); uint32_t remote_control_id () const; - sigc::signal<void> RemoteControlIDChanged; + boost::signals2::signal<void()> RemoteControlIDChanged; void sync_order_keys (std::string const &); - static sigc::signal<void, std::string const &> SyncOrderKeys; + static boost::signals2::signal<void(std::string const &)> SyncOrderKeys; protected: friend class Session; @@ -379,8 +379,6 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou void silence (nframes_t nframes); - sigc::connection input_signal_connection; - ChanCount processor_max_streams; uint32_t _remote_control_id; @@ -391,7 +389,6 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou boost::shared_ptr<Amp> _amp; boost::shared_ptr<PeakMeter> _meter; - sigc::connection _meter_connection; private: void init (); diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index bec9a7e8a9..fe4079050d 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -24,9 +24,11 @@ #include <set> #include <string> #include <stdint.h> -#include <sigc++/signal.h> +#include <boost/signals2.hpp> #include "pbd/stateful.h" +#include "pbd/scoped_connections.h" + #include "ardour/types.h" namespace ARDOUR { @@ -36,7 +38,7 @@ class Track; class AudioTrack; class Session; -class RouteGroup : public PBD::Stateful, public sigc::trackable { +class RouteGroup : public PBD::Stateful, public PBD::ScopedConnectionList { public: enum Flag { Relative = 0x1, @@ -126,8 +128,8 @@ public: boost::shared_ptr<RouteList> route_list() { return routes; } - sigc::signal<void> changed; - sigc::signal<void,void*> FlagsChanged; + boost::signals2::signal<void()> changed; + boost::signals2::signal<void(void*)> FlagsChanged; XMLNode& get_state (); diff --git a/libs/ardour/ardour/route_group_member.h b/libs/ardour/ardour/route_group_member.h index 4b577121a6..8743423b18 100644 --- a/libs/ardour/ardour/route_group_member.h +++ b/libs/ardour/ardour/route_group_member.h @@ -20,7 +20,6 @@ #ifndef __libardour_route_group_member_h__ #define __libardour_route_group_member_h__ -#include <sigc++/signal.h> namespace ARDOUR { @@ -34,7 +33,7 @@ class RouteGroupMember RouteGroup* route_group () const { return _route_group; } - sigc::signal<void> route_group_changed; + boost::signals2::signal<void()> route_group_changed; protected: RouteGroup* _route_group; diff --git a/libs/ardour/ardour/send.h b/libs/ardour/ardour/send.h index 78a82820df..8b39d12727 100644 --- a/libs/ardour/ardour/send.h +++ b/libs/ardour/ardour/send.h @@ -20,7 +20,6 @@ #ifndef __ardour_send_h__ #define __ardour_send_h__ -#include <sigc++/signal.h> #include <string> #include "pbd/stateful.h" diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 192dc09908..273f251f3d 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -38,14 +38,12 @@ #include "pbd/error.h" #include "pbd/rcu.h" #include "pbd/statefuldestructible.h" +#include "pbd/scoped_connections.h" #include "pbd/undo.h" #include "midi++/mmc.h" #include "midi++/types.h" -#include "pbd/destructible.h" -#include "pbd/stateful.h" - #include "ardour/ardour.h" #include "ardour/click.h" #include "ardour/chan_count.h" @@ -120,7 +118,7 @@ class VSTPlugin; extern void setup_enum_writer (); -class Session : public PBD::StatefulDestructible, public SessionEventManager, public boost::noncopyable +class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionList, public SessionEventManager, public boost::noncopyable { public: enum RecordState { @@ -166,14 +164,14 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void set_deletion_in_progress (); void clear_deletion_in_progress (); bool deletion_in_progress() const { return _state_of_the_state & Deletion; } - sigc::signal<void> DirtyChanged; + boost::signals2::signal<void()> DirtyChanged; const SessionDirectory& session_directory () const { return *(_session_dir.get()); } - static sigc::signal<void> AutoBindingOn; - static sigc::signal<void> AutoBindingOff; + static boost::signals2::signal<void()> AutoBindingOn; + static boost::signals2::signal<void()> AutoBindingOff; - static sigc::signal<void,std::string> Dialog; + static boost::signals2::signal<void(std::string)> Dialog; std::string sound_dir (bool with_path = true) const; std::string peak_dir () const; @@ -274,29 +272,29 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu /* Proxy signal for region hidden changes */ - sigc::signal<void,boost::shared_ptr<Region> > RegionHiddenChange; + boost::signals2::signal<void(boost::shared_ptr<Region>)> RegionHiddenChange; /* Emitted when all i/o connections are complete */ - sigc::signal<void> IOConnectionsComplete; + boost::signals2::signal<void()> IOConnectionsComplete; /* Record status signals */ - sigc::signal<void> RecordStateChanged; + boost::signals2::signal<void()> RecordStateChanged; /* Transport mechanism signals */ - sigc::signal<void> TransportStateChange; /* generic */ - sigc::signal<void,nframes64_t> PositionChanged; /* sent after any non-sequential motion */ - sigc::signal<void> DurationChanged; - sigc::signal<void,nframes64_t> Xrun; - sigc::signal<void> TransportLooped; + boost::signals2::signal<void()> TransportStateChange; /* generic */ + boost::signals2::signal<void(nframes64_t)> PositionChanged; /* sent after any non-sequential motion */ + boost::signals2::signal<void()> DurationChanged; + boost::signals2::signal<void(nframes64_t)> Xrun; + boost::signals2::signal<void()> TransportLooped; /** emitted when a locate has occurred */ - sigc::signal<void> Located; + boost::signals2::signal<void()> Located; - sigc::signal<void,RouteList&> RouteAdded; - sigc::signal<void> RouteGroupChanged; + boost::signals2::signal<void(RouteList&)> RouteAdded; + boost::signals2::signal<void()> RouteGroupChanged; void queue_event (SessionEvent*); @@ -350,9 +348,9 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu Locations *locations() { return &_locations; } - sigc::signal<void,Location*> auto_loop_location_changed; - sigc::signal<void,Location*> auto_punch_location_changed; - sigc::signal<void> locations_modified; + boost::signals2::signal<void(Location*)> auto_loop_location_changed; + boost::signals2::signal<void(Location*)> auto_punch_location_changed; + boost::signals2::signal<void()> locations_modified; void set_auto_punch_location (Location *); void set_auto_loop_location (Location *); @@ -377,8 +375,8 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu static int rename_template (std::string old_name, std::string new_name); static int delete_template (std::string name); - sigc::signal<void,std::string> StateSaved; - sigc::signal<void> StateReady; + boost::signals2::signal<void(std::string)> StateSaved; + boost::signals2::signal<void()> StateReady; std::vector<std::string*>* possible_states() const; static std::vector<std::string*>* possible_states (std::string path); @@ -408,12 +406,12 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu RouteGroup *route_group_by_name (std::string); - sigc::signal<void,RouteGroup*> route_group_added; - sigc::signal<void> route_group_removed; + boost::signals2::signal<void(RouteGroup*)> route_group_added; + boost::signals2::signal<void()> route_group_removed; - void foreach_route_group (sigc::slot<void,RouteGroup*> sl) { + void foreach_route_group (boost::function<void(RouteGroup*)> f) { for (std::list<RouteGroup *>::iterator i = _route_groups.begin(); i != _route_groups.end(); i++) { - sl (*i); + f (*i); } } @@ -478,9 +476,9 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu nframes_t convert_to_frames_at (nframes_t position, AnyTime const &); - static sigc::signal<void> StartTimeChanged; - static sigc::signal<void> EndTimeChanged; - static sigc::signal<void> TimecodeOffsetChanged; + static boost::signals2::signal<void()> StartTimeChanged; + static boost::signals2::signal<void()> EndTimeChanged; + static boost::signals2::signal<void()> TimecodeOffsetChanged; std::vector<SyncSource> get_available_sync_options() const; void request_sync_source (Slave*); @@ -498,15 +496,15 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu TempoMap& tempo_map() { return *_tempo_map; } /// signals the current transport position in frames, bbt and timecode time (in that order) - sigc::signal<void, const nframes_t&, const BBT_Time&, const Timecode::Time&> tick; + boost::signals2::signal<void(const nframes_t&, const BBT_Time&, const Timecode::Time&)> tick; /* region info */ void add_regions (std::vector<boost::shared_ptr<Region> >&); - sigc::signal<void,boost::weak_ptr<Region> > RegionAdded; - sigc::signal<void,std::vector<boost::weak_ptr<Region> >& > RegionsAdded; - sigc::signal<void,boost::weak_ptr<Region> > RegionRemoved; + boost::signals2::signal<void(boost::weak_ptr<Region>)> RegionAdded; + boost::signals2::signal<void(std::vector<boost::weak_ptr<Region> >&)> RegionsAdded; + boost::signals2::signal<void(boost::weak_ptr<Region>)> RegionRemoved; int region_name (std::string& result, std::string base = std::string(""), bool newlevel = false); std::string new_region_name (std::string); @@ -531,9 +529,9 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu int start_audio_export (nframes_t position, bool realtime); - sigc::signal<int, nframes_t> ProcessExport; - sigc::signal<void> ExportReadFinished; - static sigc::signal<void, std::string, std::string> Exported; + boost::signals2::signal<int(nframes_t)> ProcessExport; + boost::signals2::signal<void()> ExportReadFinished; + static boost::signals2::signal<void(std::string, std::string)> Exported; void add_source (boost::shared_ptr<Source>); void remove_source (boost::weak_ptr<Source>); @@ -550,16 +548,16 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu 0 for "yes, delete this playlist", 1 for "no, don't delete this playlist". */ - sigc::signal<int,boost::shared_ptr<Playlist> > AskAboutPlaylistDeletion; + boost::signals2::signal<void(boost::shared_ptr<Playlist>)> AskAboutPlaylistDeletion; /** handlers should return 0 for "ignore the rate mismatch", !0 for "do not use this session" */ - static sigc::signal<int,nframes_t, nframes_t> AskAboutSampleRateMismatch; + static boost::signals2::signal<int(nframes_t, nframes_t)> AskAboutSampleRateMismatch; /** handlers should return !0 for use pending state, 0 for ignore it. */ - static sigc::signal<int> AskAboutPendingState; + static boost::signals2::signal<int()> AskAboutPendingState; boost::shared_ptr<AudioFileSource> create_audio_source_for_session (ARDOUR::AudioDiskstream&, uint32_t which_channel, bool destructive); @@ -577,8 +575,8 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void remove_named_selection (NamedSelection *); template<class T> void foreach_named_selection (T& obj, void (T::*func)(NamedSelection&)); - sigc::signal<void> NamedSelectionAdded; - sigc::signal<void> NamedSelectionRemoved; + boost::signals2::signal<void()> NamedSelectionAdded; + boost::signals2::signal<void()> NamedSelectionRemoved; /* Curves and AutomationLists (TODO when they go away) */ void add_automation_list(AutomationList*); @@ -597,7 +595,7 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void cancel_audition (); bool is_auditioning () const; - sigc::signal<void,bool> AuditionActive; + boost::signals2::signal<void(bool)> AuditionActive; /* flattening stuff */ @@ -619,8 +617,8 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void set_listen (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false); void set_record_enable (boost::shared_ptr<RouteList>, bool, SessionEvent::RTeventCallback after = rt_cleanup, bool group_override = false); - sigc::signal<void,bool> SoloActive; - sigc::signal<void> SoloChanged; + boost::signals2::signal<void(bool)> SoloActive; + boost::signals2::signal<void()> SoloChanged; /* control/master out */ @@ -658,8 +656,8 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void remove_bundle (boost::shared_ptr<Bundle>); boost::shared_ptr<Bundle> bundle_by_name (std::string) const; - sigc::signal<void,boost::shared_ptr<Bundle> > BundleAdded; - sigc::signal<void,boost::shared_ptr<Bundle> > BundleRemoved; + boost::signals2::signal<void(boost::shared_ptr<Bundle>)> BundleAdded; + boost::signals2::signal<void(boost::shared_ptr<Bundle>)> BundleRemoved; /* MIDI control */ @@ -673,10 +671,10 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu MIDI::Port *midi_port() const { return _midi_port; } MIDI::Port *midi_clock_port() const { return _midi_clock_port; } - sigc::signal<void> MTC_PortChanged; - sigc::signal<void> MMC_PortChanged; - sigc::signal<void> MIDI_PortChanged; - sigc::signal<void> MIDIClock_PortChanged; + boost::signals2::signal<void()> MTC_PortChanged; + boost::signals2::signal<void()> MMC_PortChanged; + boost::signals2::signal<void()> MIDI_PortChanged; + boost::signals2::signal<void()> MIDIClock_PortChanged; void set_trace_midi_input (bool, MIDI::Port* port = 0); void set_trace_midi_output (bool, MIDI::Port* port = 0); @@ -693,7 +691,7 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void stop_scrub (); void set_scrub_speed (float); nframes_t scrub_buffer_size() const; - sigc::signal<void> ScrubReady; + boost::signals2::signal<void()> ScrubReady; /* History (for editors, mixers, UIs etc.) */ @@ -726,11 +724,11 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu _current_trans.top()->add_command (cmd); } - std::map<PBD::ID, PBD::StatefulThingWithGoingAway*> registry; + std::map<PBD::ID,PBD::StatefulDestructible*> registry; // these commands are implemented in libs/ardour/session_command.cc Command* memento_command_factory(XMLNode* n); - void register_with_memento_command_factory(PBD::ID, PBD::StatefulThingWithGoingAway*); + void register_with_memento_command_factory(PBD::ID, PBD::StatefulDestructible*); /* clicking */ @@ -767,7 +765,7 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void* ptr, float opt); - static sigc::signal<void> SendFeedback; + static boost::signals2::signal<void()> SendFeedback; /* Controllables */ @@ -945,7 +943,7 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu int stop_audio_export (); void finalize_audio_export (); - sigc::connection export_freewheel_connection; + boost::signals2::scoped_connection export_freewheel_connection; void prepare_diskstreams (); void commit_diskstreams (nframes_t, bool& session_requires_butler); @@ -1069,16 +1067,12 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu void locations_added (Location*); void handle_locations_changed (Locations::LocationList&); - sigc::connection auto_punch_start_changed_connection; - sigc::connection auto_punch_end_changed_connection; - sigc::connection auto_punch_changed_connection; + PBD::ScopedConnectionList punch_connections; void auto_punch_start_changed (Location *); void auto_punch_end_changed (Location *); void auto_punch_changed (Location *); - sigc::connection auto_loop_start_changed_connection; - sigc::connection auto_loop_end_changed_connection; - sigc::connection auto_loop_changed_connection; + PBD::ScopedConnectionList loop_connections; void auto_loop_changed (Location *); void first_stage_init (std::string path, std::string snapshot_name); @@ -1143,7 +1137,7 @@ class Session : public PBD::StatefulDestructible, public SessionEventManager, pu struct timeval last_mmc_step; double step_speed; - typedef sigc::slot<bool> MidiTimeoutCallback; + typedef boost::function<bool()> MidiTimeoutCallback; typedef std::list<MidiTimeoutCallback> MidiTimeoutList; MidiTimeoutList midi_timeouts; diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 1a3303087d..66c8720186 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -4,7 +4,6 @@ #include <list> #include <boost/function.hpp> #include <boost/shared_ptr.hpp> -#include <sigc++/signal.h> #include "pbd/pool.h" #include "pbd/ringbuffer.h" diff --git a/libs/ardour/ardour/session_handle.h b/libs/ardour/ardour/session_handle.h new file mode 100644 index 0000000000..c747ee9976 --- /dev/null +++ b/libs/ardour/ardour/session_handle.h @@ -0,0 +1,57 @@ +/* + Copyright (C) 2009 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __libardour_session_handle_h__ +#define __libardour_session_handle_h__ + +#include "pbd/scoped_connections.h" + +namespace ARDOUR { + class Session; + +class SessionHandleRef : public PBD::ScopedConnectionList +{ + public: + SessionHandleRef (ARDOUR::Session& s); + virtual ~SessionHandleRef () {} + + protected: + ARDOUR::Session& _session; + virtual void session_going_away (); +}; + +class SessionHandlePtr +{ + public: + SessionHandlePtr (ARDOUR::Session* s); + SessionHandlePtr () : _session (0) {} + virtual ~SessionHandlePtr () {} + + virtual void set_session (ARDOUR::Session *); + + protected: + ARDOUR::Session* _session; + PBD::ScopedConnectionList _session_connections; + + virtual void session_going_away (); +}; + +} /* namespace */ + +#endif /* __libardour_session_handle_h__ */ diff --git a/libs/ardour/ardour/session_object.h b/libs/ardour/ardour/session_object.h index 3a796c75b5..eb1a7c3e30 100644 --- a/libs/ardour/ardour/session_object.h +++ b/libs/ardour/ardour/session_object.h @@ -22,24 +22,26 @@ #include <string> #include "pbd/statefuldestructible.h" +#include "pbd/scoped_connections.h" + +#include "ardour/session_handle.h" namespace ARDOUR { class Session; -/** An object associated with a Session. - * - * This is a few common things factored out of IO which weren't IO specific - * (to fix the problem with e.g. PluginInsert being an IO which it shouldn't be). +/** A named object associated with a Session. Objects derived from this class are + expected to be destroyed before the session calls drop_references(). */ -class SessionObject : public PBD::StatefulDestructible + +class SessionObject : public SessionHandleRef, public PBD::StatefulDestructible { -public: - SessionObject(Session& session, const std::string& name) - : _session(session) + public: + SessionObject (Session& session, const std::string& name) + : SessionHandleRef (session) , _name(name) {} - + Session& session() const { return _session; } const std::string& name() const { return _name; } @@ -51,10 +53,9 @@ public: return true; } - sigc::signal<void> NameChanged; + boost::signals2::signal<void()> NameChanged; -protected: - Session& _session; + protected: std::string _name; }; diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h index 83f469cfd4..8870794cc0 100644 --- a/libs/ardour/ardour/session_playlists.h +++ b/libs/ardour/ardour/session_playlists.h @@ -25,7 +25,9 @@ #include <string> #include <glibmm/thread.h> #include <boost/shared_ptr.hpp> -#include <sigc++/trackable.h> +#include <boost/function.hpp> + +#include "pbd/scoped_connections.h" class XMLNode; @@ -36,7 +38,7 @@ class Region; class Source; class Session; -class SessionPlaylists : public sigc::trackable +class SessionPlaylists : public PBD::ScopedConnectionList { public: ~SessionPlaylists (); @@ -58,7 +60,7 @@ private: void find_equivalent_playlist_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >& result); void update_after_tempo_map_change (); void add_state (XMLNode *, bool); - bool maybe_delete_unused (sigc::signal<int, boost::shared_ptr<Playlist> >); + bool maybe_delete_unused (boost::function<int(boost::shared_ptr<Playlist>)>); int load (Session &, const XMLNode&); int load_unused (Session &, const XMLNode&); boost::shared_ptr<Playlist> XMLPlaylistFactory (Session &, const XMLNode&); diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index 1125e920a0..4fe8e1ec46 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -23,10 +23,12 @@ #include <vector> #include <glibmm/thread.h> +#include <boost/signals2.hpp> #include <jack/jack.h> -#include <sigc++/signal.h> +#include "pbd/scoped_connections.h" + #include "ardour/types.h" #include "midi++/parser.h" #include "midi++/types.h" @@ -220,7 +222,7 @@ struct SafeTime { } }; -class MTC_Slave : public Slave, public sigc::trackable { +class MTC_Slave : public Slave { public: MTC_Slave (Session&, MIDI::Port&); ~MTC_Slave (); @@ -240,7 +242,7 @@ class MTC_Slave : public Slave, public sigc::trackable { private: Session& session; MIDI::Port* port; - std::vector<sigc::connection> connections; + PBD::ScopedConnectionList* port_connections; bool can_notify_on_unknown_rate; PIChaser* pic; @@ -277,7 +279,7 @@ class MTC_Slave : public Slave, public sigc::trackable { void process_apparent_speed (double); }; -class MIDIClock_Slave : public Slave, public sigc::trackable { +class MIDIClock_Slave : public Slave { public: MIDIClock_Slave (Session&, MIDI::Port&, int ppqn = 24); @@ -301,7 +303,7 @@ class MIDIClock_Slave : public Slave, public sigc::trackable { private: ISlaveSessionProxy* session; MIDI::Port* port; - std::vector<sigc::connection> connections; + PBD::ScopedConnectionList* port_connections; /// pulses per quarter note for one MIDI clock frame (default 24) int ppqn; diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index b2e1381e43..a7a6e2207c 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -24,7 +24,6 @@ #include <set> #include <boost/utility.hpp> -#include <sigc++/signal.h> #include "pbd/statefuldestructible.h" #include "ardour/ardour.h" @@ -82,15 +81,15 @@ class Source : public SessionObject, public boost::noncopyable virtual bool set_destructive (bool /*yn*/) { return false; } virtual bool length_mutable() const { return false; } - static sigc::signal<void,Source*> SourceCreated; - sigc::signal<void,boost::shared_ptr<Source> > Switched; + static boost::signals2::signal<void(Source*)> SourceCreated; + boost::signals2::signal<void(boost::shared_ptr<Source>)> Switched; bool has_been_analysed() const; virtual bool can_be_analysed() const { return false; } virtual void set_been_analysed (bool yn); virtual bool check_for_analysis_data_on_disk(); - sigc::signal<void> AnalysisChanged; + boost::signals2::signal<void()> AnalysisChanged; AnalysisFeatureList transients; std::string get_transients_path() const; diff --git a/libs/ardour/ardour/source_factory.h b/libs/ardour/ardour/source_factory.h index 21af4ece75..4da285e980 100644 --- a/libs/ardour/ardour/source_factory.h +++ b/libs/ardour/ardour/source_factory.h @@ -22,7 +22,6 @@ #include <string> #include <stdint.h> -#include <sigc++/sigc++.h> #include <boost/shared_ptr.hpp> #include "ardour/source.h" @@ -38,7 +37,7 @@ class SourceFactory { public: static void init (); - static sigc::signal<void,boost::shared_ptr<Source> > SourceCreated; + static boost::signals2::signal<void(boost::shared_ptr<Source>)> SourceCreated; static boost::shared_ptr<Source> create (Session&, const XMLNode& node, bool async = false); static boost::shared_ptr<Source> createSilent (Session&, const XMLNode& node, diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index 28c974bff1..ba7bbbcf7e 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -30,7 +30,6 @@ #include "pbd/stateful.h" #include "pbd/statefuldestructible.h" -#include <sigc++/signal.h> #include "ardour/ardour.h" @@ -259,7 +258,7 @@ class TempoMap : public PBD::StatefulDestructible nframes_t frame_rate () const { return _frame_rate; } - sigc::signal<void,ARDOUR::Change> StateChanged; + boost::signals2::signal<void(ARDOUR::Change)> StateChanged; private: static Tempo _default_tempo; diff --git a/libs/ardour/ardour/ticker.h b/libs/ardour/ardour/ticker.h index 3e0f1844a6..9a26d4d3ff 100644 --- a/libs/ardour/ardour/ticker.h +++ b/libs/ardour/ardour/ticker.h @@ -18,10 +18,13 @@ $Id$ */ -#include <sigc++/sigc++.h> -#include "ardour/types.h" #include "midi++/jack.h" +#include "pbd/scoped_connections.h" + +#include "ardour/types.h" +#include "ardour/session_handle.h" + #ifndef TICKER_H_ #define TICKER_H_ @@ -31,22 +34,18 @@ namespace ARDOUR class Session; -class Ticker : public sigc::trackable +class Ticker : public SessionHandlePtr { public: - Ticker() : _session(0) {}; - virtual ~Ticker() {}; + Ticker() {}; + virtual ~Ticker() {} virtual void tick( const nframes_t& transport_frames, const BBT_Time& transport_bbt, const Timecode::Time& transport_timecode) = 0; - virtual void set_session(Session& s); - virtual void going_away() { _session = 0; } - -protected: - Session* _session; + void set_session (Session* s); }; class MidiClockTicker : public Ticker @@ -70,8 +69,8 @@ public: const BBT_Time& transport_bbt, const Timecode::Time& transport_timecode); - void set_session(Session& s); - void going_away() { _midi_port = 0; Ticker::going_away(); } + void set_session (Session* s); + void session_going_away(); /// slot for the signal session::MIDIClock_PortChanged void update_midi_clock_port(); diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index 5d8e2dbbd5..c23e159684 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -43,7 +43,7 @@ class Track : public Route TrackMode mode () const { return _mode; } virtual int set_mode (TrackMode /*m*/) { return false; } virtual bool can_use_mode (TrackMode /*m*/, bool& /*bounce_required*/) { return false; } - sigc::signal<void> TrackModeChanged; + boost::signals2::signal<void()> TrackModeChanged; virtual int no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, bool state_changing, bool can_record, bool rec_monitors_input); @@ -90,8 +90,8 @@ class Track : public Route bool record_enabled() const; void set_record_enable (bool yn, void *src); - sigc::signal<void> DiskstreamChanged; - sigc::signal<void> FreezeChange; + boost::signals2::signal<void()> DiskstreamChanged; + boost::signals2::signal<void()> FreezeChange; protected: Track (Session& sess, const XMLNode& node, DataType default_type = DataType::AUDIO); @@ -141,7 +141,7 @@ class Track : public Route FreezeRecord _freeze_record; XMLNode* pending_state; - sigc::connection recenable_connection; + boost::signals2::scoped_connection recenable_connection; bool _destructive; boost::shared_ptr<RecEnableControllable> _rec_enable_control; diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index 2d9875df57..753d94294f 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -27,7 +27,6 @@ #include <string> #include <dlfcn.h> -#include <sigc++/signal.h> #include "pbd/stateful.h" #include <jack/types.h> #include "ardour/plugin.h" |