Show cursor in Cut mode on button press at cutting position
[ardour.git] / gtk2_ardour / session_archive_dialog.cc
1 /*
2     Copyright (C) 2015 Paul Davis
3     Copyright (C) 2016 Robin Gareus <robin@gareus.org>
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 */
20
21 #include <gtkmm/stock.h>
22
23 #include "ardour/session.h"
24
25 #include "session_archive_dialog.h"
26
27 #include "pbd/i18n.h"
28
29 using namespace std;
30 using namespace Gtk;
31 using namespace ARDOUR;
32
33 SessionArchiveDialog::SessionArchiveDialog ()
34         : ArdourDialog (_("Zip/Archive Session"))
35         , ProgressReporter ()
36         , only_used_checkbox (_("Exclude unused audio sources"))
37 {
38         VBox* vbox = get_vbox();
39
40         vbox->set_spacing (6);
41
42         HBox* hbox;
43         Label* label;
44
45         format_selector.append_text (".tar.xz");
46         format_selector.set_active_text (".tar.xz");
47
48         encode_selector.append_text (_("None"));
49         encode_selector.append_text (_("FLAC 16bit"));
50         encode_selector.append_text (_("FLAC 24bit"));
51         encode_selector.set_active_text ("FLAC 16bit"); // TODO remember
52
53         hbox = manage (new HBox);
54         hbox->set_spacing (6);
55         label = manage (new Label (_("Archive Name")));
56         hbox->pack_start (*label, false, false);
57         hbox->pack_start (name_entry, true, true);
58         hbox->pack_start (format_selector, false, false);
59         vbox->pack_start (*hbox, false, false);
60
61         hbox = manage (new HBox);
62         hbox->set_spacing (6);
63         label = manage (new Label (_("Target directory/folder")));
64         hbox->pack_start (*label, false, false);
65         hbox->pack_start (target_folder_selector, true, true);
66         vbox->pack_start (*hbox, false, false);
67
68         hbox = manage (new HBox);
69         hbox->set_spacing (6);
70         label = manage (new Label (_("Audio Compression")));
71         hbox->pack_start (*label, false, false);
72         hbox->pack_start (encode_selector, true, true);
73         vbox->pack_start (*hbox, false, false);
74
75         vbox->pack_start (only_used_checkbox, false, false);
76
77         vbox->pack_start (progress_bar, true, true, 12);
78
79         vbox->show_all ();
80         progress_bar.hide ();
81
82         add_button (Stock::CANCEL, RESPONSE_CANCEL);
83         add_button (Stock::OK, RESPONSE_OK);
84
85         target_folder_selector.set_action (FILE_CHOOSER_ACTION_SELECT_FOLDER);
86         target_folder_selector.set_current_folder (Config->get_default_session_parent_dir ()); // TODO get/set default_archive_dir
87         name_entry.signal_changed().connect (sigc::mem_fun (*this, &SessionArchiveDialog::name_entry_changed));
88         target_folder_selector.signal_current_folder_changed().connect (sigc::mem_fun (*this, &SessionArchiveDialog::name_entry_changed));
89         target_folder_selector.signal_selection_changed().connect (sigc::mem_fun (*this, &SessionArchiveDialog::name_entry_changed));
90         set_response_sensitive (RESPONSE_OK, false);
91 }
92
93
94 void
95 SessionArchiveDialog::name_entry_changed ()
96 {
97         if (name_entry.get_text().empty()) {
98                 set_response_sensitive (RESPONSE_OK, false);
99                 return;
100         }
101
102         std::string dir = Glib::build_filename (target_folder(), name_entry.get_text() + format_selector.get_active_text ());
103
104         if (Glib::file_test (dir, Glib::FILE_TEST_EXISTS)) {
105                 set_response_sensitive (RESPONSE_OK, false);
106                 return;
107         }
108
109         set_response_sensitive (RESPONSE_OK);
110 }
111
112 string
113 SessionArchiveDialog::target_folder () const
114 {
115         return target_folder_selector.get_filename ();
116 }
117
118 void
119 SessionArchiveDialog::set_target_folder (const std::string& name)
120 {
121         target_folder_selector.set_current_folder (name);
122         name_entry_changed ();
123 }
124
125 string
126 SessionArchiveDialog::name () const
127 {
128         return name_entry.get_text ();
129 }
130
131 void
132 SessionArchiveDialog::set_name (const std::string& name)
133 {
134         name_entry.set_text (name);
135         name_entry_changed ();
136 }
137
138 bool
139 SessionArchiveDialog::only_used_sources () const
140 {
141         return only_used_checkbox.get_active ();
142 }
143
144 void
145 SessionArchiveDialog::set_only_used_sources (bool en)
146 {
147         only_used_checkbox.set_active (en);
148 }
149
150 ARDOUR::Session::ArchiveEncode
151 SessionArchiveDialog::encode_option () const
152 {
153         string codec = encode_selector.get_active_text ();
154         if (codec == _("FLAC 16bit")) {
155                 return ARDOUR::Session::FLAC_16BIT;
156         }
157         if (codec == _("FLAC 24bit")) {
158                 return ARDOUR::Session::FLAC_24BIT;
159         }
160         return ARDOUR::Session::NO_ENCODE;
161 }
162
163 void
164 SessionArchiveDialog::set_encode_option (ARDOUR::Session::ArchiveEncode e)
165 {
166         switch (e) {
167                 case ARDOUR::Session::FLAC_16BIT:
168                         encode_selector.set_active_text (_("FLAC 16bit"));
169                         break;
170                 case ARDOUR::Session::FLAC_24BIT:
171                         encode_selector.set_active_text (_("FLAC 24bit"));
172                         break;
173                 default:
174                         encode_selector.set_active_text (_("None"));
175                         break;
176         }
177 }
178
179 void
180 SessionArchiveDialog::update_progress_gui (float p)
181 {
182         set_response_sensitive (RESPONSE_OK, false);
183         set_response_sensitive (RESPONSE_CANCEL, false);
184         progress_bar.show ();
185         if (p < 0) {
186                 progress_bar.set_text (_("Archiving Session"));
187                 return;
188         }
189         if (p > 1.0) {
190                 progress_bar.set_text (_("Encoding Audio"));
191                 return;
192         }
193         progress_bar.set_fraction (p);
194 }