X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_range_markers_dialog.cc;h=c6bf578a329dc947c1b796c09ee2c13d73b13090;hb=91c057494be9f97020211ee1855c2d1d190df95c;hp=bf2f0e3989aba2f44ca00dfbb45895a1badfcc67;hpb=68e943265edf04e63a8e8b8f62bab20f99d9c637;p=ardour.git diff --git a/gtk2_ardour/export_range_markers_dialog.cc b/gtk2_ardour/export_range_markers_dialog.cc index bf2f0e3989..c6bf578a32 100644 --- a/gtk2_ardour/export_range_markers_dialog.cc +++ b/gtk2_ardour/export_range_markers_dialog.cc @@ -22,8 +22,10 @@ #include -#include -#include +#include "pbd/filesystem.h" + +#include "ardour/audioengine.h" +#include "ardour/sndfile_helpers.h" #include "ardour_ui.h" #include "export_range_markers_dialog.h" @@ -35,14 +37,14 @@ using namespace ARDOUR; using namespace PBD; using namespace std; -ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) +ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) : ExportDialog(editor) -{ - set_title (_("ardour: export ranges")); +{ + set_title (_("Export Ranges")); file_frame.set_label (_("Export to Directory")); do_not_allow_export_cd_markers(); - + total_duration = 0; current_range_marker_index = 0; } @@ -52,8 +54,8 @@ ExportRangeMarkersDialog::browse_action () const { return Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER; } - -void + +void ExportRangeMarkersDialog::export_data () { getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export); @@ -74,15 +76,15 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& string filepath = get_target_filepath( get_selected_file_name(), currentLocation->name(), - sndfile_file_ending_from_string(get_selected_header_format())); - + get_selected_header_format()); + initSpec(filepath); - + spec.start_frame = currentLocation->start(); spec.end_frame = currentLocation->end(); if (getSession().start_export(spec)){ - // if export fails + // if export fails return; } @@ -96,13 +98,13 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& usleep(10000); } } - + current_range_marker_index++; - + getSession().stop_export (spec); } } - + spec.running = false; } @@ -117,27 +119,26 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri string target_filepath = target_path + filename + postfix; struct stat statbuf; - + for(int counter=1; (stat (target_filepath.c_str(), &statbuf) == 0); counter++){ - // while file exists + // while file exists ostringstream scounter; scounter.flush(); scounter << counter; - - target_filepath = + + target_filepath = target_path + filename + "_" + scounter.str() + postfix; } - + return target_filepath; } - bool ExportRangeMarkersDialog::is_filepath_valid(string &filepath) { // sanity check file name first struct stat statbuf; - + if (filepath.empty()) { // warning dialog string txt = _("Please enter a valid target directory."); @@ -145,51 +146,50 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath) msg.run(); return false; } - - if ( (stat (filepath.c_str(), &statbuf) != 0) || + + if ( (stat (filepath.c_str(), &statbuf) != 0) || (!S_ISDIR (statbuf.st_mode)) ) { - string txt = _("Please select an existing target directory. Files are not allowed!"); - MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); - msg.run(); - return false; + string txt = _("Please select an existing target directory. Files are not allowed!"); + MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); + msg.run(); + return false; } - + // directory needs to exist and be writable string dirpath = Glib::path_get_dirname (filepath); - if (::access (dirpath.c_str(), W_OK) != 0) { + if (!exists_and_writable (sys::path (dirpath))) { string txt = _("Cannot write file in: ") + dirpath; MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); msg.run(); return false; } - + return true; } - void ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations) { // flush vector range_markers_durations_aggregated.resize(0); - - nframes_t duration_before_current_location = 0; + + framecnt_t duration_before_current_location = 0; Locations::LocationList::iterator locationIter; - + for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) { Location *currentLocation = (*locationIter); - + if(currentLocation->is_range_marker()){ range_markers_durations_aggregated.push_back (duration_before_current_location); - - nframes_t duration = currentLocation->end() - currentLocation->start(); - + + framecnt_t duration = currentLocation->end() - currentLocation->start(); + range_markers_durations.push_back (duration); - duration_before_current_location += duration; + duration_before_current_location += duration; } } - total_duration = duration_before_current_location; + total_duration = duration_before_current_location; } @@ -205,7 +205,7 @@ ExportRangeMarkersDialog::progress_timeout () (spec.progress * (double) range_markers_durations[current_range_marker_index])) / (double) total_duration; } - + set_progress_fraction( progress ); return TRUE; }