Disconnect Signals before dropping ports
[ardour.git] / libs / ardour / ardour / export_format_manager.h
index 8c54c9cd45d267ff71bb3af7487b95ec3523e2cc..fff97299e5d8485815d72daf0a7dda6084a76807 100644 (file)
 #include <string>
 
 #include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
-#include <sigc++/signal.h>
-#include <sigc++/trackable.h>
 
-#include <ardour/export_formats.h>
+#include "pbd/signals.h"
 
-using std::string;
+#include "ardour/export_formats.h"
+#include "ardour/export_pointers.h"
 
 namespace ARDOUR
 {
@@ -41,46 +39,38 @@ class ExportFormatCompatibility;
 class ExportFormatSpecification;
 class AnyTime;
 
-class ExportFormatManager : public sigc::trackable
+class LIBARDOUR_API ExportFormatManager : public PBD::ScopedConnectionList
 {
   public:
 
-       typedef boost::shared_ptr<ExportFormatCompatibility> CompatPtr;
-       typedef boost::weak_ptr<ExportFormatCompatibility> WeakCompatPtr;
-       typedef std::list<CompatPtr> CompatList;
-       
-       typedef boost::shared_ptr<ExportFormat> FormatPtr;
-       typedef boost::weak_ptr<ExportFormat> WeakFormatPtr;
-       typedef std::list<FormatPtr> FormatList;
-       
+       typedef std::list<ExportFormatCompatibilityPtr> CompatList;
+       typedef std::list<ExportFormatPtr> FormatList;
+
        typedef HasSampleFormat::SampleFormatPtr SampleFormatPtr;
        typedef HasSampleFormat::SampleFormatList SampleFormatList;
        typedef HasSampleFormat::WeakSampleFormatPtr WeakSampleFormatPtr;
-       
+
        typedef HasSampleFormat::DitherTypePtr DitherTypePtr;
        typedef HasSampleFormat::WeakDitherTypePtr WeakDitherTypePtr;
-       
-       typedef boost::shared_ptr<ExportFormatSpecification> SpecPtr;
-       typedef boost::shared_ptr<ExportFormatBase> FormatBasePtr;
-       
+
        /* Quality states */
-       
+
        class QualityState : public ExportFormatBase::SelectableCompatible {
-         public:
-               QualityState (ExportFormatBase::Quality quality, Glib::ustring name) :
-                 quality (quality) { set_name (name); }
+       public:
+               QualityState (ExportFormatBase::Quality quality, std::string name) :
+                       quality (quality) { set_name (name); }
                ExportFormatBase::Quality  quality;
        };
        typedef boost::shared_ptr<QualityState> QualityPtr;
        typedef boost::weak_ptr<QualityState> WeakQualityPtr;
        typedef std::list<QualityPtr> QualityList;
-       
+
        /* Sample rate states */
-       
+
        class SampleRateState : public ExportFormatBase::SelectableCompatible {
          public:
-               SampleRateState (ExportFormatBase::SampleRate rate, Glib::ustring name) :
-                 rate (rate) { set_name (name); }
+               SampleRateState (ExportFormatBase::SampleRate rate, std::string name)
+                       : rate (rate) { set_name (name); }
                ExportFormatBase::SampleRate  rate;
        };
        typedef boost::shared_ptr<SampleRateState> SampleRatePtr;
@@ -89,12 +79,13 @@ class ExportFormatManager : public sigc::trackable
 
   public:
 
-       explicit ExportFormatManager (SpecPtr specification);
+       explicit ExportFormatManager (ExportFormatSpecPtr specification);
        ~ExportFormatManager ();
 
        /* Signals */
 
-       sigc::signal<void, bool> CompleteChanged;
+       PBD::Signal1<void,bool> CompleteChanged;
+       PBD::Signal0<void> DescriptionChanged;
 
        /* Access to lists */
 
@@ -102,11 +93,16 @@ class ExportFormatManager : public sigc::trackable
        QualityList const & get_qualities () { return qualities; }
        FormatList const & get_formats () { return formats; }
        SampleRateList const & get_sample_rates () { return sample_rates; }
-       
+
        /* Non interactive selections */
-       
-       void set_name (Glib::ustring name);
-       
+
+       void set_name (std::string name);
+
+       void select_with_cue (bool);
+       void select_with_toc (bool);
+       void select_with_mp4chaps (bool);
+       void select_upload (bool);
+       void set_command (std::string);
        void select_src_quality (ExportFormatBase::SRCQuality value);
        void select_trim_beginning (bool value);
        void select_silence_beginning (AnyTime const & time);
@@ -123,52 +119,55 @@ class ExportFormatManager : public sigc::trackable
        void init_formats ();
        void init_sample_rates ();
 
-       void add_compatibility (CompatPtr ptr);
+       void add_compatibility (ExportFormatCompatibilityPtr ptr);
        void add_quality (QualityPtr ptr);
-       void add_format (FormatPtr ptr);
+       void add_format (ExportFormatPtr ptr);
        void add_sample_rate (SampleRatePtr ptr);
 
        /* Connected to signals */
-       
-       void change_compatibility_selection (bool select, WeakCompatPtr const & compat);
+
+       void change_compatibility_selection (bool select, WeakExportFormatCompatibilityPtr const & compat);
        void change_quality_selection (bool select, WeakQualityPtr const & quality);
-       void change_format_selection (bool select, WeakFormatPtr const & format);
+       void change_format_selection (bool select, WeakExportFormatPtr const & format);
        void change_sample_rate_selection (bool select, WeakSampleRatePtr const & rate);
-       
+
        void change_sample_format_selection (bool select, WeakSampleFormatPtr const & format);
        void change_dither_type_selection (bool select, WeakDitherTypePtr const & type);
-       
+
        /* Do actual selection */
-       
-       void select_compatibility (WeakCompatPtr const & compat);
+
+       void select_compatibility (WeakExportFormatCompatibilityPtr const & compat);
        void select_quality (QualityPtr const & quality);
-       void select_format (FormatPtr const & format);
+       void select_format (ExportFormatPtr const & format);
        void select_sample_rate (SampleRatePtr const & rate);
-       
+
        void select_sample_format (SampleFormatPtr const & format);
        void select_dither_type (DitherTypePtr const & type);
-       
+
        bool pending_selection_change;
        void selection_changed ();
-       
+       void check_for_description_change ();
+
        /* Formats and compatibilities */
-       
+
        QualityPtr    get_selected_quality ();
-       FormatPtr     get_selected_format ();
+       ExportFormatPtr     get_selected_format ();
        SampleRatePtr get_selected_sample_rate ();
-       
+
        SampleFormatPtr get_selected_sample_format ();
-       
-       FormatBasePtr get_compatibility_intersection ();
-       
-       FormatBasePtr   universal_set;
-       SpecPtr         current_selection;
-       
+
+       ExportFormatBasePtr get_compatibility_intersection ();
+
+       ExportFormatBasePtr   universal_set;
+       ExportFormatSpecPtr   current_selection;
+
        CompatList      compatibilities;
        QualityList     qualities;
        FormatList      formats;
        SampleRateList  sample_rates;
 
+       std::string     prev_description;
+
 };
 
 } // namespace ARDOUR