X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_filename_selector.cc;h=4f3a02a015747bb13b9d6c9342c4dba4a3abbe63;hb=d953f1ce0e65d59c529f40ddc8da0e80db0dfbfb;hp=a78c0e7890a01986b89600492bc9e264b494bf12;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/gtk2_ardour/export_filename_selector.cc b/gtk2_ardour/export_filename_selector.cc index a78c0e7890..4f3a02a015 100644 --- a/gtk2_ardour/export_filename_selector.cc +++ b/gtk2_ardour/export_filename_selector.cc @@ -18,32 +18,33 @@ */ -#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 () : - session (0), + include_label ("", Gtk::ALIGN_LEFT), - include_label (_("Include in Filename(s):"), Gtk::ALIGN_LEFT), + label_label (_("Label:"), Gtk::ALIGN_LEFT), + session_checkbox (_("Session Name")), + revision_checkbox (_("Revision:")), - label_label (_("Label:"), Gtk::ALIGN_LEFT), - session_checkbox (_("Session Name")), - revision_checkbox (_("Revision:")), + path_label (_("Folder:"), Gtk::ALIGN_LEFT), + browse_button (_("Browse")), - path_label (_("Folder:"), Gtk::ALIGN_LEFT), - 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); include_hbox.pack_start (session_checkbox, false, false, 3); @@ -51,53 +52,58 @@ ExportFilenameSelector::ExportFilenameSelector () : include_hbox.pack_start (time_format_combo, false, false, 3); 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"); - + label_sizegroup = Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL); label_sizegroup->add_widget (label_label); label_sizegroup->add_widget (path_label); - + /* Date */ - + date_format_list = Gtk::ListStore::create (date_format_cols); date_format_combo.set_model (date_format_list); date_format_combo.pack_start (date_format_cols.label); - + date_format_combo.signal_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_date_format)); - + /* Time */ - + time_format_list = Gtk::ListStore::create (time_format_cols); time_format_combo.set_model (time_format_list); time_format_combo.pack_start (time_format_cols.label); - + time_format_combo.signal_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_time_format)); - + /* Revision */ - + revision_spinbutton.set_digits (0); revision_spinbutton.set_increments (1, 10); revision_spinbutton.set_range (1, 1000); revision_spinbutton.set_sensitive (false); - + /* Signals */ - + 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)); - + revision_checkbox.signal_toggled().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_revision_selection)); revision_spinbutton.signal_value_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_revision_value)); - - browse_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportFilenameSelector::open_browse_dialog)); + + browse_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportFilenameSelector::open_browse_dialog)); } ExportFilenameSelector::~ExportFilenameSelector () @@ -117,15 +123,15 @@ ExportFilenameSelector::load_state () revision_checkbox.set_active (filename->include_revision); revision_spinbutton.set_value (filename->get_revision()); path_entry.set_text (filename->get_folder()); - + Gtk::TreeModel::Children::iterator it; - + for (it = date_format_list->children().begin(); it != date_format_list->children().end(); ++it) { if (it->get_value (date_format_cols.format) == filename->get_date_format()) { date_format_combo.set_active (it); } } - + for (it = time_format_list->children().begin(); it != time_format_list->children().end(); ++it) { if (it->get_value (time_format_cols.format) == filename->get_time_format()) { time_format_combo.set_active (it); @@ -136,58 +142,58 @@ ExportFilenameSelector::load_state () void ExportFilenameSelector::set_state (ARDOUR::ExportProfileManager::FilenameStatePtr state_, ARDOUR::Session * session_) { - session = session_; - + SessionHandlePtr::set_session (session_); + filename = state_->filename; - + /* Fill combo boxes */ - + Gtk::TreeModel::iterator iter; Gtk::TreeModel::Row row; - + /* Dates */ - + date_format_list->clear(); - + iter = date_format_list->append(); row = *iter; row[date_format_cols.format] = ExportFilename::D_None; row[date_format_cols.label] = filename->get_date_format_str (ExportFilename::D_None); - + iter = date_format_list->append(); row = *iter; row[date_format_cols.format] = ExportFilename::D_ISO; row[date_format_cols.label] = filename->get_date_format_str (ExportFilename::D_ISO); - + iter = date_format_list->append(); row = *iter; row[date_format_cols.format] = ExportFilename::D_ISOShortY; row[date_format_cols.label] = filename->get_date_format_str (ExportFilename::D_ISOShortY); - + iter = date_format_list->append(); row = *iter; row[date_format_cols.format] = ExportFilename::D_BE; row[date_format_cols.label] = filename->get_date_format_str (ExportFilename::D_BE); - + iter = date_format_list->append(); row = *iter; row[date_format_cols.format] = ExportFilename::D_BEShortY; row[date_format_cols.label] = filename->get_date_format_str (ExportFilename::D_BEShortY); - + /* Times */ - + time_format_list->clear(); - + iter = time_format_list->append(); row = *iter; row[time_format_cols.format] = ExportFilename::T_None; row[time_format_cols.label] = filename->get_time_format_str (ExportFilename::T_None); - + iter = time_format_list->append(); row = *iter; row[time_format_cols.format] = ExportFilename::T_NoDelim; row[time_format_cols.label] = filename->get_time_format_str (ExportFilename::T_NoDelim); - + iter = time_format_list->append(); row = *iter; row[time_format_cols.format] = ExportFilename::T_Delim; @@ -199,15 +205,25 @@ 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 () { if (!filename) { return; } - + filename->set_label (label_entry.get_text()); - + filename->include_label = !label_entry.get_text().empty(); CriticalSelectionChanged(); } @@ -218,18 +234,35 @@ ExportFilenameSelector::update_folder () if (!filename) { return; } - + filename->set_folder (path_entry.get_text()); 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 () { if (!filename) { return; } - + DateFormat format = date_format_combo.get_active()->get_value (date_format_cols.format); filename->set_date_format (format); CriticalSelectionChanged(); @@ -241,7 +274,7 @@ ExportFilenameSelector::change_time_format () if (!filename) { return; } - + TimeFormat format = time_format_combo.get_active()->get_value (time_format_cols.format); filename->set_time_format (format); CriticalSelectionChanged(); @@ -253,7 +286,7 @@ ExportFilenameSelector::change_session_selection () if (!filename) { return; } - + filename->include_session = session_checkbox.get_active(); CriticalSelectionChanged(); } @@ -264,10 +297,10 @@ ExportFilenameSelector::change_revision_selection () if (!filename) { return; } - + bool selected = revision_checkbox.get_active(); filename->include_revision = selected; - + revision_spinbutton.set_sensitive (selected); CriticalSelectionChanged(); } @@ -278,7 +311,7 @@ ExportFilenameSelector::change_revision_value () if (!filename) { return; } - + filename->set_revision ((uint32_t) revision_spinbutton.get_value_as_int()); CriticalSelectionChanged(); } @@ -293,15 +326,25 @@ 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(); + 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 (result == Gtk::RESPONSE_OK) { - Glib::ustring filename = dialog.get_filename(); - - if (filename.length()) { - path_entry.set_text (filename); + if (filename.length()) { + path_entry.set_text (filename); + break; + } } } - + CriticalSelectionChanged(); }