X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_filename_selector.cc;h=576c5396315a8c6b5d55008addac0e52a0fd60f2;hb=95a61717faa4b427be0e7821ee91f7df81065815;hp=789b7eb435f948e11c5a4cb470e5010f0a52280c;hpb=c2956012ff838644229e4c926f3bbb44e1d78892;p=ardour.git diff --git a/gtk2_ardour/export_filename_selector.cc b/gtk2_ardour/export_filename_selector.cc index 789b7eb435..576c539631 100644 --- a/gtk2_ardour/export_filename_selector.cc +++ b/gtk2_ardour/export_filename_selector.cc @@ -18,52 +18,61 @@ */ +#include #include +#include +#include "pbd/openuri.h" #include "export_filename_selector.h" -#include "ardour/export_handler.h" -#include "ardour/session.h" -#include "ardour/session_directory.h" - -#include "i18n.h" +#include "pbd/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")), + timespan_checkbox (_("Timespan Name")), revision_checkbox (_("Revision:")), path_label (_("Folder:"), Gtk::ALIGN_LEFT), - browse_button (_("Browse")) + browse_button (_("Browse")), + open_button (_("Open Folder")), + + example_filename_label ("", Gtk::ALIGN_LEFT), + _require_timespan (false) { + include_label.set_markup (_("Build filename(s) from these components:")); + + session_snap_name.append_text (_("No Name")); + session_snap_name.append_text (_("Session Name")); + session_snap_name.append_text (_("Snapshot Name")); + session_snap_name.set_active (0); + + 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 (session_snap_name, false, false, 3); 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); - include_hbox.pack_start (date_format_combo, false, false, 3); - 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); + include_hbox.pack_start (timespan_checkbox, false, false, 3); + include_hbox.pack_start (date_format_combo, false, false, 3); + include_hbox.pack_start (time_format_combo, 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_hbox.pack_start (open_button, false, false, 3); // maybe Mixbus only ? 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); @@ -97,12 +106,14 @@ ExportFilenameSelector::ExportFilenameSelector () : 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)); + session_snap_name.signal_changed().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_session_selection)); + timespan_checkbox.signal_toggled().connect (sigc::mem_fun (*this, &ExportFilenameSelector::change_timespan_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)); + open_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportFilenameSelector::open_folder)); } ExportFilenameSelector::~ExportFilenameSelector () @@ -118,7 +129,16 @@ ExportFilenameSelector::load_state () } label_entry.set_text (filename->include_label ? filename->get_label() : ""); - session_checkbox.set_active (filename->include_session); + if (filename->include_session) { + if (filename->use_session_snapshot_name) { + session_snap_name.set_active (2); + } else { + session_snap_name.set_active (1); + } + } else { + session_snap_name.set_active (0); + } + timespan_checkbox.set_active (filename->include_timespan); revision_checkbox.set_active (filename->include_revision); revision_spinbutton.set_value (filename->get_revision()); path_entry.set_text (filename->get_folder()); @@ -204,6 +224,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 () { @@ -269,6 +299,55 @@ ExportFilenameSelector::change_time_format () CriticalSelectionChanged(); } +void +ExportFilenameSelector::require_timespan (bool r) +{ + _require_timespan = r; + update_timespan_sensitivity (); +} + +void +ExportFilenameSelector::update_timespan_sensitivity () +{ + bool implicit = _require_timespan; + + if (!implicit + && !filename->include_session + && !filename->include_label + && !filename->include_revision + && !filename->include_channel_config + && !filename->include_channel + && !filename->include_date + && !filename->include_format_name) { + implicit = true; + } + + // remember prev state, force enable if implicit active. + if (implicit && !timespan_checkbox.get_inconsistent()) { + timespan_checkbox.set_inconsistent (true); + filename->include_timespan = true; + } + else if (!implicit && timespan_checkbox.get_inconsistent()) { + filename->include_timespan = timespan_checkbox.get_active(); + timespan_checkbox.set_inconsistent (false); + } + +} + +void +ExportFilenameSelector::change_timespan_selection () +{ + if (!filename) { + return; + } + if (timespan_checkbox.get_inconsistent()) { + return; + } + + filename->include_timespan = timespan_checkbox.get_active(); + CriticalSelectionChanged(); +} + void ExportFilenameSelector::change_session_selection () { @@ -276,7 +355,20 @@ ExportFilenameSelector::change_session_selection () return; } - filename->include_session = session_checkbox.get_active(); + switch (session_snap_name.get_active_row_number ()) { + case 1: + filename->include_session = true; + filename->use_session_snapshot_name = false; + break; + case 2: + filename->include_session = true; + filename->use_session_snapshot_name = true; + break; + default: + filename->include_session = false; + filename->use_session_snapshot_name = false; + break; + } CriticalSelectionChanged(); } @@ -305,6 +397,18 @@ ExportFilenameSelector::change_revision_value () CriticalSelectionChanged(); } +void +ExportFilenameSelector::open_folder () +{ + const std::string& dir (path_entry.get_text()); + if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) { + Gtk::MessageDialog msg (string_compose (_("%1: this is not a valid directory/folder."), dir)); + msg.run (); + return; + } + PBD::open_folder (dir); +} + void ExportFilenameSelector::open_browse_dialog () { @@ -317,10 +421,10 @@ ExportFilenameSelector::open_browse_dialog () 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)); @@ -333,6 +437,7 @@ The filename will be chosen from the information just above the folder selector. break; } } + break; } CriticalSelectionChanged();