Prefer testing the session instead of using a global variable
[ardour.git] / gtk2_ardour / export_format_dialog.h
index 8d37ded2cdd5201c690cf73c82c8e277de398036..6b5fe18fa3c9391cd8499d768d791c2a51fc144e 100644 (file)
 #include "ardour_dialog.h"
 #include "audio_clock.h"
 
-#include <gtkmm.h>
-
-class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList {
-  private:
+#ifdef interface
+#undef interface
+#endif
+
+#include <gtkmm/adjustment.h>
+#include <gtkmm/box.h>
+#include <gtkmm/checkbutton.h>
+#include <gtkmm/combobox.h>
+#include <gtkmm/entry.h>
+#include <gtkmm/label.h>
+#include <gtkmm/liststore.h>
+#include <gtkmm/radiobutton.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/table.h>
+#include <gtkmm/treeview.h>
+
+class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
+{
+private:
 
        typedef ARDOUR::WeakExportFormatCompatibilityPtr WeakCompatPtr;
        typedef ARDOUR::WeakExportFormatPtr WeakFormatPtr;
@@ -47,14 +62,14 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
        typedef boost::shared_ptr<ARDOUR::ExportFormatSpecification> FormatPtr;
 
 
-  public:
+public:
 
        explicit ExportFormatDialog (FormatPtr format, bool new_dialog = false);
        ~ExportFormatDialog ();
 
        void set_session (ARDOUR::Session* s);
 
-  private:
+private:
 
        FormatPtr                   format;
        ARDOUR::ExportFormatManager manager;
@@ -122,6 +137,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
        void update_trim_end_selection ();
 
        void update_normalize_selection ();
+       void update_normalize_sensitivity ();
        void update_silence_start_selection ();
        void update_silence_end_selection ();
 
@@ -129,7 +145,9 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
        void update_time (ARDOUR::AnyTime & time, AudioClock const & clock);
 
        void update_src_quality_selection ();
+       void update_codec_quality_selection ();
        void update_tagging_selection ();
+       void set_codec_quality_selection ();
 
        /*** Encoding options */
 
@@ -142,8 +160,10 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
        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 show_ffmpeg_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatFFMPEG> ptr);
 
        void fill_sample_format_lists (boost::shared_ptr<ARDOUR::HasSampleFormat> ptr);
+       void fill_codec_quality_lists (boost::shared_ptr<ARDOUR::HasCodecQuality> ptr);
 
        /*** GUI components ***/
 
@@ -159,9 +179,17 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        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  */
 
@@ -175,11 +203,16 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
        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:
+       public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatCompatibilityPtr>  ptr;
                Gtk::TreeModelColumn<bool>                                  selected;
                Gtk::TreeModelColumn<std::string>                           label;
@@ -195,7 +228,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct QualityCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::QualityPtr>  ptr;
                Gtk::TreeModelColumn<std::string>                            color;
                Gtk::TreeModelColumn<std::string>                            label;
@@ -207,7 +240,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct FormatCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatPtr>  ptr;
                Gtk::TreeModelColumn<std::string>              color;
                Gtk::TreeModelColumn<std::string>              label;
@@ -219,7 +252,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct SampleRateCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatManager::SampleRatePtr>  ptr;
                Gtk::TreeModelColumn<std::string>                               color;
                Gtk::TreeModelColumn<std::string>                               label;
@@ -245,7 +278,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct SRCQualityCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::ExportFormatBase::SRCQuality>  id;
                Gtk::TreeModelColumn<std::string>                         label;
 
@@ -275,7 +308,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct SampleFormatCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::HasSampleFormat::SampleFormatPtr>   ptr;
                Gtk::TreeModelColumn<std::string>                              color;
                Gtk::TreeModelColumn<std::string>                              label;
@@ -287,7 +320,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        struct DitherTypeCols : public Gtk::TreeModelColumnRecord
        {
-         public:
+       public:
                Gtk::TreeModelColumn<ARDOUR::HasSampleFormat::DitherTypePtr>   ptr;
                Gtk::TreeModelColumn<std::string>                            color;
                Gtk::TreeModelColumn<std::string>                            label;
@@ -302,15 +335,34 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
 
        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;
 
+
+       /* codec quality combo */
+
+       struct CodecQualityCols : public Gtk::TreeModelColumnRecord
+       {
+       public:
+               Gtk::TreeModelColumn<int>          quality;
+               Gtk::TreeModelColumn<std::string>  label;
+
+               CodecQualityCols () { add(quality); add(label); }
+       };
+       CodecQualityCols             codec_quality_cols;
+       Glib::RefPtr<Gtk::ListStore> codec_quality_list;
+
+       Gtk::ComboBox   codec_quality_combo;
+
        /* Tagging */
 
        Gtk::CheckButton  tag_checkbox;