From f807ea6ea22bdc5ef56df4f5dcec1a8074a8381e Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 4 Nov 2022 21:57:53 +0100 Subject: [PATCH] Check if format is valid before starting export This can happen if e.g. mp3 export is n/a, but a mp3 preset is present. --- gtk2_ardour/simple_export_dialog.cc | 26 ++++++++++++++++++++++++++ gtk2_ardour/simple_export_dialog.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/gtk2_ardour/simple_export_dialog.cc b/gtk2_ardour/simple_export_dialog.cc index 60ec3c3754..be9935a587 100644 --- a/gtk2_ardour/simple_export_dialog.cc +++ b/gtk2_ardour/simple_export_dialog.cc @@ -125,6 +125,7 @@ SimpleExportDialog::set_session (ARDOUR::Session* s) ArdourDialog::set_session (s); _range_combo.remove_all (); + _preset_cfg_connection.disconnect (); if (!s) { _export_button->set_sensitive (false); @@ -166,6 +167,31 @@ SimpleExportDialog::set_session (ARDOUR::Session* s) _range_combo.set_active (0); _range_combo.set_sensitive (true); _export_button->set_sensitive (true); + + _preset_cfg_connection = _eps.CriticalSelectionChanged.connect (sigc::mem_fun (*this, &SimpleExportDialog::check_manager)); +} + +void +SimpleExportDialog::check_manager () +{ + bool ok = _manager && _manager->preset (); + + if (ok && _manager->get_formats ().empty ()) { + ok = false; + } + + if (ok) { + /* check for NULL ExportFormatSpecPtr */ + auto fms = _manager->get_formats (); + for (auto const& fm : fms) { + if (!fm->format) { + ok = false; + break; + } + } + } + + _export_button->set_sensitive (ok); } void diff --git a/gtk2_ardour/simple_export_dialog.h b/gtk2_ardour/simple_export_dialog.h index 6d81b36e09..f7d3bfabf1 100644 --- a/gtk2_ardour/simple_export_dialog.h +++ b/gtk2_ardour/simple_export_dialog.h @@ -56,6 +56,7 @@ private: void start_export (); void close_dialog (); void show_progress (); + void check_manager (); void set_error (std::string const&); bool progress_timeout (); @@ -69,6 +70,7 @@ private: Gtk::ProgressBar _progress_bar; sigc::connection _progress_connection; + sigc::connection _preset_cfg_connection; }; #endif