add some more hand-holding language to the startup assistant
[ardour.git] / gtk2_ardour / export_range_markers_dialog.cc
index 8bb93eb4aa0214e8d19880be37f9e9e60fbad0ac..c6bf578a329dc947c1b796c09ee2c13d73b13090 100644 (file)
 
 #include <sstream>
 
-#include <ardour/audioengine.h>
-#include <ardour/sndfile_helpers.h>
+#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,17 +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();
 
-                       getSession().request_locate(spec.start_frame, false);
-
                        if (getSession().start_export(spec)){
-                               // if export fails                      
+                               // if export fails
                                return;
                        }
 
@@ -98,11 +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;
 }