summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui_dialogs.cc
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/ardour_ui_dialogs.cc
parente4b9aed743fc765219ac775905a221c017c88fba (diff)
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui_dialogs.cc')
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc454
1 files changed, 454 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
new file mode 100644
index 0000000000..744a9bd031
--- /dev/null
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -0,0 +1,454 @@
+/*
+ Copyright (C) 2000 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/* This file contains any ARDOUR_UI methods that require knowledge of
+ the various dialog boxes, and exists so that no compilation dependency
+ exists between the main ARDOUR_UI modules and their respective classes.
+ This is to cut down on the compile times. It also helps with my sanity.
+*/
+
+#include <ardour/session.h>
+
+#include "ardour_ui.h"
+#include "mixer_ui.h"
+#include "meter_bridge.h"
+#include "connection_editor.h"
+#include "public_editor.h"
+#include "option_editor.h"
+#include "location_ui.h"
+#include "route_params_ui.h"
+#include "library_ui.h"
+
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace Gtk;
+using namespace Gtkmmext;
+
+void
+ARDOUR_UI::connect_to_session (Session *s)
+{
+ session = s;
+
+ session->HaltOnXrun.connect (slot (*this, &ARDOUR_UI::halt_on_xrun_message));
+
+ /* sensitize menu bar options that are now valid */
+
+// save_as_item->set_sensitive (true);
+ save_template_item->set_sensitive (true);
+ snapshot_item->set_sensitive (true);
+ save_item->set_sensitive (true);
+ add_track_item->set_sensitive (true);
+ export_item->set_sensitive (true);
+ close_item->set_sensitive (true);
+ locations_dialog_check->set_sensitive (true);
+ route_params_check->set_sensitive (true);
+ connection_editor_check->set_sensitive (true);
+
+ cleanup_item->set_sensitive (true);
+
+ /* sensitize transport bar */
+
+ goto_start_button.set_sensitive (true);
+ goto_end_button.set_sensitive (true);
+ roll_button.set_sensitive (true);
+ stop_button.set_sensitive (true);
+ play_selection_button.set_sensitive (true);
+ rec_button.set_sensitive (true);
+ auto_loop_button.set_sensitive (true);
+ shuttle_box.set_sensitive (true);
+
+ /* <CMT Additions> */
+ if (image_compositor_item) {
+ image_compositor_item->set_sensitive(true) ;
+ }
+ /* </CMT Additions> */
+
+
+ if (session->n_diskstreams()) {
+ // meter_bridge_dialog_check->set_sensitive (true);
+ } else {
+ session->DiskStreamAdded.connect (slot (*this, &ARDOUR_UI::diskstream_added));
+ }
+
+ if (connection_editor) {
+ connection_editor->set_session (s);
+ }
+
+ if (location_ui) {
+ location_ui->set_session(s);
+ }
+
+ if (route_params) {
+ route_params->set_session (s);
+ }
+
+ if (option_editor) {
+ option_editor->set_session (s);
+ }
+
+
+ Blink.connect (slot (*this, &ARDOUR_UI::transport_rec_enable_blink));
+ Blink.connect (slot (*this, &ARDOUR_UI::solo_blink));
+ Blink.connect (slot (*this, &ARDOUR_UI::audition_blink));
+
+ /* these are all need to be handled in an RT-safe and MT way, so don't
+ do any GUI work, just queue it for handling by the GUI thread.
+ */
+
+ session->TransportStateChange.connect (slot (*this, &ARDOUR_UI::queue_transport_change));
+ session->ControlChanged.connect (slot (*this, &ARDOUR_UI::queue_map_control_change));
+
+ /* alert the user to these things happening */
+
+ session->AuditionActive.connect (slot (*this, &ARDOUR_UI::auditioning_changed));
+ session->SoloActive.connect (slot (*this, &ARDOUR_UI::soloing_changed));
+
+ solo_alert_button.set_active (session->soloing());
+
+ /* can't be auditioning here */
+
+ primary_clock.set_session (s);
+ secondary_clock.set_session (s);
+ big_clock.set_session (s);
+ preroll_clock.set_session (s);
+ postroll_clock.set_session (s);
+
+ /* Clocks are on by default after we are connected to a session, so show that here.
+ */
+
+ map_button_state ();
+
+ connect_dependents_to_session (s);
+
+ start_clocking ();
+ start_blinking ();
+
+ if (editor) {
+ editor->window().realize();
+ }
+
+ transport_stopped ();
+
+ second_connection = Main::timeout.connect (slot (*this, &ARDOUR_UI::every_second), 1000);
+ point_one_second_connection = Main::timeout.connect (slot (*this, &ARDOUR_UI::every_point_one_seconds), 100);
+ point_zero_one_second_connection = Main::timeout.connect (slot (*this, &ARDOUR_UI::every_point_zero_one_seconds), 40);
+}
+
+int
+ARDOUR_UI::unload_session ()
+{
+ if (session && session->dirty()) {
+ switch (ask_about_saving_session (_("close session"))) {
+ case -1:
+ return 1;
+
+ case 1:
+ session->save_state ("");
+ break;
+ }
+ }
+
+ second_connection.disconnect ();
+ point_one_second_connection.disconnect ();
+ point_zero_one_second_connection.disconnect();
+
+ /* desensitize menu bar options that are now invalid */
+
+// save_as_item->set_sensitive (false);
+ save_template_item->set_sensitive (false);
+ snapshot_item->set_sensitive (false);
+ save_item->set_sensitive (false);
+ add_track_item->set_sensitive (false);
+ export_item->set_sensitive (false);
+ close_item->set_sensitive (false);
+ // meter_bridge_dialog_check->set_sensitive (false);
+ connection_editor_check->set_sensitive (false);
+ locations_dialog_check->set_sensitive (false);
+ // meter_bridge_dialog_check->set_active(false);
+ connection_editor_check->set_active(false);
+ locations_dialog_check->set_active(false);
+ route_params_check->set_sensitive (false);
+
+ /* desensitize transport bar */
+
+ goto_start_button.set_sensitive (false);
+ goto_end_button.set_sensitive (false);
+ roll_button.set_sensitive (false);
+ stop_button.set_sensitive (false);
+ play_selection_button.set_sensitive (false);
+ rec_button.set_sensitive (false);
+ auto_loop_button.set_sensitive (false);
+ shuttle_box.set_sensitive (false);
+
+ stop_blinking ();
+ stop_clocking ();
+
+ /* drop everything attached to the blink signal */
+
+ Blink.clear ();
+
+ primary_clock.set_session (0);
+ secondary_clock.set_session (0);
+ big_clock.set_session (0);
+ preroll_clock.set_session (0);
+ postroll_clock.set_session (0);
+
+ if (option_editor) {
+ option_editor->set_session (0);
+ }
+
+ if (mixer) {
+ mixer->hide_all ();
+ }
+
+ delete session;
+ session = 0;
+
+ update_buffer_load ();
+ // update_disk_rate ();
+
+ return 0;
+}
+
+int
+ARDOUR_UI::create_meter_bridge ()
+{
+ if (meter_bridge == 0) {
+ meter_bridge = new MeterBridge ();
+ meter_bridge->Hiding.connect (slot (*this, &ARDOUR_UI::meter_bridge_hiding));
+ }
+ return 0;
+}
+
+void
+ARDOUR_UI::meter_bridge_hiding()
+{
+ // meter_bridge_dialog_check->set_active(false);
+}
+
+int
+ARDOUR_UI::create_connection_editor ()
+{
+ if (connection_editor == 0) {
+ connection_editor = new ConnectionEditor ();
+ connection_editor->Hiding.connect (slot (*this, &ARDOUR_UI::connection_editor_hiding));
+ }
+
+ if (session) {
+ connection_editor->set_session (session);
+ }
+
+ return 0;
+}
+
+void
+ARDOUR_UI::toggle_connection_editor ()
+{
+ if (create_connection_editor()) {
+ return;
+ }
+
+ if (connection_editor->within_hiding()) {
+ return;
+ }
+
+
+ if (connection_editor_check->get_active()){
+ connection_editor->show_all();
+ } else {
+ connection_editor->hide_all();
+ }
+}
+
+void
+ARDOUR_UI::connection_editor_hiding()
+{
+ connection_editor_check->set_active(false);
+}
+
+void
+ARDOUR_UI::big_clock_hiding()
+{
+ big_clock_check->set_active(false);
+}
+
+void
+ARDOUR_UI::toggle_big_clock_window ()
+{
+ if (big_clock_window->within_hiding()) {
+ return;
+ }
+
+ if (big_clock_window->is_visible()) {
+ big_clock_window->hide_all ();
+ } else {
+ big_clock_window->show_all ();
+ }
+}
+
+void
+ARDOUR_UI::toggle_options_window ()
+{
+ if (option_editor == 0) {
+ option_editor = new OptionEditor (*this, *editor, *mixer);
+ option_editor->Hiding.connect(slot(*this, &ARDOUR_UI::option_hiding));
+ option_editor->set_session (session);
+ } else if (option_editor->within_hiding()) {
+ return;
+ }
+
+ if (option_editor->is_visible()) {
+ option_editor->hide_all ();
+ } else {
+ option_editor->show_all ();
+ }
+}
+
+void
+ARDOUR_UI::option_hiding ()
+{
+ options_window_check->set_active(false);
+}
+
+void
+ARDOUR_UI::toggle_auto_input ()
+
+{
+ toggle_some_session_state (auto_input_button,
+ &Session::get_auto_input,
+ &Session::set_auto_input);
+
+ meter_bridge->clear_all_meters ();
+}
+
+void
+ARDOUR_UI::toggle_metering ()
+{
+#if 0
+ if (global_meter_button.get_active()) {
+ meter_bridge->toggle_metering ();
+ }
+#endif
+}
+
+int
+ARDOUR_UI::create_location_ui ()
+{
+ if (location_ui == 0) {
+ location_ui = new LocationUI ();
+ location_ui->set_session (session);
+ location_ui->Hiding.connect (slot (*this, &ARDOUR_UI::location_ui_hiding));
+ }
+ return 0;
+}
+
+void
+ARDOUR_UI::toggle_location_window ()
+{
+ if (create_location_ui()) {
+ return;
+ }
+
+ if (location_ui->within_hiding()) {
+ return;
+ }
+
+ if (location_ui->is_visible()) {
+ location_ui->hide_all();
+ } else {
+ location_ui->show_all();
+ }
+}
+
+void
+ARDOUR_UI::location_ui_hiding()
+{
+ locations_dialog_check->set_active(false);
+}
+
+int
+ARDOUR_UI::create_route_params ()
+{
+ if (route_params == 0) {
+ route_params = new RouteParams_UI (*engine);
+ route_params->set_session (session);
+ route_params->Hiding.connect (slot (*this, &ARDOUR_UI::route_params_hiding));
+ }
+ return 0;
+}
+
+void
+ARDOUR_UI::toggle_route_params_window ()
+{
+ if (create_route_params ()) {
+ return;
+ }
+
+ if (route_params->within_hiding()) {
+ return;
+ }
+
+ if (route_params->is_visible ()) {
+ route_params->hide_all ();
+ } else {
+ route_params->show_all ();
+ }
+}
+
+void
+ARDOUR_UI::route_params_hiding ()
+{
+ route_params_check->set_active (false);
+}
+
+SoundFileSelector&
+ARDOUR_UI::get_sfdb_window ()
+{
+ if (sfdb_window == 0) {
+ sfdb_window = new SoundFileSelector ();
+ sfdb_window->Hiding.connect (slot (*this, &ARDOUR_UI::sfdb_hiding));
+ sfdb_window->hide_all ();
+ }
+
+ return *sfdb_window;
+}
+
+void
+ARDOUR_UI::toggle_sfdb_window ()
+{
+ get_sfdb_window ();
+
+ if (sfdb_window->within_hiding()) {
+ return;
+ }
+
+ if (sfdb_window->is_visible ()) {
+ sfdb_window->hide_all ();
+ } else {
+ sfdb_window->show_all ();
+ sfdb_window->hide_import_stuff();
+ }
+}
+
+void
+ARDOUR_UI::sfdb_hiding ()
+{
+ sfdb_check->set_active (false);
+}