replace ::cast_dynamic() with relevant ActionManager::get_*_action() calls
[ardour.git] / gtk2_ardour / export_dialog.cc
index 26e2b9a68887628f64560848f7f491f453784ffc..6b7f13dba6d5d3c5fe44a44a5003edf749e1e2a9 100644 (file)
 #include <sigc++/signal.h>
 
 #include <gtkmm/messagedialog.h>
+#include <gtkmm/stock.h>
 
 #include "ardour/audioregion.h"
+#include "ardour/export_channel_configuration.h"
 #include "ardour/export_status.h"
 #include "ardour/export_handler.h"
 #include "ardour/profile.h"
@@ -33,7 +35,7 @@
 #include "gui_thread.h"
 #include "nag.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace PBD;
@@ -96,9 +98,13 @@ ExportDialog::set_session (ARDOUR::Session* s)
        preset_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::sync_with_manager));
        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));
+       channel_selector->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_realtime_selection));
        file_notebook->CriticalSelectionChanged.connect (sigc::mem_fun (*this, &ExportDialog::update_warnings_and_example_filename));
 
        update_warnings_and_example_filename ();
+       update_realtime_selection ();
+
+       _session->config.ParameterChanged.connect (*this, invalidator (*this), boost::bind (&ExportDialog::parameter_changed, this, _1), gui_context());
 }
 
 void
@@ -205,6 +211,7 @@ ExportDialog::sync_with_manager ()
        file_notebook->sync_with_manager ();
 
        update_warnings_and_example_filename ();
+       update_realtime_selection ();
 }
 
 void
@@ -245,6 +252,47 @@ ExportDialog::update_warnings_and_example_filename ()
        file_notebook->update_example_filenames();
 }
 
+void
+ExportDialog::update_realtime_selection ()
+{
+       bool rt_ok = true;
+       switch (profile_manager->type ()) {
+               case ExportProfileManager::RegularExport:
+                       break;
+               case ExportProfileManager::RangeExport:
+                       break;
+               case ExportProfileManager::SelectionExport:
+                       break;
+               case ExportProfileManager::RegionExport:
+                       if (!profile_manager->get_channel_configs().empty ()) {
+                               switch (profile_manager->get_channel_configs().front()->config->region_processing_type ()) {
+                                       case RegionExportChannelFactory::Raw:
+                                       case RegionExportChannelFactory::Fades:
+                                               rt_ok = false;
+                                               break;
+                                       default:
+                                               break;
+                               }
+                       }
+                       break;
+               case ExportProfileManager::StemExport:
+                       if (! static_cast<TrackExportChannelSelector*>(channel_selector.get())->track_output ()) {
+                               rt_ok = false;
+                       }
+                       break;
+       }
+
+       timespan_selector->allow_realtime_export (rt_ok);
+}
+
+void
+ExportDialog::parameter_changed (std::string const& p)
+{
+       if (p == "realtime-export") {
+               update_realtime_selection ();
+       }
+}
+
 void
 ExportDialog::show_conflicting_files ()
 {
@@ -354,12 +402,17 @@ ExportDialog::progress_timeout ()
        case ExportStatus::Exporting:
                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 = ((float) status->processed_samples_current_timespan) / status->total_samples_current_timespan;
                break;
        case ExportStatus::Normalizing:
                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;
+               progress = ((float) status->current_postprocessing_cycle) / status->total_postprocessing_cycles;
+               break;
+       case ExportStatus::Encoding:
+               status_text = string_compose (_("Encoding '%3' (timespan %1 of %2)"),
+                                             status->timespan, status->total_timespans, status->timespan_name);
+               progress = ((float) status->current_postprocessing_cycle) / status->total_postprocessing_cycles;
                break;
        case ExportStatus::Tagging:
                status_text = string_compose (_("Tagging '%3' (timespan %1 of %2)"),