fix #1637 (needs merging to 2.0.1 branch); remove debug printf
[ardour.git] / gtk2_ardour / export_dialog.cc
index 56b2f288522646a2e1dd0e3fb79a1cbceb7379f6..27bc80a6bdad259fb6b9331271eee324ee71ec9f 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 
 */
 
 #include <unistd.h>
 #include <utility>
 #include <sys/stat.h>
-
 #include <fstream>
 
 #include <samplerate.h>
+
+#include <pbd/convert.h>
 #include <pbd/xml++.h>
-#include <pbd/dirname.h>
 
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/window_title.h>
+
 #include <ardour/export.h>
 #include <ardour/sndfile_helpers.h>
 #include <ardour/audio_track.h>
 #define FRAME_NAME "BaseFrame"
 
 using namespace std;
-
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
+using namespace Gtkmm2ext;
+
+using PBD::internationalize;
 
 static const gchar *sample_rates[] = {
        N_("22.05kHz"),
@@ -97,17 +101,16 @@ ExportDialog::ExportDialog(PublicEditor& e)
        : ArdourDialog ("export dialog"),
          editor (e),
          format_table (9, 2),
-         format_frame (_("FORMAT")),
-         cue_file_label (_("CD MARKER FILE TYPE"), 1.0, 0.5),
-         channel_count_label (_("CHANNELS"), 1.0, 0.5),
-         header_format_label (_("FILE TYPE"), 1.0, 0.5),
-         bitdepth_format_label (_("SAMPLE FORMAT"), 1.0, 0.5),
-         endian_format_label (_("SAMPLE ENDIANNESS"), 1.0, 0.5),
-         sample_rate_label (_("SAMPLE RATE"), 1.0, 0.5),
-         src_quality_label (_("CONVERSION QUALITY"), 1.0, 0.5),
-         dither_type_label (_("DITHER TYPE"), 1.0, 0.5),
-         cuefile_only_checkbox (_("EXPORT CD MARKER FILE ONLY")),
-         file_frame (_("EXPORT TO FILE")),
+         format_frame (_("Format")),
+         cue_file_label (_("CD Marker File Type"), 1.0, 0.5),
+         channel_count_label (_("Channels"), 1.0, 0.5),
+         header_format_label (_("File Type"), 1.0, 0.5),
+         bitdepth_format_label (_("Sample Format"), 1.0, 0.5),
+         endian_format_label (_("Sample Endianness"), 1.0, 0.5),
+         sample_rate_label (_("Sample Rate"), 1.0, 0.5),
+         src_quality_label (_("Conversion Quality"), 1.0, 0.5),
+         dither_type_label (_("Dither Type"), 1.0, 0.5),
+         cuefile_only_checkbox (_("Export CD Marker File Only")),
          file_browse_button (_("Browse")),
          track_selector_button (_("Specific tracks ..."))
 {
@@ -119,9 +122,12 @@ ExportDialog::ExportDialog(PublicEditor& e)
        track_and_master_selection_allowed = true;
        channel_count_selection_allowed = true;
        export_cd_markers_allowed = true;
+
+       WindowTitle title(Glib::get_application_name());
+       title += _("Export");
        
-       set_title (_("ardour: export"));
-       set_wmclass (_("ardour_export"), "Ardour");
+       set_title (title.get_string());
+       set_wmclass (X_("ardour_export"), "Ardour");
        set_name ("ExportWindow");
        add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
 
@@ -210,28 +216,28 @@ ExportDialog::ExportDialog(PublicEditor& e)
           takes a reference. 
        */
 
-       vector<string> pop_strings = internationalize(sample_rates);
+       vector<string> pop_strings = I18N(sample_rates);
        Gtkmm2ext::set_popdown_strings (sample_rate_combo, pop_strings);
        sample_rate_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize(src_quality);
+       pop_strings = I18N(src_quality);
        Gtkmm2ext::set_popdown_strings (src_quality_combo, pop_strings);
        src_quality_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize(dither_types);
+       pop_strings = I18N(dither_types);
        Gtkmm2ext::set_popdown_strings (dither_type_combo, pop_strings);
        dither_type_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize(channel_strings);
+       pop_strings = I18N(channel_strings);
        Gtkmm2ext::set_popdown_strings (channel_count_combo, pop_strings);
        channel_count_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize((const char **) sndfile_header_formats_strings);
+       pop_strings = I18N((const char **) sndfile_header_formats_strings);
        Gtkmm2ext::set_popdown_strings (header_format_combo, pop_strings);
        header_format_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize((const char **) sndfile_bitdepth_formats_strings);
+       pop_strings = I18N((const char **) sndfile_bitdepth_formats_strings);
        Gtkmm2ext::set_popdown_strings (bitdepth_format_combo, pop_strings);
        bitdepth_format_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize((const char **) sndfile_endian_formats_strings);
+       pop_strings = I18N((const char **) sndfile_endian_formats_strings);
        Gtkmm2ext::set_popdown_strings (endian_format_combo, pop_strings);
        endian_format_combo.set_active_text (pop_strings.front());
-       pop_strings = internationalize(cue_file_types);
+       pop_strings = I18N(cue_file_types);
        Gtkmm2ext::set_popdown_strings (cue_file_combo, pop_strings);
        cue_file_combo.set_active_text (pop_strings.front());
 
@@ -345,7 +351,7 @@ ExportDialog::ExportDialog(PublicEditor& e)
 
        cancel_button = add_button (Stock::CANCEL, RESPONSE_CANCEL);
        cancel_button->signal_clicked().connect (mem_fun(*this, &ExportDialog::end_dialog));
-       ok_button = add_button (Stock::OK, RESPONSE_ACCEPT);
+       ok_button = add_button (_("Export"), RESPONSE_ACCEPT);
        ok_button->signal_clicked().connect (mem_fun(*this, &ExportDialog::do_export));
        
        file_browse_button.set_name ("EditorGTKButton");
@@ -390,29 +396,29 @@ void
 ExportDialog::connect_to_session (Session *s)
 {
        session = s;
-       session->going_away.connect (mem_fun(*this, &Window::hide_all));
+       session->GoingAway.connect (mem_fun(*this, &Window::hide_all));
 
        switch (session->frame_rate()) {
        case 22050:
-               sample_rate_combo.set_active_text (N_("22.05kHz"));
+               sample_rate_combo.set_active_text (_("22.05kHz"));
                break;
        case 44100:
-               sample_rate_combo.set_active_text (N_("44.1kHz"));
+               sample_rate_combo.set_active_text (_("44.1kHz"));
                break;
        case 48000:
-               sample_rate_combo.set_active_text (N_("48kHz"));
+               sample_rate_combo.set_active_text (_("48kHz"));
                break;
        case 88200:
-               sample_rate_combo.set_active_text (N_("88.2kHz"));
+               sample_rate_combo.set_active_text (_("88.2kHz"));
                break;
        case 96000:
-               sample_rate_combo.set_active_text (N_("96kHz"));
+               sample_rate_combo.set_active_text (_("96kHz"));
                break;
        case 192000:
-               sample_rate_combo.set_active_text (N_("192kHz"));
+               sample_rate_combo.set_active_text (_("192kHz"));
                break;
        default:
-               sample_rate_combo.set_active_text (N_("44.1kHz"));
+               sample_rate_combo.set_active_text (_("44.1kHz"));
                break;
        }
 
@@ -488,7 +494,7 @@ ExportDialog::set_state()
                        }
 
                        TreeModel::Children rows = master_selector.get_model()->children();
-                       for (uint32_t r = 0; r < session->master_out()->n_outputs(); ++r) {
+                       for (uint32_t r = 0; r < session->master_out()->n_outputs().get(DataType::AUDIO); ++r) {
                                if (nchns == 2) {
                                        if (r % 2) {
                                                rows[r][exp_cols.right] = true;
@@ -569,7 +575,7 @@ ExportDialog::save_state()
 
                row = *ri;
                track->add_property(X_("channel1"), row[exp_cols.left] ? X_("on") : X_("off"));
-               track->add_property(X_("channel1"), row[exp_cols.right] ? X_("on") : X_("off"));
+               track->add_property(X_("channel2"), row[exp_cols.right] ? X_("on") : X_("off"));
 
                tracks->add_child_nocopy(*track);
        }
@@ -579,7 +585,7 @@ ExportDialog::save_state()
 }
 
 void
-ExportDialog::set_range (jack_nframes_t start, jack_nframes_t end)
+ExportDialog::set_range (nframes_t start, nframes_t end)
 {
        spec.start_frame = start;
        spec.end_frame = end;
@@ -593,7 +599,7 @@ ExportDialog::progress_timeout ()
 }
 
 void
-frames_to_cd_frames_string (char* buf, jack_nframes_t when, jack_nframes_t fr)
+frames_to_cd_frames_string (char* buf, nframes_t when, nframes_t fr)
 {
 
   long unsigned int remainder;
@@ -870,7 +876,7 @@ ExportDialog::export_cue_file (Locations::LocationList& locations, const string&
 void
 ExportDialog::do_export_cd_markers (const string& path,const string& cuefile_type)
 {
-       if (cuefile_type == "TOC") {
+       if (cuefile_type == _("TOC")) {
                session->locations()->apply (*this, &ExportDialog::export_toc_file, path);      
        } else {
                session->locations()->apply (*this, &ExportDialog::export_cue_file, path);
@@ -915,11 +921,9 @@ ExportDialog::do_export ()
        end_dialog ();
 }
        
-
 void
 ExportDialog::end_dialog ()
 {
-
        if (spec.running) {
                spec.stop = true;
 
@@ -932,7 +936,7 @@ ExportDialog::end_dialog ()
                }
        }
 
-       session->engine().freewheel (false);
+       session->finalize_audio_export ();
 
        hide_all ();
 
@@ -948,19 +952,21 @@ ExportDialog::start_export ()
        }
 
        /* If the filename hasn't been set before, use the
-          directory above the current session as a default
+          current session's export directory as a default
           location for the export.  
        */
        
        if (file_entry.get_text().length() == 0) {
-               string dir = session->path();
+               string dir = session->export_dir();
                string::size_type last_slash;
                
-               if ((last_slash = dir.find_last_of ('/')) != string::npos) {
+               if ((last_slash = dir.find_last_of ('/')) != string::npos && last_slash != 0) {
                        dir = dir.substr (0, last_slash+1);
                }
 
-               dir = dir + "export.wav";
+               if (!wants_dir()) {
+                       dir = dir + "export.wav";
+               }
                
                file_entry.set_text (dir);
        }
@@ -1020,19 +1026,19 @@ void
 ExportDialog::sample_rate_chosen ()
 {
        string sr_str = sample_rate_combo.get_active_text();
-       jack_nframes_t rate;
+       nframes_t rate;
 
        if (sr_str == N_("22.05kHz")) {
                rate = 22050;
-       } else if (sr_str == N_("44.1kHz")) {
+       } else if (sr_str == _("44.1kHz")) {
                rate = 44100;
-       } else if (sr_str == N_("48kHz")) {
+       } else if (sr_str == _("48kHz")) {
                rate = 48000;
-       } else if (sr_str == N_("88.2kHz")) {
+       } else if (sr_str == _("88.2kHz")) {
                rate = 88200;
-       } else if (sr_str == N_("96kHz")) {
+       } else if (sr_str == _("96kHz")) {
                rate = 96000;
-       } else if (sr_str == N_("192kHz")) {
+       } else if (sr_str == _("192kHz")) {
                rate = 192000;
        } else {
                rate = session->frame_rate();
@@ -1080,19 +1086,19 @@ ExportDialog::fill_lists ()
        track_list->clear();
        master_list->clear();
        
-       Session::RouteList routes = session->get_routes ();
+       boost::shared_ptr<Session::RouteList> routes = session->get_routes ();
 
-       for (Session::RouteList::iterator ri = routes.begin(); ri != routes.end(); ++ri) {
-
-               Route* route = (*ri);
+       for (Session::RouteList::iterator ri = routes->begin(); ri != routes->end(); ++ri) {
+               
+               boost::shared_ptr<Route> route = (*ri);
                
                if (route->hidden()) {
                        continue;
                }
 
-               for (uint32_t i=0; i < route->n_outputs(); ++i) {
+               for (uint32_t i=0; i < route->n_outputs().get(DataType::AUDIO); ++i) {
                        string name;
-                       if (route->n_outputs() == 1) {
+                       if (route->n_outputs().get(DataType::AUDIO) == 1) {
                                name = route->name();
                        } else {
                                name = string_compose("%1: out-%2", route->name(), i+1);
@@ -1152,7 +1158,7 @@ ExportDialog::is_filepath_valid(string &filepath)
        
        // directory needs to exist and be writable
 
-       string dirpath = PBD::dirname (filepath);
+       string dirpath = Glib::path_get_dirname (filepath);
        if (::access (dirpath.c_str(), W_OK) != 0) {
                string txt = _("Cannot write file in: ") + dirpath;
                MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
@@ -1192,15 +1198,15 @@ ExportDialog::initSpec(string &filepath)
        string sr_str = sample_rate_combo.get_active_text();
        if (sr_str == N_("22.05kHz")) {
                spec.sample_rate = 22050;
-       } else if (sr_str == N_("44.1kHz")) {
+       } else if (sr_str == _("44.1kHz")) {
                spec.sample_rate = 44100;
-       } else if (sr_str == N_("48kHz")) {
+       } else if (sr_str == _("48kHz")) {
                spec.sample_rate = 48000;
-       } else if (sr_str == N_("88.2kHz")) {
+       } else if (sr_str == _("88.2kHz")) {
                spec.sample_rate = 88200;
-       } else if (sr_str == N_("96kHz")) {
+       } else if (sr_str == _("96kHz")) {
                spec.sample_rate = 96000;
-       } else if (sr_str == N_("192kHz")) {
+       } else if (sr_str == _("192kHz")) {
                spec.sample_rate = 192000;
        } else {
                spec.sample_rate = session->frame_rate();
@@ -1305,7 +1311,7 @@ ExportDialog::window_closed (GdkEventAny *ignored)
 void
 ExportDialog::browse ()
 {
-       FileChooserDialog dialog("Export to file", FILE_CHOOSER_ACTION_SAVE);
+       FileChooserDialog dialog("Export to file", browse_action());
        dialog.set_transient_for(*this);
        dialog.set_filename (file_entry.get_text());