X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsave_as_dialog.cc;h=eaee07764cd7f54c1f9332e3c776d2807dbf1272;hb=6ac76734f53b28e3e0bf08c58eb463b16f719d6a;hp=504d479e72e079fbe146a4511a759e1a018e2fe2;hpb=ab4b4934b9155d9f3cdb34fa1e71fbfdb2cf7947;p=ardour.git diff --git a/gtk2_ardour/save_as_dialog.cc b/gtk2_ardour/save_as_dialog.cc index 504d479e72..eaee07764c 100644 --- a/gtk2_ardour/save_as_dialog.cc +++ b/gtk2_ardour/save_as_dialog.cc @@ -23,7 +23,7 @@ #include "save_as_dialog.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace Gtk; @@ -34,11 +34,12 @@ SaveAsDialog::SaveAsDialog () , switch_to_button (_("Switch to newly-saved version")) , copy_media_button (_("Copy media to new session")) , copy_external_button (_("Copy external media into new session")) + , no_include_media_button (_("Newly-saved session should be empty")) { VBox* vbox = get_vbox(); vbox->set_spacing (6); - + HBox* hbox; Label* label; @@ -57,35 +58,74 @@ SaveAsDialog::SaveAsDialog () vbox->pack_start (*hbox, false, false); vbox->pack_start (switch_to_button, false, false); - vbox->pack_start (copy_media_button, false, false); - vbox->pack_start (copy_external_button, false, false); + + VBox* sub_vbox = manage (new VBox); + HBox* sub_hbox = manage (new HBox); + HBox* empty = manage (new HBox); + + sub_vbox->pack_start (copy_media_button, false, false); + sub_vbox->pack_start (copy_external_button, false, false); + + /* indent the two media-related buttons by some amount */ + sub_hbox->set_spacing (24); + sub_hbox->pack_start (*empty, false, false); + sub_hbox->pack_start (*sub_vbox, false, false); + + vbox->pack_start (no_include_media_button, false, false); + vbox->pack_start (*sub_hbox, false, false); switch_to_button.set_active (true); copy_media_button.set_active (true); - + vbox->show_all (); add_button (Stock::CANCEL, RESPONSE_CANCEL); add_button (Stock::OK, RESPONSE_OK); + no_include_media_button.signal_toggled ().connect (sigc::mem_fun (*this, &SaveAsDialog::no_include_toggled)); + new_parent_folder_selector.set_action (FILE_CHOOSER_ACTION_SELECT_FOLDER); - new_parent_folder_selector.set_current_folder (Glib::get_home_dir()); + new_parent_folder_selector.set_current_folder (Config->get_default_session_parent_dir ()); new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed)); + new_parent_folder_selector.signal_current_folder_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed)); + new_parent_folder_selector.signal_selection_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed)); set_response_sensitive (RESPONSE_OK, false); } +void +SaveAsDialog::no_include_toggled () +{ + if (no_include_media_button.get_active()) { + copy_media_button.set_sensitive (false); + copy_external_button.set_sensitive (false); + } else { + copy_media_button.set_sensitive (true); + copy_external_button.set_sensitive (true); + } +} + void SaveAsDialog::name_entry_changed () { - if (!new_name_entry.get_text().empty()) { - set_response_sensitive (RESPONSE_OK); + if (new_name_entry.get_text().empty()) { + set_response_sensitive (RESPONSE_OK, false); + return; + } + + std::string dir = Glib::build_filename (new_parent_folder(), new_name_entry.get_text()); + + if (Glib::file_test (dir, Glib::FILE_TEST_EXISTS)) { + set_response_sensitive (RESPONSE_OK, false); + return; } + + set_response_sensitive (RESPONSE_OK); } string SaveAsDialog::new_parent_folder () const { - return new_parent_folder_selector.get_current_folder (); + return new_parent_folder_selector.get_filename (); } string @@ -111,3 +151,23 @@ SaveAsDialog::copy_external () const { return copy_external_button.get_active (); } + +void +SaveAsDialog::clear_name () +{ + new_name_entry.set_text (""); + set_response_sensitive (RESPONSE_OK, false); +} + +void +SaveAsDialog::set_name (std::string name) +{ + new_name_entry.set_text (name); + name_entry_changed (); +} + +bool +SaveAsDialog::include_media () const +{ + return !no_include_media_button.get_active (); +}