X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsave_as_dialog.cc;h=9c8d3cb73482e76a2900cbcc247b8762725db642;hb=1918fe43fa31f45251601891b911d038518c66e1;hp=504d479e72e079fbe146a4511a759e1a018e2fe2;hpb=4141d2113f47c34d5b4282892fb50954ededbb03;p=ardour.git diff --git a/gtk2_ardour/save_as_dialog.cc b/gtk2_ardour/save_as_dialog.cc index 504d479e72..9c8d3cb734 100644 --- a/gtk2_ardour/save_as_dialog.cc +++ b/gtk2_ardour/save_as_dialog.cc @@ -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 (Glib::get_home_dir()); // Why $HOME and not poor_mans_glob (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 (); +}