2 Copyright (C) 2000 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 /* This file contains any ARDOUR_UI methods that require knowledge of
21 the various dialog boxes, and exists so that no compilation dependency
22 exists between the main ARDOUR_UI modules and their respective classes.
23 This is to cut down on the compile times. It also helps with my sanity.
26 #include <ardour/session.h>
29 #include "ardour_ui.h"
30 #include "connection_editor.h"
31 #include "location_ui.h"
33 #include "option_editor.h"
34 #include "public_editor.h"
35 #include "route_params_ui.h"
37 #include "color_manager.h"
41 using namespace ARDOUR;
44 using namespace Gtkmm2ext;
47 ARDOUR_UI::connect_to_session (Session *s)
51 session->HaltOnXrun.connect (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message));
53 /* sensitize menu bar options that are now valid */
55 ActionManager::set_sensitive (ActionManager::session_sensitive_actions, true);
57 rec_button.set_sensitive (true);
58 shuttle_box.set_sensitive (true);
60 if (session->n_diskstreams() == 0) {
61 session->DiskStreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added));
64 if (connection_editor) {
65 connection_editor->set_session (s);
69 location_ui->set_session(s);
73 route_params->set_session (s);
77 option_editor->set_session (s);
81 sfdb->set_session (s);
86 Blink.connect (mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink));
87 Blink.connect (mem_fun(*this, &ARDOUR_UI::solo_blink));
88 Blink.connect (mem_fun(*this, &ARDOUR_UI::audition_blink));
90 /* these are all need to be handled in an RT-safe and MT way, so don't
91 do any GUI work, just queue it for handling by the GUI thread.
94 session->TransportStateChange.connect (mem_fun(*this, &ARDOUR_UI::queue_transport_change));
96 /* alert the user to these things happening */
98 session->AuditionActive.connect (mem_fun(*this, &ARDOUR_UI::auditioning_changed));
99 session->SoloActive.connect (mem_fun(*this, &ARDOUR_UI::soloing_changed));
101 solo_alert_button.set_active (session->soloing());
103 /* can't be auditioning here */
105 primary_clock.set_session (s);
106 secondary_clock.set_session (s);
107 big_clock.set_session (s);
108 preroll_clock.set_session (s);
109 postroll_clock.set_session (s);
111 /* Clocks are on by default after we are connected to a session, so show that here.
114 connect_dependents_to_session (s);
123 transport_stopped ();
125 second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_second), 1000);
126 point_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_one_seconds), 100);
127 point_zero_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_zero_one_seconds), 40);
131 ARDOUR_UI::unload_session ()
133 if (session && session->dirty()) {
134 switch (ask_about_saving_session (_("close session"))) {
139 session->save_state ("");
144 second_connection.disconnect ();
145 point_one_second_connection.disconnect ();
146 point_zero_one_second_connection.disconnect();
148 ActionManager::set_sensitive (ActionManager::session_sensitive_actions, false);
150 rec_button.set_sensitive (false);
151 shuttle_box.set_sensitive (false);
156 /* drop everything attached to the blink signal */
160 primary_clock.set_session (0);
161 secondary_clock.set_session (0);
162 big_clock.set_session (0);
163 preroll_clock.set_session (0);
164 postroll_clock.set_session (0);
167 option_editor->set_session (0);
177 update_buffer_load ();
178 // update_disk_rate ();
184 ARDOUR_UI::create_connection_editor ()
187 if (connection_editor == 0) {
188 connection_editor = new ConnectionEditor ();
189 connection_editor->signal_unmap().connect (sigc::bind (ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleConnections")));
193 connection_editor->set_session (session);
201 ARDOUR_UI::toggle_connection_editor ()
203 if (create_connection_editor()) {
208 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleConnections"));
210 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
212 if (tact->get_active()) {
213 connection_editor->show_all ();
214 connection_editor->present ();
216 connection_editor->hide ();
223 ARDOUR_UI::toggle_big_clock_window ()
225 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleBigClock"));
227 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
229 if (tact->get_active()) {
230 big_clock_window->show_all ();
231 big_clock_window->present ();
233 big_clock_window->hide ();
239 ARDOUR_UI::toggle_options_window ()
241 if (option_editor == 0) {
242 option_editor = new OptionEditor (*this, *editor, *mixer);
243 option_editor->signal_unmap().connect(sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleOptionsEditor")));
244 option_editor->set_session (session);
247 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleOptionsEditor"));
249 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
251 if (tact->get_active()) {
252 option_editor->show_all ();
253 option_editor->present ();
255 option_editor->hide ();
261 ARDOUR_UI::create_location_ui ()
263 if (location_ui == 0) {
264 location_ui = new LocationUI ();
265 location_ui->set_session (session);
266 location_ui->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleLocations")));
272 ARDOUR_UI::toggle_location_window ()
274 if (create_location_ui()) {
278 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleLocations"));
280 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
282 if (tact->get_active()) {
283 location_ui->show_all ();
284 location_ui->present ();
286 location_ui->hide ();
292 ARDOUR_UI::toggle_color_manager ()
294 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleColorManager"));
296 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
298 if (tact->get_active()) {
299 color_manager->show_all ();
300 color_manager->present ();
302 color_manager->hide ();
308 ARDOUR_UI::create_route_params ()
310 if (route_params == 0) {
311 route_params = new RouteParams_UI (*engine);
312 route_params->set_session (session);
313 route_params->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleInspector")));
319 ARDOUR_UI::toggle_route_params_window ()
321 if (create_route_params ()) {
325 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleInspector"));
327 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
329 if (tact->get_active()) {
330 route_params->show_all ();
331 route_params->present ();
333 route_params->hide ();
339 ARDOUR_UI::create_sound_file_browser ()
342 sfdb = new SoundFileBrowser (_("Sound File Browser"));
343 sfdb->set_session (session);
344 sfdb->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleSoundFileBrowser")));
350 ARDOUR_UI::toggle_sound_file_browser ()
352 if (create_sound_file_browser()) {
356 RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleSoundFileBrowser"));
358 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
360 if (tact->get_active()) {