Make Dropdown menus at least as wide as the button
[ardour.git] / gtk2_ardour / export_format_dialog.h
index acb561b06bc2e1345cf890bf0abf4d787e439dd6..8709ff979b4be4c267d791e375dff6d86817f66f 100644 (file)
 #include "ardour/export_formats.h"
 
 #include "pbd/xml++.h"
+#include "pbd/signals.h"
 
 #include "ardour_dialog.h"
 #include "audio_clock.h"
 
+#ifdef interface
+#undef interface
+#endif
+
 #include <gtkmm.h>
 
-class ExportFormatDialog : public ArdourDialog {
+class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList {
   private:
 
-       typedef ARDOUR::ExportFormatManager::WeakCompatPtr WeakCompatPtr;
+       typedef ARDOUR::WeakExportFormatCompatibilityPtr WeakCompatPtr;
+       typedef ARDOUR::WeakExportFormatPtr WeakFormatPtr;
        typedef ARDOUR::ExportFormatManager::WeakQualityPtr WeakQualityPtr;
-       typedef ARDOUR::ExportFormatManager::WeakFormatPtr WeakFormatPtr;
        typedef ARDOUR::ExportFormatManager::WeakSampleRatePtr WeakSampleRatePtr;
        typedef ARDOUR::ExportFormatManager::WeakSampleFormatPtr WeakSampleFormatPtr;
        typedef ARDOUR::ExportFormatManager::WeakDitherTypePtr WeakDitherTypePtr;
@@ -57,9 +62,9 @@ class ExportFormatDialog : public ArdourDialog {
 
        FormatPtr                   format;
        ARDOUR::ExportFormatManager manager;
-       
+
        XMLNode & original_state;
-       
+
        ARDOUR::AnyTime silence_start;
        ARDOUR::AnyTime silence_end;
 
@@ -67,7 +72,7 @@ class ExportFormatDialog : public ArdourDialog {
        void revert ();
 
        /*** Init functions ***/
-       
+
        void load_state (FormatPtr spec);
        void init_format_table ();
        void init_encoding_option_widgets ();
@@ -75,71 +80,74 @@ class ExportFormatDialog : public ArdourDialog {
        /*** Interactive selections ***/
 
        /* These are connected to signals from GUI components, and should change element states  */
-       
-       void update_compatibility_selection (Glib::ustring const & path);
+
+       void update_compatibility_selection (std::string const & path);
        void update_quality_selection ();
        void update_format_selection ();
        void update_sample_rate_selection ();
        void update_sample_format_selection ();
        void update_dither_type_selection ();
-       
+
        template<typename ColsT>
        void update_selection (Glib::RefPtr<Gtk::ListStore> & list, Gtk::TreeView & view, ColsT & cols);
-       
+
        /* These are connected to signals from elements, and should only update the gui */
-       
+
        void change_compatibility_selection (bool select, WeakCompatPtr compat);
-       
+
        void change_quality_selection (bool select, WeakQualityPtr quality);
        void change_format_selection (bool select, WeakFormatPtr format);
        void change_sample_rate_selection (bool select, WeakSampleRatePtr rate);
        void change_sample_format_selection (bool select, WeakSampleFormatPtr format);
        void change_dither_type_selection (bool select, WeakDitherTypePtr type);
-       
+
        template<typename T, typename ColsT>
        void change_selection (bool select, boost::weak_ptr<T> w_ptr, Glib::RefPtr<Gtk::ListStore> & list, Gtk::TreeView & view, ColsT & cols);
-       
+
        void change_quality_compatibility (bool compatibility, WeakQualityPtr quality);
        void change_format_compatibility (bool compatibility, WeakFormatPtr format);
        void change_sample_rate_compatibility (bool compatibility, WeakSampleRatePtr rate);
        void change_sample_format_compatibility (bool compatibility, WeakSampleFormatPtr format);
        void change_dither_type_compatibility (bool compatibility, WeakDitherTypePtr type);
-       
+
        template<typename T, typename ColsT>
        void change_compatibility (bool compatibility, boost::weak_ptr<T> w_ptr, Glib::RefPtr<Gtk::ListStore> & list, ColsT & cols,
-                                  Glib::ustring const & c_incompatible = "red", Glib::ustring const & c_compatible = "white");
-       
+                                  std::string const & c_incompatible = "red", std::string const & c_compatible = "white");
+
+       void update_description();
+
        uint32_t applying_changes_from_engine;
-       
+
        /*** Non-interactive selections ***/
-       
+
        void update_name ();
-       
+
        void update_trim_start_selection ();
        void update_trim_end_selection ();
-       
+
        void update_normalize_selection ();
+       void update_normalize_sensitivity ();
        void update_silence_start_selection ();
        void update_silence_end_selection ();
-       
+
        void update_clock (AudioClock & clock, ARDOUR::AnyTime const & time);
        void update_time (ARDOUR::AnyTime & time, AudioClock const & clock);
-       
+
        void update_src_quality_selection ();
        void update_tagging_selection ();
-       
+
        /*** Encoding options */
-       
-       void change_encoding_options (ARDOUR::ExportFormatManager::FormatPtr ptr);
-       
+
+       void change_encoding_options (ARDOUR::ExportFormatPtr ptr);
+
        void empty_encoding_option_table ();
        void remove_widget (Gtk::Widget & to_remove, Gtk::Container * remove_from);
-       
+
        void show_linear_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatLinear> ptr);
        void show_ogg_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatOggVorbis> ptr);
        void show_flac_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatFLAC> ptr);
        void show_bwf_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatBWF> ptr);
