X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_filename_selector.cc;h=4f3a02a015747bb13b9d6c9342c4dba4a3abbe63;hb=bca507a80811e0878f976434767bc45cd61f5ab3;hp=3f651161b577998d70a17e7df51de44272617f9c;hpb=da8eec7a8311295ee91308eca9fae2146385c512;p=ardour.git diff --git a/gtk2_ardour/export_filename_selector.cc b/gtk2_ardour/export_filename_selector.cc index 3f651161b5..4f3a02a015 100644 --- a/gtk2_ardour/export_filename_selector.cc +++ b/gtk2_ardour/export_filename_selector.cc @@ -18,29 +18,32 @@ */ -#include "export_filename_selector.h" +#include -#include "ardour/export_handler.h" -#include "ardour/session.h" -#include "ardour/session_directory.h" +#include "export_filename_selector.h" #include "i18n.h" using namespace ARDOUR; ExportFilenameSelector::ExportFilenameSelector () : - include_label (_("Include in Filename(s):"), Gtk::ALIGN_LEFT), - + include_label ("", Gtk::ALIGN_LEFT), + label_label (_("Label:"), Gtk::ALIGN_LEFT), session_checkbox (_("Session Name")), revision_checkbox (_("Revision:")), - + path_label (_("Folder:"), Gtk::ALIGN_LEFT), - browse_button (_("Browse")) + browse_button (_("Browse")), + + example_filename_label ("", Gtk::ALIGN_LEFT) { + include_label.set_markup (_("Build filename(s) from these components:")); + + pack_start (path_hbox, false, false, 12); pack_start (include_label, false, false, 6); pack_start (include_hbox, false, false, 0); - pack_start (path_hbox, false, false, 12); + pack_start (example_filename_label, false, false, 12); include_hbox.pack_start (label_label, false, false, 3); include_hbox.pack_start (label_entry, false, false, 3); @@ -50,10 +53,14 @@ ExportFilenameSelector::ExportFilenameSelector () : include_hbox.pack_start (revision_checkbox, false, false, 3); include_hbox.pack_start (revision_spinbutton, false, false, 3); + label_entry.set_activates_default (); + path_hbox.pack_start (path_label, false, false, 3); path_hbox.pack_start (path_entry, true, true, 3); path_hbox.pack_start (browse_button, false, false, 3); + path_entry.set_activates_default (); + date_format_combo.set_name ("PaddedButton"); time_format_combo.set_name ("PaddedButton"); browse_button.set_name ("PaddedButton"); @@ -89,6 +96,7 @@ ExportFilenameSelector::ExportFilenameSelector () : label_entry.signal_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::update_label)); path_entry.signal_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::update_folder)); + path_entry.signal_activate().connect (sigc::mem_fun (*this, &ExportFilenameSelector::check_folder), false); session_checkbox.signal_toggled().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_session_selection)); @@ -197,6 +205,16 @@ ExportFilenameSelector::set_state (ARDOUR::ExportProfileManager::FilenameStatePt } +void +ExportFilenameSelector::set_example_filename (std::string filename) +{ + if (filename == "") { + example_filename_label.set_markup (_("Sorry, no example filename can be shown at the moment")); + } else { + example_filename_label.set_markup (string_compose(_("Current (approximate) filename: \"%1\""), filename)); + } +} + void ExportFilenameSelector::update_label () { @@ -221,6 +239,23 @@ ExportFilenameSelector::update_folder () CriticalSelectionChanged(); } +void +ExportFilenameSelector::check_folder () +{ + if (!filename) { + return; + } + + if (!Glib::file_test (path_entry.get_text(), Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) { + Gtk::MessageDialog msg (string_compose (_("%1: this is only the directory/folder name, not the filename.\n\ +The filename will be chosen from the information just above the folder selector."), path_entry.get_text())); + msg.run (); + path_entry.set_text (Glib::path_get_dirname (path_entry.get_text())); + filename->set_folder (path_entry.get_text()); + CriticalSelectionChanged(); + } +} + void ExportFilenameSelector::change_date_format () { @@ -291,13 +326,23 @@ ExportFilenameSelector::open_browse_dialog () dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); - int result = dialog.run(); - - if (result == Gtk::RESPONSE_OK) { - std::string filename = dialog.get_filename(); - - if (filename.length()) { - path_entry.set_text (filename); + while (true) { + int result = dialog.run(); + + if (result == Gtk::RESPONSE_OK) { + std::string filename = dialog.get_filename(); + + if (!Glib::file_test (filename, Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) { + Gtk::MessageDialog msg (string_compose (_("%1: this is only the directory/folder name, not the filename.\n\ +The filename will be chosen from the information just above the folder selector."), filename)); + msg.run (); + continue; + } + + if (filename.length()) { + path_entry.set_text (filename); + break; + } } }