Allow strips to add or remove personal sends
[ardour.git] / gtk2_ardour / export_dialog.h
index c0c5a24b20c7b07c33283a1b8251526aafcd1d7a..09385a4b846525dea47e85b444a68b9734191671 100644 (file)
 #ifndef __export_dialog_h__
 #define __export_dialog_h__
 
-#include <boost/shared_ptr.hpp>
+#include <string>
+#include <boost/scoped_ptr.hpp>
 
-#include <ardour/export_handler.h>
-#include <ardour/export_profile_manager.h>
+#include <gtkmm/box.h>
+#include <gtkmm/button.h>
+#include <gtkmm/label.h>
+#include <gtkmm/notebook.h>
+#include <gtkmm/progressbar.h>
+
+#include "ardour/export_profile_manager.h"
 
 #include "public_editor.h"
 #include "export_timespan_selector.h"
 #include "export_file_notebook.h"
 #include "export_preset_selector.h"
 #include "ardour_dialog.h"
-
-#include <gtkmm.h>
-
-#include "i18n.h"
+#include "soundcloud_export_selector.h"
 
 namespace ARDOUR {
        class ExportStatus;
+       class ExportHandler;
 }
 
 class ExportTimespanSelector;
 class ExportChannelSelector;
 
-class ExportDialog : public ArdourDialog {
-
-  public:
+class ExportDialog : public ArdourDialog, public PBD::ScopedConnectionList
+{
+public:
 
-       explicit ExportDialog (PublicEditor & editor, Glib::ustring title = _("Export"));
+       ExportDialog (PublicEditor & editor, std::string title, ARDOUR::ExportProfileManager::ExportType type);
        ~ExportDialog ();
-       
+
        void set_session (ARDOUR::Session* s);
-       
+
        /* Responses */
 
        enum Responses {
@@ -61,7 +65,18 @@ class ExportDialog : public ArdourDialog {
                RESPONSE_CANCEL
        };
 
-  protected:
+protected:
+
+       void on_response (int response_id) {
+               Gtk::Dialog::on_response (response_id);
+       }
+
+       typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
+       typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ManagerPtr;
+
+       ARDOUR::ExportProfileManager::ExportType type;
+       HandlerPtr      handler;
+       ManagerPtr      profile_manager;
 
        // initializes GUI layout
        virtual void init_gui ();
@@ -69,79 +84,84 @@ class ExportDialog : public ArdourDialog {
        // Must initialize all the shared_ptrs below
        virtual void init_components ();
 
-       boost::shared_ptr<ExportPresetSelector>   preset_selector;
-       boost::shared_ptr<ExportTimespanSelector> timespan_selector;
-       boost::shared_ptr<ExportChannelSelector>  channel_selector;
-       boost::shared_ptr<ExportFileNotebook>     file_notebook;
-       
+       boost::scoped_ptr<ExportPresetSelector>   preset_selector;
+       boost::scoped_ptr<ExportTimespanSelector> timespan_selector;
+       boost::scoped_ptr<ExportChannelSelector>  channel_selector;
+       boost::scoped_ptr<ExportFileNotebook>     file_notebook;
+
+       boost::shared_ptr<SoundcloudExportSelector> soundcloud_selector;
+
        Gtk::VBox                                 warning_widget;
        Gtk::VBox                                 progress_widget;
 
-  private:
+       /*** GUI components ***/
+       Gtk::Notebook export_notebook;
+
+private:
 
        void init ();
 
-       void notify_errors ();
+       void notify_errors (bool force = false);
        void close_dialog ();
-       
+
        void sync_with_manager ();
-       void update_warnings ();
+       void update_warnings_and_example_filename ();
        void show_conflicting_files ();
 
-       void export_rt ();
-       void export_fw ();
-       
+       void do_export ();
+
+       void update_realtime_selection ();
+       void parameter_changed (std::string const&);
+
        void show_progress ();
        gint progress_timeout ();
-       
-       typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
-       typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ManagerPtr;
+
        typedef boost::shared_ptr<ARDOUR::ExportStatus> StatusPtr;
-       
+
        PublicEditor &  editor;
-       HandlerPtr      handler;
-       ManagerPtr      profile_manager;
        StatusPtr       status;
-       
-       /*** GUI components ***/
-       
+
+
+
        /* Warning area */
-       
+
        Gtk::HBox           warn_hbox;
        Gtk::Label          warn_label;
-       Glib::ustring       warn_string;
-       
+       std::string         warn_string;
+
        Gtk::HBox           list_files_hbox;
        Gtk::Label          list_files_label;
        Gtk::Button         list_files_button;
-       Glib::ustring       list_files_string;
-       
-       void add_error (Glib::ustring const & text);
-       void add_warning (Glib::ustring const & text);
-       
+       std::string         list_files_string;
+
+       void add_error (std::string const & text);
+       void add_warning (std::string const & text);
+
        /* Progress bar */
-       
-       Gtk::Label              progress_label;
+
        Gtk::ProgressBar        progress_bar;
        sigc::connection        progress_connection;
-       
+
+       float previous_progress; // Needed for gtk bug workaround
+
+       void soundcloud_upload_progress(double total, double now, std::string title);
+
        /* Buttons */
-       
+
        Gtk::Button *           cancel_button;
-       Gtk::Button *           rt_export_button;
-       Gtk::Button *           fast_export_button;
+       Gtk::Button *           export_button;
 
 };
 
 class ExportRangeDialog : public ExportDialog
 {
   public:
-       ExportRangeDialog (PublicEditor & editor, Glib::ustring range_id);
+       ExportRangeDialog (PublicEditor & editor, std::string range_id);
 
   private:
        void init_components ();
-       
-       Glib::ustring range_id;
+
+       std::string range_id;
 };
 
 class ExportSelectionDialog : public ExportDialog
@@ -153,4 +173,26 @@ class ExportSelectionDialog : public ExportDialog
        void init_components ();
 };
 
+class ExportRegionDialog : public ExportDialog
+{
+  public:
+       ExportRegionDialog (PublicEditor & editor, ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track);
+
+  private:
+       void init_gui ();
+       void init_components ();
+
+       ARDOUR::AudioRegion const & region;
+       ARDOUR::AudioTrack & track;
+};
+
+class StemExportDialog : public ExportDialog
+{
+  public:
+       StemExportDialog (PublicEditor & editor);
+
+  private:
+       void init_components ();
+};
+
 #endif /* __ardour_export_dialog_h__ */