remove all trace of SAE from source code.
[ardour.git] / gtk2_ardour / ardour_ui.cc
index bd2b437c2b98be85d381c2206cc8601c2c079c3b..cadb71ebfd32c2589810d37b138e285f16b07ae2 100644 (file)
@@ -238,6 +238,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , secondary_clock (new MainClock (X_("secondary"), X_("secondary"), false))
        , big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false))
        , video_timeline(0)
+       , global_actions (X_("global"))
        , ignore_dual_punch (false)
        , editor (0)
        , mixer (0)
@@ -269,7 +270,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , meterbridge (0)
        , rc_option_editor (0)
        , speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
-       , key_editor (X_("key-editor"), _("Key Bindings"))
        , add_route_dialog (X_("add-routes"), _("Add Tracks/Busses"))
        , about (X_("about"), _("About"))
        , location_ui (X_("locations"), _("Locations"))
@@ -277,11 +277,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , audio_midi_setup (X_("audio-midi-setup"), _("Audio/MIDI Setup"))
        , export_video_dialog (X_("video-export"), _("Video Export Dialog"))
        , session_option_editor (X_("session-options-editor"), _("Properties"), boost::bind (&ARDOUR_UI::create_session_option_editor, this))
-       , add_video_dialog (X_("add-video"), _("Add Tracks/Busses"), boost::bind (&ARDOUR_UI::create_add_video_dialog, this))
+       , add_video_dialog (X_("add-video"), _("Add Video"), boost::bind (&ARDOUR_UI::create_add_video_dialog, this))
        , bundle_manager (X_("bundle-manager"), _("Bundle Manager"), boost::bind (&ARDOUR_UI::create_bundle_manager, this))
        , big_clock_window (X_("big-clock"), _("Big Clock"), boost::bind (&ARDOUR_UI::create_big_clock_window, this))
        , audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO))
        , midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI))
+       , key_editor (X_("key-editor"), _("Bindings Editor"), boost::bind (&ARDOUR_UI::create_key_editor, this))
        , video_server_process (0)
        , splash (0)
        , have_configure_timeout (false)
@@ -429,7 +430,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        }
 
        /* Separate windows */
-       
+
        WM::Manager::instance().register_window (&key_editor);
        WM::Manager::instance().register_window (&session_option_editor);
        WM::Manager::instance().register_window (&speaker_config_window);
@@ -584,22 +585,32 @@ ARDOUR_UI::post_engine ()
 
        check_memory_locking();
 
