2 Copyright (C) 2015 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include <gtkmm/stock.h>
22 #include "ardour/session.h"
24 #include "save_as_dialog.h"
30 using namespace ARDOUR;
32 SaveAsDialog::SaveAsDialog ()
33 : ArdourDialog (_("Save As"))
34 , switch_to_button (_("Switch to newly-saved version"))
35 , copy_media_button (_("Copy media to new session"))
36 , copy_external_button (_("Copy external media into new session"))
37 , no_include_media_button (_("Newly-saved session should be empty"))
39 VBox* vbox = get_vbox();
41 vbox->set_spacing (6);
46 hbox = manage (new HBox);
47 hbox->set_spacing (6);
48 label = manage (new Label (_("Save as session name")));
49 hbox->pack_start (*label, false, false);
50 hbox->pack_start (new_name_entry, true, true);
51 vbox->pack_start (*hbox, false, false);
53 hbox = manage (new HBox);
54 hbox->set_spacing (6);
55 label = manage (new Label (_("Parent directory/folder")));
56 hbox->pack_start (*label, false, false);
57 hbox->pack_start (new_parent_folder_selector, true, true);
58 vbox->pack_start (*hbox, false, false);
60 vbox->pack_start (switch_to_button, false, false);
62 VBox* sub_vbox = manage (new VBox);
63 HBox* sub_hbox = manage (new HBox);
64 HBox* empty = manage (new HBox);
66 sub_vbox->pack_start (copy_media_button, false, false);
67 sub_vbox->pack_start (copy_external_button, false, false);
69 /* indent the two media-related buttons by some amount */
70 sub_hbox->set_spacing (24);
71 sub_hbox->pack_start (*empty, false, false);
72 sub_hbox->pack_start (*sub_vbox, false, false);
74 vbox->pack_start (no_include_media_button, false, false);
75 vbox->pack_start (*sub_hbox, false, false);
77 switch_to_button.set_active (true);
78 copy_media_button.set_active (true);
82 add_button (Stock::CANCEL, RESPONSE_CANCEL);
83 add_button (Stock::OK, RESPONSE_OK);
85 no_include_media_button.signal_toggled ().connect (sigc::mem_fun (*this, &SaveAsDialog::no_include_toggled));
87 new_parent_folder_selector.set_action (FILE_CHOOSER_ACTION_SELECT_FOLDER);
88 new_parent_folder_selector.set_current_folder (Glib::get_home_dir()); // Why $HOME and not poor_mans_glob (Config->get_default_session_parent_dir ()) ??
89 new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed));
90 new_parent_folder_selector.signal_current_folder_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed));
91 new_parent_folder_selector.signal_selection_changed().connect (sigc::mem_fun (*this, &SaveAsDialog::name_entry_changed));
92 set_response_sensitive (RESPONSE_OK, false);
96 SaveAsDialog::no_include_toggled ()
98 if (no_include_media_button.get_active()) {
99 copy_media_button.set_sensitive (false);
100 copy_external_button.set_sensitive (false);
102 copy_media_button.set_sensitive (true);
103 copy_external_button.set_sensitive (true);
108 SaveAsDialog::name_entry_changed ()
110 if (new_name_entry.get_text().empty()) {
111 set_response_sensitive (RESPONSE_OK, false);
115 std::string dir = Glib::build_filename (new_parent_folder(), new_name_entry.get_text());
117 if (Glib::file_test (dir, Glib::FILE_TEST_EXISTS)) {
118 set_response_sensitive (RESPONSE_OK, false);
122 set_response_sensitive (RESPONSE_OK);
126 SaveAsDialog::new_parent_folder () const
128 return new_parent_folder_selector.get_filename ();
132 SaveAsDialog::new_name () const
134 return new_name_entry.get_text ();
138 SaveAsDialog::switch_to () const
140 return switch_to_button.get_active ();
144 SaveAsDialog::copy_media () const
146 return copy_media_button.get_active ();
150 SaveAsDialog::copy_external () const
152 return copy_external_button.get_active ();
156 SaveAsDialog::clear_name ()
158 new_name_entry.set_text ("");
159 set_response_sensitive (RESPONSE_OK, false);
163 SaveAsDialog::set_name (std::string name)
165 new_name_entry.set_text (name);
166 name_entry_changed ();
170 SaveAsDialog::include_media () const
172 return !no_include_media_button.get_active ();