diff options
Diffstat (limited to 'gtk2_ardour/export_main_dialog.h')
-rw-r--r-- | gtk2_ardour/export_main_dialog.h | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/gtk2_ardour/export_main_dialog.h b/gtk2_ardour/export_main_dialog.h new file mode 100644 index 0000000000..af795554e1 --- /dev/null +++ b/gtk2_ardour/export_main_dialog.h @@ -0,0 +1,234 @@ +/* + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __export_main_dialog_h__ +#define __export_main_dialog_h__ + +#include <ardour/export_handler.h> +#include <ardour/export_profile_manager.h> + +#include "public_editor.h" +#include "export_timespan_selector.h" +#include "export_channel_selector.h" +#include "export_format_selector.h" +#include "export_filename_selector.h" +#include "ardour_dialog.h" + +#include <gtkmm.h> + +namespace ARDOUR { + class ExportFilename; + class ExportFormatSpecification; + class ExportChannelConfiguration; +} + +class ExportTimespanSelector; +class ExportChannelSelector; +class ExportFormatSelector; +class ExportFilenameSelector; + +class ExportMainDialog : public ArdourDialog { + + public: + + explicit ExportMainDialog (PublicEditor & editor); + ~ExportMainDialog (); + + void set_session (ARDOUR::Session* s); + + void select_timespan (Glib::ustring id); + + /* Responses */ + + enum Responses { + RESPONSE_RT, + RESPONSE_FAST, + RESPONSE_CANCEL + }; + + private: + + void close_dialog (); + + void sync_with_manager (); + void update_warnings (); + void show_conflicting_files (); + + typedef boost::shared_ptr<ARDOUR::ExportTimespan> TimespanPtr; + typedef boost::shared_ptr<std::list<TimespanPtr> > TimespanList; + + typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr; + typedef std::list<ChannelConfigPtr> ChannelConfigList; + + typedef boost::shared_ptr<ARDOUR::ExportFilename> FilenamePtr; + + typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr; + typedef boost::shared_ptr<ARDOUR::ExportFormatSpecification> FormatPtr; + typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ManagerPtr; + + void export_rt (); + void export_fw (); + + void show_progress (); + Glib::ustring get_nth_format_name (uint32_t n); + gint progress_timeout (); + + /* Other stuff */ + + PublicEditor & editor; + HandlerPtr handler; + ManagerPtr profile_manager; + + /*** GUI components ***/ + + Gtk::Table main_table; + + /* Presets */ + + typedef ARDOUR::ExportProfileManager::PresetPtr PresetPtr; + typedef ARDOUR::ExportProfileManager::PresetList PresetList; + + sigc::connection preset_select_connection; + + void select_preset (); + void save_current_preset (); + void remove_current_preset (); + + struct PresetCols : public Gtk::TreeModelColumnRecord + { + public: + Gtk::TreeModelColumn<PresetPtr> preset; + Gtk::TreeModelColumn<Glib::ustring> label; + + PresetCols () { add (preset); add (label); } + }; + PresetCols preset_cols; + Glib::RefPtr<Gtk::ListStore> preset_list; + PresetPtr current_preset; + PresetPtr previous_preset; + + Gtk::Alignment preset_align; + Gtk::HBox preset_hbox; + Gtk::Label preset_label; + Gtk::ComboBoxEntry preset_entry; + + Gtk::Button preset_save_button; + Gtk::Button preset_remove_button; + Gtk::Button preset_new_button; + + /* File Notebook */ + + class FilePage : public Gtk::VBox { + public: + FilePage (ARDOUR::Session * s, ManagerPtr profile_manager, ExportMainDialog * parent, uint32_t number, + ARDOUR::ExportProfileManager::FormatStatePtr format_state, + ARDOUR::ExportProfileManager::FilenameStatePtr filename_state); + + virtual ~FilePage (); + + Gtk::Widget & get_tab_widget () { return tab_widget; } + void set_remove_sensitive (bool value); + Glib::ustring get_format_name () const; + + ARDOUR::ExportProfileManager::FormatStatePtr get_format_state () const { return format_state; } + ARDOUR::ExportProfileManager::FilenameStatePtr get_filename_state () const { return filename_state; } + + sigc::signal<void> CriticalSelectionChanged; + + private: + void save_format_to_manager (FormatPtr format); + void update_tab_label (); + + ARDOUR::ExportProfileManager::FormatStatePtr format_state; + ARDOUR::ExportProfileManager::FilenameStatePtr filename_state; + ManagerPtr profile_manager; + + /* GUI components */ + + Gtk::Label format_label; + Gtk::Alignment format_align; + ExportFormatSelector format_selector; + + Gtk::Label filename_label; + Gtk::Alignment filename_align; + ExportFilenameSelector filename_selector; + + Gtk::HBox tab_widget; + Gtk::Label tab_label; + Gtk::Alignment tab_close_alignment; + Gtk::Button tab_close_button; + uint32_t tab_number; + }; + + void add_new_file_page (); + void add_file_page (ARDOUR::ExportProfileManager::FormatStatePtr format_state, ARDOUR::ExportProfileManager::FilenameStatePtr filename_state); + void remove_file_page (FilePage * page); + void update_remove_file_page_sensitivity (); + void handle_page_change (GtkNotebookPage*, uint32_t page); + + uint32_t last_visible_page; + uint32_t page_counter; + + /* Warning area */ + + Gtk::VBox warn_container; + + Gtk::HBox warn_hbox; + Gtk::Label warn_label; + Glib::ustring 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); + + /* Progress bar */ + + Gtk::VBox progress_container; + Gtk::Label progress_label; + Gtk::ProgressBar progress_bar; + sigc::connection progress_connection; + + /* Everything else */ + + Gtk::Label timespan_label; + Gtk::Alignment timespan_align; + ExportTimespanSelector timespan_selector; + + Gtk::Label channels_label; + Gtk::Alignment channels_align; + ExportChannelSelector channel_selector; + + Gtk::Notebook file_notebook; + + Gtk::HBox new_file_hbox; + Gtk::Button new_file_button; + Gtk::VBox new_file_dummy; + + Gtk::Button * cancel_button; + Gtk::Button * rt_export_button; + Gtk::Button * fast_export_button; + +}; + +#endif /* __ardour_export_main_dialog_h__ */ |