X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_dialog.cc;h=f2feaee44dd1f70bc640ae3c1fff9510360e3478;hb=cf32bf81b81b79250ade5cdae9f79dda6c0eee41;hp=7ae81a016aecc64a15bff599dd7ef3ed0128da2e;hpb=ef9beb3f60b5499d4db48b771627b6facfe872d3;p=ardour.git diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index 7ae81a016a..f2feaee44d 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -18,14 +18,16 @@ */ -#include "export_dialog.h" #include -#include +#include "pbd/filesystem.h" + +#include "ardour/export_status.h" +#include "ardour/export_handler.h" -#include -#include +#include "export_dialog.h" +#include "gui_thread.h" using namespace ARDOUR; using namespace PBD; @@ -45,41 +47,50 @@ ExportDialog::~ExportDialog () void ExportDialog::set_session (ARDOUR::Session* s) { - init (); + SessionHandlePtr::set_session (s); + + if (!_session) { + return; + } - session = s; - /* Init handler and profile manager */ - - handler = session->get_export_handler (); - status = session->get_export_status (); - profile_manager.reset (new ExportProfileManager (*session)); - + + handler = _session->get_export_handler (); + status = _session->get_export_status (); + profile_manager.reset (new ExportProfileManager (*_session)); + + /* Possibly init stuff in derived classes */ + + init (); + + /* Rest of _session related initialization */ + preset_selector->set_manager (profile_manager); - file_notebook->set_session_and_manager (session, profile_manager); - + file_notebook->set_session_and_manager (_session, profile_manager); + /* Hand on selection range to profile manager */ - + TimeSelection const & time (editor.get_selection().time); if (!time.empty()) { profile_manager->set_selection_range (time.front().start, time.front().end); } else { profile_manager->set_selection_range (); } - + /* Load states */ - + profile_manager->load_profile (); sync_with_manager (); - + /* Warnings */ - + preset_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::sync_with_manager)); timespan_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); channel_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); file_notebook->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings)); - status->Aborting.connect (sigc::mem_fun (*this, &ExportDialog::notify_errors)); - + + status->Aborting.connect (abort_connection, boost::bind (&ExportDialog::notify_errors, this), gui_context()); + update_warnings (); } @@ -90,36 +101,38 @@ ExportDialog::init () init_gui (); /* warnings */ - + warning_widget.pack_start (warn_hbox, true, true, 6); warning_widget.pack_end (list_files_hbox, false, false, 0); - + warn_hbox.pack_start (warn_label, true, true, 16); warn_label.set_use_markup (true); - + list_files_hbox.pack_end (list_files_button, false, false, 6); list_files_hbox.pack_end (list_files_label, false, false, 6); list_files_label.set_use_markup (true); - + list_files_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::show_conflicting_files)); - + /* Progress indicators */ - + progress_widget.pack_start (progress_label, false, false, 6); progress_widget.pack_start (progress_bar, false, false, 6); - + /* Buttons */ - + cancel_button = add_button (Gtk::Stock::CANCEL, RESPONSE_CANCEL); - rt_export_button = add_button (_("Realtime export"), RESPONSE_RT); + rt_export_button = add_button (_("Realtime Export"), RESPONSE_RT); fast_export_button = add_button (_("Fast Export"), RESPONSE_FAST); - + + list_files_button.set_name ("PaddedButton"); + cancel_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::close_dialog)); rt_export_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::export_rt)); fast_export_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::export_fw)); - + /* Done! */ - + show_all_children (); progress_widget.hide_all(); } @@ -131,29 +144,38 @@ ExportDialog::init_gui () preset_align->add (*preset_selector); preset_align->set_padding (0, 12, 0, 0); get_vbox()->pack_start (*preset_align, false, false, 0); - + + Gtk::VBox* advanced_vbox = Gtk::manage (new Gtk::VBox()); + advanced_vbox->set_spacing (12); + advanced_vbox->set_border_width (12); + Gtk::Alignment * timespan_align = Gtk::manage (new Gtk::Alignment()); - Gtk::Label * timespan_label = Gtk::manage (new Gtk::Label (_("Time Span"), Gtk::ALIGN_LEFT)); + timespan_label = Gtk::manage (new Gtk::Label (_("Time Span"), Gtk::ALIGN_LEFT)); timespan_align->add (*timespan_selector); timespan_align->set_padding (0, 12, 18, 0); - get_vbox()->pack_start (*timespan_label, false, false, 0); - get_vbox()->pack_start (*timespan_align, false, false, 0); - + advanced_vbox->pack_start (*timespan_label, false, false, 0); + advanced_vbox->pack_start (*timespan_align, false, false, 0); + Gtk::Alignment * channels_align = Gtk::manage (new Gtk::Alignment()); - Gtk::Label * channels_label = Gtk::manage (new Gtk::Label (_("Channels"), Gtk::ALIGN_LEFT)); + channels_label = Gtk::manage (new Gtk::Label (_("Channels"), Gtk::ALIGN_LEFT)); channels_align->add (*channel_selector); channels_align->set_padding (0, 12, 18, 0); - get_vbox()->pack_start (*channels_label, false, false, 0); - get_vbox()->pack_start (*channels_align, false, false, 0); - + advanced_vbox->pack_start (*channels_label, false, false, 0); + advanced_vbox->pack_start (*channels_align, false, false, 0); + get_vbox()->pack_start (*file_notebook, false, false, 0); - get_vbox()->pack_start (warning_widget, true, true, 0); - get_vbox()->pack_start (progress_widget, true, true, 0); - + get_vbox()->pack_start (warning_widget, false, false, 0); + get_vbox()->pack_start (progress_widget, false, false, 0); + + Gtk::Expander* advanced = Gtk::manage (new Gtk::Expander (_("Advanced options"))); + advanced->add (*advanced_vbox); + + get_vbox()->pack_start (*advanced, false, false); + Pango::AttrList bold; Pango::Attribute b = Pango::Attribute::create_attr_weight (Pango::WEIGHT_BOLD); bold.insert (b); - + timespan_label->set_attributes (bold); channels_label->set_attributes (bold); } @@ -162,8 +184,8 @@ void ExportDialog::init_components () { preset_selector.reset (new ExportPresetSelector ()); - timespan_selector.reset (new ExportTimespanSelectorMultiple ()); - channel_selector.reset (new ExportChannelSelector ()); + timespan_selector.reset (new ExportTimespanSelectorMultiple (_session, profile_manager)); + channel_selector.reset (new PortExportChannelSelector (_session, profile_manager)); file_notebook.reset (new ExportFileNotebook ()); } @@ -183,17 +205,17 @@ ExportDialog::close_dialog () if (status->running) { status->abort(); } - + hide_all (); set_modal (false); - + } void ExportDialog::sync_with_manager () { - timespan_selector->set_state (profile_manager->get_timespans().front(), session); - channel_selector->set_state (profile_manager->get_channel_configs().front(), session); + timespan_selector->sync_with_manager(); + channel_selector->sync_with_manager(); file_notebook->sync_with_manager (); update_warnings (); @@ -209,7 +231,7 @@ ExportDialog::update_warnings () list_files_hbox.hide (); list_files_string = ""; - + fast_export_button->set_sensitive (true); rt_export_button->set_sensitive (true); @@ -228,7 +250,7 @@ ExportDialog::update_warnings () if (!warnings->conflicting_filenames.empty()) { list_files_hbox.show (); for (std::list::iterator it = warnings->conflicting_filenames.begin(); it != warnings->conflicting_filenames.end(); ++it) { - ustring::size_type pos = it->find_last_of ("/"); + Glib::ustring::size_type pos = it->find_last_of ("/"); list_files_string += "\n" + it->substr (0, pos + 1) + "" + it->substr (pos + 1) + ""; } } @@ -238,15 +260,15 @@ void ExportDialog::show_conflicting_files () { ArdourDialog dialog (_("Files that will be overwritten"), true); - + Gtk::Label label ("", Gtk::ALIGN_LEFT); label.set_use_markup (true); label.set_markup (list_files_string); - + dialog.get_vbox()->pack_start (label); dialog.add_button (Gtk::Stock::OK, 0); dialog.show_all_children (); - + dialog.run(); } @@ -279,8 +301,8 @@ ExportDialog::show_progress () warning_widget.hide_all(); progress_widget.show (); progress_widget.show_all_children (); - progress_connection = Glib::signal_timeout().connect (mem_fun(*this, &ExportDialog::progress_timeout), 100); - + progress_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ExportDialog::progress_timeout), 100); + gtk_main_iteration (); while (status->running) { if (gtk_events_pending()) { @@ -289,6 +311,10 @@ ExportDialog::show_progress () usleep (10000); } } + + if (!status->aborted()) { + status->finish (); + } } gint @@ -324,13 +350,13 @@ ExportDialog::add_error (Glib::ustring const & text) { fast_export_button->set_sensitive (false); rt_export_button->set_sensitive (false); - + if (warn_string.empty()) { warn_string = _("Error: ") + text + ""; } else { warn_string = _("Error: ") + text + "\n" + warn_string; } - + warn_label.set_markup (warn_string); } @@ -342,7 +368,7 @@ ExportDialog::add_warning (Glib::ustring const & text) } else { warn_string = warn_string + _("\nWarning: ") + text + ""; } - + warn_label.set_markup (warn_string); } @@ -357,8 +383,8 @@ void ExportRangeDialog::init_components () { preset_selector.reset (new ExportPresetSelector ()); - timespan_selector.reset (new ExportTimespanSelectorSingle (range_id)); - channel_selector.reset (new ExportChannelSelector ()); + timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, range_id)); + channel_selector.reset (new PortExportChannelSelector (_session, profile_manager)); file_notebook.reset (new ExportFileNotebook ()); } @@ -370,7 +396,32 @@ void ExportSelectionDialog::init_components () { preset_selector.reset (new ExportPresetSelector ()); - timespan_selector.reset (new ExportTimespanSelectorSingle (X_("selection"))); - channel_selector.reset (new ExportChannelSelector ()); + timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, X_("selection"))); + channel_selector.reset (new PortExportChannelSelector (_session, profile_manager)); + file_notebook.reset (new ExportFileNotebook ()); +} + +ExportRegionDialog::ExportRegionDialog (PublicEditor & editor, ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track) : + ExportDialog (editor, _("Export Region")), + region (region), + track (track) +{} + +void +ExportRegionDialog::init_gui () +{ + ExportDialog::init_gui (); + + channels_label->set_text (_("Source")); +} + +void +ExportRegionDialog::init_components () +{ + Glib::ustring loc_id = profile_manager->set_single_range (region.position(), region.position() + region.length(), region.name()); + + preset_selector.reset (new ExportPresetSelector ()); + timespan_selector.reset (new ExportTimespanSelectorSingle (_session, profile_manager, loc_id)); + channel_selector.reset (new RegionExportChannelSelector (_session, profile_manager, region, track)); file_notebook.reset (new ExportFileNotebook ()); }