-       
+
        void fill_sample_format_lists (boost::shared_ptr<ARDOUR::HasSampleFormat> ptr);
 
        /*** GUI components ***/
@@ -150,159 +158,184 @@ class ExportFormatDialog : public ArdourDialog {
 
        Gtk::Label name_label;
        Gtk::Entry name_entry;
-       
+       Gtk::Label name_generated_part;
+
        /* Normalize */
-       
+
        Gtk::HBox        normalize_hbox;
        Gtk::CheckButton normalize_checkbox;
-       Gtk::SpinButton  normalize_spinbutton;
-       Gtk::Adjustment  normalize_adjustment;
-       Gtk::Label       normalize_db_label;
-       
+       Gtk::RadioButton normalize_peak_rb;
+       Gtk::RadioButton normalize_loudness_rb;
+       Gtk::SpinButton  normalize_dbfs_spinbutton;
+       Gtk::Adjustment  normalize_dbfs_adjustment;
+       Gtk::SpinButton  normalize_lufs_spinbutton;
+       Gtk::Adjustment  normalize_lufs_adjustment;
+       Gtk::SpinButton  normalize_dbtp_spinbutton;
+       Gtk::Adjustment  normalize_dbtp_adjustment;
+       Gtk::Label       normalize_dbfs_label;
+       Gtk::Label       normalize_lufs_label;
+       Gtk::Label       normalize_dbtp_label;
+
        /* Silence  */
-       
+
        Gtk::Table       silence_table;
-       
+
        Gtk::CheckButton trim_start_checkbox;
        Gtk::CheckButton silence_start_checkbox;
        AudioClock       silence_start_clock;
-       
+
        Gtk::CheckButton trim_end_checkbox;
        Gtk::CheckButton silence_end_checkbox;
        AudioClock       silence_end_clock;
-       
+
+       /* Post-export hook */
+
+       Gtk::Label       command_label;
+       Gtk::Entry       command_entry;
+
        /* Format table */
-       
+
        struct CompatibilityCols : public Gtk::TreeModelColumnRecord
        {
          public:
-               Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::CompatPtr>  ptr;
-               Gtk::TreeModelColumn<bool>                                    selected;
-               Gtk::TreeModelColumn<Glib::ustring>                           label;
-       
+               Gtk::TreeModelColumn<ARDOUR::ExportFormatCompatibilityPtr>  ptr;
+               Gtk::TreeModelColumn<bool>                                  selected;
+               Gtk::TreeModelColumn<std::string>                           label;
+
                CompatibilityCols () { add(ptr); add(selected); add(label); }
        };
        CompatibilityCols            compatibility_cols;
        Glib::RefPtr<Gtk::ListStore> compatibility_list;
-       
+
        /* Hack to disallow row selection in compatibilities */
        void prohibit_compatibility_selection ();
        sigc::connection compatibility_select_connection;
-       
+
        struct QualityCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::QualityPtr>  ptr;
-               Gtk::TreeModelColumn<Glib::ustring>                            color;
-               Gtk::TreeModelColumn<Glib::ustring>                            label;
-       
+               Gtk::TreeModelColumn<std::string>                            color;
+               Gtk::TreeModelColumn<std::string>                            label;
+
                QualityCols () { add(ptr); add(color); add(label); }
        };
        QualityCols                  quality_cols;
        Glib::RefPtr<Gtk::ListStore> quality_list;
