X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_dialog.cc;h=a64acd16801af3c2ec619e39ce1ea44bc75fba59;hb=4c42a77441e74356cd909d994e270d1e1314aad4;hp=50796f2fccd4bc092ebbcd00a806e7d8f8b7f88d;hpb=1de3eac2deeb5400e349114ff59d6fa0a6d6de1e;p=ardour.git diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index 50796f2fcc..a64acd1680 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -21,7 +21,7 @@ #include -#include "pbd/filesystem.h" +#include #include "ardour/audioregion.h" #include "ardour/export_status.h" @@ -29,6 +29,7 @@ #include "export_dialog.h" #include "gui_thread.h" +#include "nag.h" #include "i18n.h" @@ -36,9 +37,9 @@ using namespace ARDOUR; using namespace PBD; using std::string; -ExportDialog::ExportDialog (PublicEditor & editor, std::string title, std::string xml_node_name) +ExportDialog::ExportDialog (PublicEditor & editor, std::string title, ARDOUR::ExportProfileManager::ExportType type) : ArdourDialog (title) - , xml_node_name (xml_node_name) + , type (type) , editor (editor) , warn_label ("", Gtk::ALIGN_LEFT) @@ -62,7 +63,8 @@ ExportDialog::set_session (ARDOUR::Session* s) handler = _session->get_export_handler (); status = _session->get_export_status (); - profile_manager.reset (new ExportProfileManager (*_session, xml_node_name)); + + profile_manager.reset (new ExportProfileManager (*_session, type)); /* Possibly init stuff in derived classes */ @@ -90,13 +92,11 @@ ExportDialog::set_session (ARDOUR::Session* s) /* 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 (abort_connection, invalidator (*this), boost::bind (&ExportDialog::notify_errors, this), gui_context()); + timespan_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings_and_example_filename)); + channel_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings_and_example_filename)); + file_notebook->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings_and_example_filename)); - update_warnings (); + update_warnings_and_example_filename (); } void @@ -121,23 +121,18 @@ ExportDialog::init () /* 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); - // Realtime export is disabled for now, as it will most probably not work - //rt_export_button = add_button (_("Realtime Export"), RESPONSE_RT); - //fast_export_button = add_button (_("Fast Export"), RESPONSE_FAST); - fast_export_button = add_button (_("Export"), RESPONSE_FAST); + export_button = add_button (_("Export"), RESPONSE_FAST); set_default_response (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)); + export_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::do_export)); /* Done! */ @@ -145,6 +140,12 @@ ExportDialog::init () progress_widget.hide_all(); } +void +ExportDialog::expanded_changed () +{ + set_resizable(advanced->get_expanded()); +} + void ExportDialog::init_gui () { @@ -153,32 +154,48 @@ ExportDialog::init_gui () 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::VPaned * advanced_paned = Gtk::manage (new Gtk::VPaned()); + + Gtk::VBox* timespan_vbox = Gtk::manage (new Gtk::VBox()); + timespan_vbox->set_spacing (12); + timespan_vbox->set_border_width (12); Gtk::Alignment * timespan_align = Gtk::manage (new Gtk::Alignment()); 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); - advanced_vbox->pack_start (*timespan_label, false, false, 0); - advanced_vbox->pack_start (*timespan_align, false, false, 0); + timespan_align->set_padding (0, 0, 18, 0); + timespan_vbox->pack_start (*timespan_label, false, false, 0); + timespan_vbox->pack_start (*timespan_align, true, true, 0); + advanced_paned->pack1(*timespan_vbox, true, false); + + Gtk::VBox* channels_vbox = Gtk::manage (new Gtk::VBox()); + channels_vbox->set_spacing (12); + channels_vbox->set_border_width (12); Gtk::Alignment * channels_align = Gtk::manage (new Gtk::Alignment()); channels_label = Gtk::manage (new Gtk::Label (_("Channels"), Gtk::ALIGN_LEFT)); channels_align->add (*channel_selector); channels_align->set_padding (0, 12, 18, 0); - advanced_vbox->pack_start (*channels_label, false, false, 0); - advanced_vbox->pack_start (*channels_align, false, false, 0); + channels_vbox->pack_start (*channels_label, false, false, 0); + channels_vbox->pack_start (*channels_align, true, true, 0); + advanced_paned->pack2(*channels_vbox, channel_selector_is_expandable(), false); get_vbox()->pack_start (*file_notebook, false, false, 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); + advanced = Gtk::manage (new Gtk::Expander (_("Time span and channel options"))); + advanced->property_expanded().signal_changed().connect( + sigc::mem_fun(*this, &ExportDialog::expanded_changed)); + advanced->add (*advanced_paned); + + if (channel_selector_is_expandable()) { + advanced_sizegroup = Gtk::SizeGroup::create(Gtk::SIZE_GROUP_VERTICAL); + advanced_sizegroup->add_widget(*timespan_selector); + advanced_sizegroup->add_widget(*channel_selector); + } - get_vbox()->pack_start (*advanced, false, false); + get_vbox()->pack_start (*advanced, true, true); Pango::AttrList bold; Pango::Attribute b = Pango::Attribute::create_attr_weight (Pango::WEIGHT_BOLD); @@ -226,11 +243,11 @@ ExportDialog::sync_with_manager () channel_selector->sync_with_manager(); file_notebook->sync_with_manager (); - update_warnings (); + update_warnings_and_example_filename (); } void -ExportDialog::update_warnings () +ExportDialog::update_warnings_and_example_filename () { /* Reset state */ @@ -240,8 +257,7 @@ ExportDialog::update_warnings () list_files_hbox.hide (); list_files_string = ""; - fast_export_button->set_sensitive (true); - //rt_export_button->set_sensitive (true); + export_button->set_sensitive (true); /* Add new warnings */ @@ -259,9 +275,13 @@ ExportDialog::update_warnings () list_files_hbox.show (); for (std::list::iterator it = warnings->conflicting_filenames.begin(); it != warnings->conflicting_filenames.end(); ++it) { string::size_type pos = it->find_last_of ("/"); - list_files_string += "\n" + it->substr (0, pos + 1) + "" + it->substr (pos + 1) + ""; + list_files_string += it->substr (0, pos + 1) + "" + it->substr (pos + 1) + "\n"; } } + + /* Update example filename */ + + file_notebook->update_example_filenames(); } void @@ -281,18 +301,10 @@ ExportDialog::show_conflicting_files () } void -ExportDialog::export_rt () -{ - profile_manager->prepare_for_export (); - handler->do_export (true); - show_progress (); -} - -void -ExportDialog::export_fw () +ExportDialog::do_export () { profile_manager->prepare_for_export (); - handler->do_export (false); + handler->do_export (); show_progress (); } @@ -302,8 +314,7 @@ ExportDialog::show_progress () status->running = true; cancel_button->set_label (_("Stop Export")); - //rt_export_button->set_sensitive (false); - fast_export_button->set_sensitive (false); + export_button->set_sensitive (false); progress_bar.set_fraction (0.0); warning_widget.hide_all(); @@ -312,6 +323,7 @@ ExportDialog::show_progress () progress_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ExportDialog::progress_timeout), 100); gtk_main_iteration (); + while (status->running) { if (gtk_events_pending()) { gtk_main_iteration (); @@ -321,32 +333,51 @@ ExportDialog::show_progress () } if (!status->aborted()) { - status->finish (); + + NagScreen* ns = NagScreen::maybe_nag (_("export")); + + if (ns) { + ns->nag (); + delete ns; + } + } else { + notify_errors (); } + + status->finish (); } gint ExportDialog::progress_timeout () { std::string status_text; + float progress = 0.0; if (status->normalizing) { - status_text = string_compose (_("Normalizing timespan %1 of %2"), - status->timespan, status->total_timespans); + status_text = string_compose (_("Normalizing '%3' (timespan %1 of %2)"), + status->timespan, status->total_timespans, status->timespan_name); + progress = ((float) status->current_normalize_cycle) / status->total_normalize_cycles; } else { - status_text = string_compose (_("Exporting timespan %1 of %2"), - status->timespan, status->total_timespans); + status_text = string_compose (_("Exporting '%3' (timespan %1 of %2)"), + status->timespan, status->total_timespans, status->timespan_name); + progress = ((float) status->processed_frames_current_timespan) / status->total_frames_current_timespan; } - progress_label.set_text (status_text); + progress_bar.set_text (status_text); - progress_bar.set_fraction (status->progress); + if (progress < previous_progress) { + // Work around gtk bug + progress_bar.hide(); + progress_bar.show(); + } + previous_progress = progress; + + progress_bar.set_fraction (progress); return TRUE; } void ExportDialog::add_error (string const & text) { - fast_export_button->set_sensitive (false); - //rt_export_button->set_sensitive (false); + export_button->set_sensitive (false); if (warn_string.empty()) { warn_string = _("Error: ") + text + ""; @@ -372,7 +403,7 @@ ExportDialog::add_warning (string const & text) /*** Dialog specializations ***/ ExportRangeDialog::ExportRangeDialog (PublicEditor & editor, string range_id) : - ExportDialog (editor, _("Export Range"), X_("RangeExportProfile")), + ExportDialog (editor, _("Export Range"), ExportProfileManager::RangeExport), range_id (range_id) {} @@ -386,7 +417,7 @@ ExportRangeDialog::init_components () } ExportSelectionDialog::ExportSelectionDialog (PublicEditor & editor) : - ExportDialog (editor, _("Export Selection"), X_("SelectionExportProfile")) + ExportDialog (editor, _("Export Selection"), ExportProfileManager::SelectionExport) {} void @@ -399,7 +430,7 @@ ExportSelectionDialog::init_components () } ExportRegionDialog::ExportRegionDialog (PublicEditor & editor, ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track) : - ExportDialog (editor, _("Export Region"), X_("RegionExportProfile")), + ExportDialog (editor, _("Export Region"), ExportProfileManager::RegionExport), region (region), track (track) {} @@ -424,7 +455,7 @@ ExportRegionDialog::init_components () } StemExportDialog::StemExportDialog (PublicEditor & editor) - : ExportDialog(editor, _("Stem Export"), X_("StemExportProfile")) + : ExportDialog(editor, _("Stem Export"), ExportProfileManager::StemExport) { } @@ -437,4 +468,3 @@ StemExportDialog::init_components () channel_selector.reset (new TrackExportChannelSelector (_session, profile_manager)); file_notebook.reset (new ExportFileNotebook ()); } -