X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_dialog.h;h=5e895e54c85a4e9b18320e1670e019db143ec05f;hb=5afc5272b62df0a21bb7561ffa5ab9ad24ae64d5;hp=d518f5ec8a8a7e007da5f59cddee77fc307a24de;hpb=cc862d31bd8c9005964dca94a9942f1b42847252;p=ardour.git diff --git a/gtk2_ardour/export_dialog.h b/gtk2_ardour/export_dialog.h index d518f5ec8a..5e895e54c8 100644 --- a/gtk2_ardour/export_dialog.h +++ b/gtk2_ardour/export_dialog.h @@ -1,5 +1,6 @@ /* - Copyright (C) 1999-2002 Paul Davis + Copyright (C) 2008 Paul Davis + Author: Sakari Bergen 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 @@ -17,163 +18,171 @@ */ -#ifndef __ardour_export_dialog_h__ -#define __ardour_export_dialog_h__ +#ifndef __export_dialog_h__ +#define __export_dialog_h__ -#include +#include +#include -#include -#include +#include "ardour/export_profile_manager.h" +#include "public_editor.h" +#include "export_timespan_selector.h" +#include "export_channel_selector.h" +#include "export_file_notebook.h" +#include "export_preset_selector.h" #include "ardour_dialog.h" +#include "soundcloud_export_selector.h" -class PublicEditor; +#include namespace ARDOUR { - class Session; - class AudioRegion; - class Port; + class ExportStatus; + class ExportHandler; } -class ExportDialog : public ArdourDialog +class ExportTimespanSelector; +class ExportChannelSelector; + +class ExportDialog : public ArdourDialog, public PBD::ScopedConnectionList { + public: - ExportDialog (PublicEditor&); + + ExportDialog (PublicEditor & editor, std::string title, ARDOUR::ExportProfileManager::ExportType type); ~ExportDialog (); - void connect_to_session (ARDOUR::Session*); - virtual void set_range (nframes_t start, nframes_t end); - void start_export (); + void set_session (ARDOUR::Session* s); - virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; } + /* Responses */ - protected: - ARDOUR::AudioExportSpecification spec; - Gtk::Frame file_frame; - - struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord - { - public: - Gtk::TreeModelColumn output; - Gtk::TreeModelColumn left; - Gtk::TreeModelColumn right; - Gtk::TreeModelColumn port; - - ExportModelColumns() { add(output); add(left); add(right); add(port);} + enum Responses { + RESPONSE_RT, + RESPONSE_FAST, + RESPONSE_CANCEL }; - ExportModelColumns exp_cols; - - // These methods are intended to be used in constructors of subclasses - void do_not_allow_track_and_master_selection(); - void do_not_allow_channel_count_selection(); - void do_not_allow_export_cd_markers(); - - // Checks the given filename for validity when export gets started. - // Export will interrupt when this method returns 'false'. - // Method is responsible for informing user. - virtual bool is_filepath_valid(string &filepath); - - // Gets called from within do_export. Is responsible for exporting the - // audio data. spec has already been filled with user input before calling - // this method. The dialog will be closed after this function exited. - virtual void export_audio_data() = 0; - - virtual bool wants_dir() { return false; } - - // reads the user input and fills spec with the according values - // filepath: complete path to the target file, including filename - void initSpec(string &filepath); - - void set_progress_fraction(double progress) { - progress_bar.set_fraction (progress); } - - ARDOUR::Session& getSession() { return *session; }; - string get_selected_header_format() { - return header_format_combo.get_active_text(); }; - string get_selected_file_name() { return file_entry.get_text(); }; - + protected: + + typedef boost::shared_ptr HandlerPtr; + typedef boost::shared_ptr ManagerPtr; + + ARDOUR::ExportProfileManager::ExportType type; + HandlerPtr handler; + ManagerPtr profile_manager; + + // initializes GUI layout + virtual void init_gui (); + + // Must initialize all the shared_ptrs below + virtual void init_components (); + + boost::scoped_ptr preset_selector; + boost::scoped_ptr timespan_selector; + boost::scoped_ptr channel_selector; + boost::scoped_ptr file_notebook; + + boost::shared_ptr soundcloud_selector; + + Gtk::VBox warning_widget; + Gtk::VBox progress_widget; + + /*** GUI components ***/ + Gtk::Notebook export_notebook; + private: - PublicEditor& editor; - ARDOUR::Session* session; - bool track_and_master_selection_allowed; - bool channel_count_selection_allowed; - bool export_cd_markers_allowed; - - Gtk::VBox track_vpacker; - Gtk::HBox hpacker; - - Gtk::Table format_table; - Gtk::Frame format_frame; - - Gtk::Label cue_file_label; - Gtk::ComboBoxText cue_file_combo; - - Gtk::Label channel_count_label; - Gtk::ComboBoxText channel_count_combo; - - Gtk::Label header_format_label; - Gtk::ComboBoxText header_format_combo; - - Gtk::Label bitdepth_format_label; - Gtk::ComboBoxText bitdepth_format_combo; - - Gtk::Label endian_format_label; - Gtk::ComboBoxText endian_format_combo; - - Gtk::Label sample_rate_label; - Gtk::ComboBoxText sample_rate_combo; - - Gtk::Label src_quality_label; - Gtk::ComboBoxText src_quality_combo; - - Gtk::Label dither_type_label; - Gtk::ComboBoxText dither_type_combo; - - Gtk::CheckButton cuefile_only_checkbox; - - Gtk::Entry file_entry; - Gtk::HBox file_hbox; - Gtk::FileChooserWidget file_chooser; - - Gtk::Button* ok_button; - Gtk::Button* cancel_button; - Gtk::Label cancel_label; - Gtk::ProgressBar progress_bar; - Gtk::ScrolledWindow track_scroll; - Gtk::ScrolledWindow master_scroll; - Gtk::Button track_selector_button; - Gtk::TreeView track_selector; - Glib::RefPtr track_list; - Gtk::TreeView master_selector; - Glib::RefPtr master_list; - - static void *_thread (void *arg); - // sets the export progress in the progress bar - virtual gint progress_timeout (); - sigc::connection progress_connection; - void build_window (); - void end_dialog(); - void header_chosen (); - void channels_chosen (); - void bitdepth_chosen (); - void sample_rate_chosen (); - void cue_file_type_chosen(); - void file_chooser_selection_changed(); - - void fill_lists(); - void write_track_and_master_selection_to_spec(); - - void do_export_cd_markers (const string& path, const string& cuefile_type); - void export_cue_file (ARDOUR::Locations::LocationList& locations, const string& path); - void export_toc_file (ARDOUR::Locations::LocationList& locations, const string& path); + + void init (); + + void notify_errors (bool force = false); + void close_dialog (); + + void sync_with_manager (); + void update_warnings_and_example_filename (); + void show_conflicting_files (); + void do_export (); - gint window_closed (GdkEventAny *ignored); - void track_selector_button_click (); + void show_progress (); + gint progress_timeout (); + + typedef boost::shared_ptr StatusPtr; + + PublicEditor & editor; + StatusPtr status; + + + + /* Warning area */ + + Gtk::HBox warn_hbox; + Gtk::Label warn_label; + std::string warn_string; + + Gtk::HBox list_files_hbox; + Gtk::Label list_files_label; + Gtk::Button list_files_button; + std::string list_files_string; + + void add_error (std::string const & text); + void add_warning (std::string const & text); + + /* Progress bar */ + + Gtk::ProgressBar progress_bar; + sigc::connection progress_connection; - void set_state(); - void save_state(); + 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 * export_button; + +}; + +class ExportRangeDialog : public ExportDialog +{ + public: + ExportRangeDialog (PublicEditor & editor, std::string range_id); + + private: + void init_components (); + + std::string range_id; +}; + +class ExportSelectionDialog : public ExportDialog +{ + public: + ExportSelectionDialog (PublicEditor & editor); + + private: + 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__ +#endif /* __ardour_export_dialog_h__ */