-       /* this is the first point at which all the keybindings are available */
+       /* this is the first point at which all the possible actions are
+        * available, because some of the available actions are dependent on
+        * aspects of the engine/backend.
+        */
 
        if (ARDOUR_COMMAND_LINE::show_key_actions) {
-               vector<string> names;
+
+
                vector<string> paths;
+               vector<string> labels;
                vector<string> tooltips;
                vector<string> keys;
-               vector<AccelKey> bindings;
+               vector<Glib::RefPtr<Gtk::Action> > actions;
 
-               ActionManager::get_all_actions (names, paths, tooltips, keys, bindings);
+               Gtkmm2ext::ActionMap::get_all_actions (paths, labels, tooltips, keys, actions);
 
-               vector<string>::iterator n;
                vector<string>::iterator k;
                vector<string>::iterator p;
-               for (n = names.begin(), k = keys.begin(), p = paths.begin(); n != names.end(); ++n, ++k, ++p) {
-                       cout << "Action: '" << (*n) << "' bound to '" << (*k) << "' Path: '" << (*p) << "'" << endl;
+
+               for (p = paths.begin(), k = keys.begin(); p != paths.end(); ++k, ++p) {
+
+                       if ((*k).empty()) {
+                               cout << *p << endl;
+                       } else {
+                               cout << *p << " => " << *k << endl;
+                       }
                }
 
                halt_connection.disconnect ();
@@ -614,13 +625,8 @@ ARDOUR_UI::post_engine ()
 
        /* set default clock modes */
 
-       if (Profile->get_sae()) {
-               primary_clock->set_mode (AudioClock::BBT);
-               secondary_clock->set_mode (AudioClock::MinSec);
-       }  else {
-               primary_clock->set_mode (AudioClock::Timecode);
-               secondary_clock->set_mode (AudioClock::BBT);
-       }
+       primary_clock->set_mode (AudioClock::Timecode);
+       secondary_clock->set_mode (AudioClock::BBT);
 
        /* start the time-of-day-clock */
 
@@ -859,6 +865,13 @@ ARDOUR_UI::check_announcements ()
 #endif
 }
 
+static bool
+_hide_splash (gpointer arg)
+{
+       ((ARDOUR_UI*)arg)->hide_splash();
+       return false;
+}
+
 int
 ARDOUR_UI::starting ()
 {
@@ -1039,6 +1052,14 @@ ARDOUR_UI::starting ()
        _status_bar_visibility.update ();
 
        BootMessage (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
+
+       if (splash && splash->is_visible()) {
+               // in 1 second, hide the splash screen
+               Glib::signal_timeout().connect (sigc::bind (sigc::ptr_fun (_hide_splash), this), 1000);
+       }
+
+       /* all other dialogs are created conditionally */
+
        return 0;
 }
 
@@ -1680,8 +1701,8 @@ ARDOUR_UI::check_audioengine (Gtk::Window& parent)
 {
        if (!AudioEngine::instance()->connected()) {
                MessageDialog msg (parent, string_compose (
-                                          _("%1 is not connected to any audio backend.\n"
-                                            "You cannot open or close sessions in this condition"),
+                                          _("%1 is not connected to any audio backend.\n"
+                                            "You cannot open or close sessions in this condition"),
                                           PROGRAM_NAME));
                pop_back_splash (msg);
                msg.run ();
@@ -1693,7 +1714,7 @@ ARDOUR_UI::check_audioengine (Gtk::Window& parent)
 void
 ARDOUR_UI::open_session ()
 {
-       if (!check_audioengine(*editor)) {
+       if (!check_audioengine (_main_window)) {
                return;
        }
 
@@ -2747,7 +2768,7 @@ ARDOUR_UI::save_template ()
 {
        ArdourPrompter prompter (true);
 
-       if (!check_audioengine(*editor)) {
+       if (!check_audioengine (_main_window)) {
                return;
        }
 
@@ -2819,7 +2840,7 @@ ARDOUR_UI::build_session_from_dialog (SessionDialog& sd, const std::string& sess
 {
        BusProfile bus_profile;
 
-       if (nsm || Profile->get_sae()) {
+       if (nsm) {
 
                bus_profile.master_out_channels = 2;
                bus_profile.input_ac = AutoConnectPhysical;
@@ -3155,7 +3176,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
 void
 ARDOUR_UI::close_session()
 {
-       if (!check_audioengine(*editor)) {
+       if (!check_audioengine (_main_window)) {
                return;
        }
 
@@ -4809,11 +4830,6 @@ ARDOUR_UI::setup_profile ()
                Profile->set_small_screen ();
        }
 
-       if (g_getenv ("ARDOUR_SAE")) {
-               Profile->set_sae ();
-               Profile->set_single_package ();
-       }
-
        if (g_getenv ("TRX")) {
                Profile->set_trx ();
        }
@@ -5104,7 +5120,7 @@ ARDOUR_UI::setup_toplevel_window (Gtk::Window& window, const string& name, void*
        if (!window_icons.empty()) {
                window.set_default_icon_list (window_icons);
        }
-       
+
        Gtkmm2ext::WindowTitle title (Glib::get_application_name());
 
        if (!name.empty()) {
@@ -5138,15 +5154,15 @@ ARDOUR_UI::key_event_handler (GdkEventKey* ev, Gtk::Window* event_window)
        /* until we get ardour bindings working, we are not handling key
         * releases yet.
         */
-       
+
        if (ev->type != GDK_KEY_PRESS) {
                return false;
        }
-       
+
        if (event_window == &_main_window) {
 
                window = event_window;
-               
+
                /* find current tab contents */
 
                Gtk::Widget* w = _tabs.get_nth_page (_tabs.get_current_page());
@@ -5155,29 +5171,28 @@ ARDOUR_UI::key_event_handler (GdkEventKey* ev, Gtk::Window* event_window)
 
                if (w) {
                        bindings = reinterpret_cast<Gtkmm2ext::Bindings*>(w->get_data ("ardour-bindings"));
-               } else {
-                       bindings = &_global_bindings;
                }
 
-       } else if (event_window != 0) {
+               DEBUG_TRACE (DEBUG::Accelerators, string_compose ("main window key event, bindings = %1, global = %2\n", bindings, &global_bindings));
+
+       } else {
 
                window = event_window;
-               
+
                /* see if window uses ardour binding system */
 
                bindings = reinterpret_cast<Gtkmm2ext::Bindings*>(window->get_data ("ardour-bindings"));
-               
-       } 
+       }
 
        /* An empty binding set is treated as if it doesn't exist */
-       
+
        if (bindings && bindings->empty()) {
                bindings = 0;
        }
-       
+
        return key_press_focus_accelerator_handler (*window, ev, bindings);
 }
-                       
+
 bool
 ARDOUR_UI::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings* bindings)
 {
@@ -5192,14 +5207,14 @@ ARDOUR_UI::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey
         Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator(modifier);
 
         if (focus) {
-               
+
                /* some widget has keyboard focus */
 
                if (GTK_IS_ENTRY(focus) || Keyboard::some_magic_widget_has_focus()) {
 
                        /* A particular kind of focusable widget currently has keyboard
                         * focus. All unmodified key events should go to that widget
-                        * first and not be used as an accelerator by default 
+                        * first and not be used as an accelerator by default
                         */
 
                        special_handling_of_unmodified_accelerators = true;
@@ -5246,9 +5261,9 @@ ARDOUR_UI::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey
           all "normal text" accelerators.
        */
 
-               
+
        if (!special_handling_of_unmodified_accelerators || (ev->state & mask)) {
-               
+
                /* no special handling or there are modifiers in effect: accelerate first */
 
                 DEBUG_TRACE (DEBUG::Accelerators, "\tactivate, then propagate\n");
@@ -5256,99 +5271,88 @@ ARDOUR_UI::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey
                                                                  ev->send_event, ev->time, ev->length, ev->string, ev->hardware_keycode, ev->group, gdk_keyval_name (ev->keyval)));
 
                DEBUG_TRACE (DEBUG::Accelerators, "\tsending to window\n");
+               KeyboardKey k (ev->state, ev->keyval);
 
                if (bindings) {
 
-                       DEBUG_TRACE (DEBUG::Accelerators, "\tusing Ardour bindings for this window\n");
-                       KeyboardKey k (ev->state, ev->keyval);
-                       
+                       DEBUG_TRACE (DEBUG::Accelerators, string_compose ("\tusing Ardour bindings %1 for this event\n", bindings));
+
                        if (bindings->activate (k, Bindings::Press)) {
                                DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n");
                                return true;
                        }
                }
 
-               if (try_gtk_accel_binding (win, ev, !special_handling_of_unmodified_accelerators, modifier)) {
+               DEBUG_TRACE (DEBUG::Accelerators, "\tnot yet handled, try global bindings\n");
+
+               if (global_bindings && global_bindings->activate (k, Bindings::Press)) {
                        DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n");
                        return true;
                }
 
-               
                 DEBUG_TRACE (DEBUG::Accelerators, "\tnot accelerated, now propagate\n");
-                
+
                 if (gtk_window_propagate_key_event (win, ev)) {
                        DEBUG_TRACE (DEBUG::Accelerators, "\tpropagate handled\n");
                        return true;
                 }
 
        } else {
-               
+
                /* no modifiers, propagate first */
-               
+
                DEBUG_TRACE (DEBUG::Accelerators, "\tpropagate, then activate\n");
-               
+
                if (gtk_window_propagate_key_event (win, ev)) {
                        DEBUG_TRACE (DEBUG::Accelerators, "\thandled by propagate\n");
                        return true;
                }
 
                DEBUG_TRACE (DEBUG::Accelerators, "\tpropagation didn't handle, so activate\n");
-               
+               KeyboardKey k (ev->state, ev->keyval);
+
                if (bindings) {
-                       
+
                        DEBUG_TRACE (DEBUG::Accelerators, "\tusing Ardour bindings for this window\n");
-                       KeyboardKey k (ev->state, ev->keyval);
-                       
+
+
                        if (bindings->activate (k, Bindings::Press)) {
                                DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n");
                                return true;
                        }
-                       
-               } 
-               
-               DEBUG_TRACE (DEBUG::Accelerators, "\tnot yet handled, try GTK bindings\n");
-               
-               if (try_gtk_accel_binding (win, ev, !special_handling_of_unmodified_accelerators, modifier)) {
+
+               }
+
+               DEBUG_TRACE (DEBUG::Accelerators, "\tnot yet handled, try global bindings\n");
+
+               if (global_bindings && global_bindings->activate (k, Bindings::Press)) {
                        DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n");
                        return true;
                }
        }
 
-       DEBUG_TRACE (DEBUG::Accelerators, "\tnot yet handled, try global bindings\n");
-       
-       KeyboardKey k (ev->state, ev->keyval);
-       
-       if (_global_bindings.activate (k, Bindings::Press)) {
-               DEBUG_TRACE (DEBUG::Accelerators, "\t\thandled\n");
-               return true;
-       }
-
        DEBUG_TRACE (DEBUG::Accelerators, "\tnot handled\n");
        return true;
 }
 
-bool
-ARDOUR_UI::try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier)
+void
+ARDOUR_UI::load_bindings ()
 {
-       uint32_t fakekey = ev->keyval;
-
-       if (translate) {
-               
-               /* pretend that certain key events that GTK does not allow
-                  to be used as accelerators are actually something that
-                  it does allow. but only where there are no modifiers.
-               */
+       if ((global_bindings = Bindings::get_bindings ("global", global_actions)) == 0) {
+               error << _("Global keybindings are missing") << endmsg;
+       }
+}
 
-               if (Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (fakekey)) {
-                       DEBUG_TRACE (DEBUG::Accelerators, string_compose ("\tactivate (was %1 now %2) without special hanlding of unmodified accels, modifier was %3\n",
-                                                                         ev->keyval, fakekey, show_gdk_event_state (modifier)));
+void
+ARDOUR_UI::cancel_solo ()
+{
+       if (_session) {
+               if (_session->soloing()) {
+                       _session->set_solo (_session->get_routes(), false);
+               } else if (_session->listening()) {
+                       _session->set_listen (_session->get_routes(), false);
                }
-       }
-                       
-       if (gtk_accel_groups_activate (G_OBJECT(win), fakekey, modifier)) {
-               DEBUG_TRACE (DEBUG::Accelerators, "\tGTK accel group activated\n");
-               return true;
-       }
 
-       return false;
+               _session->clear_all_solo_state (_session->get_routes()); // safeguard, ideally this won't do anything, check the log-window
+       }
 }