X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsave_as_dialog.cc;h=eaee07764cd7f54c1f9332e3c776d2807dbf1272;hb=b6c3e5537269e53bb145300e7724e8b89dfb74d6;hp=b9fc50396d02e7fe9432ad12dbeb4f8d126064bb;hpb=69564de9e3b6ba9f15bdc8b96b60a00c9bbcf5e3;p=ardour.git diff --git a/gtk2_ardour/save_as_dialog.cc b/gtk2_ardour/save_as_dialog.cc index b9fc50396d..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; @@ -31,32 +31,107 @@ using namespace ARDOUR; SaveAsDialog::SaveAsDialog () : ArdourDialog (_("Save As")) + , 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(); - add_button (Stock::CANCEL, RESPONSE_CANCEL); - add_button (Stock::OK, RESPONSE_OK); - - vbox->pack_start (new_name_entry, false, false); - vbox->pack_start (new_parent_folder_selector, false, false); + vbox->set_spacing (6); + + HBox* hbox; + Label* label; + + hbox = manage (new HBox); + hbox->set_spacing (6); + label = manage (new Label (_("Save as session name"))); + hbox->pack_start (*label, false, false); + hbox->pack_start (new_name_entry, true, true); + vbox->pack_start (*hbox, false, false); + + hbox = manage (new HBox); + hbox->set_spacing (6); + label = manage (new Label (_("Parent directory/folder"))); + hbox->pack_start (*label, false, false); + hbox->pack_start (new_parent_folder_selector, true, true); + 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 (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, 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 string(); + return new_parent_folder_selector.get_filename (); } string SaveAsDialog::new_name () const { - return string (); + return new_name_entry.get_text (); } bool @@ -76,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 (); +}