-       
+
        struct FormatCols : public Gtk::TreeModelColumnRecord
        {
          public:
-               Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::FormatPtr>  ptr;
-               Gtk::TreeModelColumn<Glib::ustring>                           color;
-               Gtk::TreeModelColumn<Glib::ustring>                           label;
-       
+               Gtk::TreeModelColumn<ARDOUR::ExportFormatPtr>  ptr;
+               Gtk::TreeModelColumn<std::string>              color;
+               Gtk::TreeModelColumn<std::string>              label;
+
                FormatCols () { add(ptr); add(color); add(label); }
-       };      
+       };
        FormatCols                   format_cols;
        Glib::RefPtr<Gtk::ListStore> format_list;
-       
+
        struct SampleRateCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::SampleRatePtr>  ptr;
-               Gtk::TreeModelColumn<Glib::ustring>                               color;
-               Gtk::TreeModelColumn<Glib::ustring>                               label;
-       
+               Gtk::TreeModelColumn<std::string>                               color;
+               Gtk::TreeModelColumn<std::string>                               label;
+
                SampleRateCols () { add(ptr); add(color); add(label); }
        };
        SampleRateCols               sample_rate_cols;
        Glib::RefPtr<Gtk::ListStore> sample_rate_list;
-       
+
        Gtk::Table       format_table;
-       
+
        Gtk::Label       compatibility_label;
        Gtk::Label       quality_label;
        Gtk::Label       format_label;
        Gtk::Label       sample_rate_label;
-       
+
        Gtk::TreeView    compatibility_view;
        Gtk::TreeView    quality_view;
        Gtk::TreeView    format_view;
        Gtk::TreeView    sample_rate_view;
-       
+
        /* SRC quality combo */
-       
+
        struct SRCQualityCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatBase::SRCQuality>  id;
-               Gtk::TreeModelColumn<Glib::ustring>                         label;
-       
+               Gtk::TreeModelColumn<std::string>                         label;
+
                SRCQualityCols () { add(id); add(label); }
        };
        SRCQualityCols               src_quality_cols;
        Glib::RefPtr<Gtk::ListStore> src_quality_list;
-       
+
        Gtk::Label      src_quality_label;
        Gtk::ComboBox   src_quality_combo;
 
        /* Common encoding option components */
-       
+
        Gtk::VBox   encoding_options_vbox;
        Gtk::Label  encoding_options_label;
-       
+
        Gtk::Table  encoding_options_table;
 
        /* Other common components */
-       
+
        Gtk::Button * revert_button;
        Gtk::Button * close_button;
-       
+
        /*** Changing encoding option stuff ***/
-       
+
        /* Linear */
-       
+
        struct SampleFormatCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<ARDOUR::HasSampleFormat::SampleFormatPtr>   ptr;
-               Gtk::TreeModelColumn<Glib::ustring>                              color;
-               Gtk::TreeModelColumn<Glib::ustring>                              label;
-       
+               Gtk::TreeModelColumn<std::string>                              color;
+               Gtk::TreeModelColumn<std::string>                              label;
+
                SampleFormatCols () { add(ptr); add(color); add(label); }
        };
        SampleFormatCols             sample_format_cols;
        Glib::RefPtr<Gtk::ListStore> sample_format_list;
-       
+
        struct DitherTypeCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<ARDOUR::HasSampleFormat::DitherTypePtr>   ptr;
-               Gtk::TreeModelColumn<Glib::ustring>                            color;
-               Gtk::TreeModelColumn<Glib::ustring>                            label;
-       
+               Gtk::TreeModelColumn<std::string>                            color;
+               Gtk::TreeModelColumn<std::string>                            label;
+
                DitherTypeCols () { add(ptr); add (color); add(label); }
        };
        DitherTypeCols               dither_type_cols;
        Glib::RefPtr<Gtk::ListStore> dither_type_list;
-       
+
        Gtk::Label  sample_format_label;
        Gtk::Label  dither_label;
-       
+
+       Gtk::CheckButton with_cue;
+       Gtk::CheckButton with_toc;
+       Gtk::CheckButton with_mp4chaps;
+
+       Gtk::VBox cue_toc_vbox;
+
+       void update_with_toc ();
+       void update_with_cue ();
+       void update_with_mp4chaps();
+       void update_command ();
+
        Gtk::TreeView sample_format_view;
        Gtk::TreeView dither_type_view;
-       
+
        /* Tagging */
-       
+
        Gtk::CheckButton  tag_checkbox;
-       
+
 };
 
 #endif /* __export_format_dialog_h__ */