#include <gtkmm/messagedialog.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"
#include "export_dialog.h"
+#include "export_report.h"
#include "gui_thread.h"
#include "nag.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace ARDOUR;
using namespace PBD;
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
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));
export_button->signal_clicked().connect (sigc::mem_fun (*this, &ExportDialog::do_export));
+ file_notebook->soundcloud_export_selector = soundcloud_selector;
+
/* Done! */
show_all_children ();
export_notebook.append_page (*file_format_selector, _("File format"));
export_notebook.append_page (*timespan_selector, _("Time Span"));
export_notebook.append_page (*channel_selector, _("Channels"));
-
+
get_vbox()->pack_start (export_notebook, true, true, 0);
get_vbox()->pack_end (warning_widget, false, false, 0);
get_vbox()->pack_end (progress_widget, false, false, 0);
void
ExportDialog::close_dialog ()
{
- if (status->running) {
+ if (status->running ()) {
status->abort();
}
file_notebook->sync_with_manager ();
update_warnings_and_example_filename ();
+ update_realtime_selection ();
}
void
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 ()
{
{
try {
profile_manager->prepare_for_export ();
- handler->upload_username = soundcloud_selector->username();
- handler->upload_password = soundcloud_selector->password();
- handler->upload_public = soundcloud_selector->upload_public();
- handler->upload_open = soundcloud_selector->upload_open();
+ handler->soundcloud_username = soundcloud_selector->username ();
+ handler->soundcloud_password = soundcloud_selector->password ();
+ handler->soundcloud_make_public = soundcloud_selector->make_public ();
+ handler->soundcloud_open_page = soundcloud_selector->open_page ();
+ handler->soundcloud_downloadable = soundcloud_selector->downloadable ();
handler->SoundcloudProgress.connect_same_thread(
- *this,
+ *this,
boost::bind(&ExportDialog::soundcloud_upload_progress, this, _1, _2, _3)
);
#if 0
void
ExportDialog::show_progress ()
{
- status->running = true;
+ export_notebook.set_sensitive (false);
cancel_button->set_label (_("Stop Export"));
export_button->set_sensitive (false);
gtk_main_iteration ();
- while (status->running) {
+ while (status->running ()) {
if (gtk_events_pending()) {
gtk_main_iteration ();
} else {
- usleep (10000);
+ Glib::usleep (10000);
}
}
- if (!status->aborted()) {
+ status->finish ();
- NagScreen* ns = NagScreen::maybe_nag (_("export"));
-
- if (ns) {
- ns->nag ();
- delete ns;
+ if (!status->aborted() && status->result_map.size() > 0) {
+ hide();
+ ExportReport er (_session, status);
+ er.run();
+ }
+
+ if (!status->aborted()) {
+ hide();
+ if (!ARDOUR::Profile->get_mixbus()) {
+ NagScreen* ns = NagScreen::maybe_nag (_("export"));
+ if (ns) {
+ ns->nag ();
+ delete ns;
+ }
}
} else {
notify_errors ();
}
-
- status->finish ();
+ export_notebook.set_sensitive (true);
}
gint
ExportDialog::progress_timeout ()
{
std::string status_text;
- float progress = 0.0;
- if (status->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;
- } else {
+ float progress = -1;
+ switch (status->active_job) {
+ 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;
+ 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_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)"),
+ status->timespan, status->total_timespans, status->timespan_name);
+ break;
+ case ExportStatus::Uploading:
+ status_text = string_compose (_("Uploading '%3' (timespan %1 of %2)"),
+ status->timespan, status->total_timespans, status->timespan_name);
+ break;
+ case ExportStatus::Command:
+ status_text = string_compose (_("Running Post Export Command for '%1'"), status->timespan_name);
+ break;
}
+
progress_bar.set_text (status_text);
if (progress < previous_progress) {
}
previous_progress = progress;
- progress_bar.set_fraction (progress);
+ if (progress >= 0) {
+ progress_bar.set_fraction (progress);
+ } else {
+ progress_bar.set_pulse_step(.1);
+ progress_bar.pulse();
+ }
return TRUE;
}