add support for reverb & chorus in a-fluidsynth
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 22be829f2ba54e324be4d9cdf3a228344432d9bb..f28913bab3a0ef642935602384d45ff50b23e934 100644 (file)
@@ -177,7 +177,7 @@ typedef uint64_t microseconds_t;
 #include "add_video_dialog.h"
 #include "transcode_video_dialog.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace ARDOUR_UI_UTILS;
@@ -491,6 +491,10 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        /* do not retain position for add route dialog */
        add_route_dialog.set_state_mask (WindowProxy::Size);
 
+       /* Trigger setting up the color scheme and loading the GTK RC file */
+
+       UIConfiguration::instance().load_rc_file (false);
+
        _process_thread = new ProcessThread ();
        _process_thread->init ();
 
@@ -1280,6 +1284,8 @@ If you still wish to quit, please use the\n\n\
        */
        save_ardour_state ();
 
+       key_editor->disconnect ();
+
        close_all_dialogs ();
 
        if (_session) {
@@ -2302,7 +2308,12 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
        if (affect_transport) {
                if (rolling) {
                        _session->request_stop (with_abort, true);
-               } else {
+
+               } else if (!with_abort) { /* with_abort == true means the
+                                          * command was intended to stop
+                                          * transport, not start.
+                                          */
+
                        /* the only external sync condition we can be in here
                         * would be Engine (JACK) sync, in which case we still
                         * want to do this.
@@ -3500,7 +3511,7 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
 
        {
                Timers::TimerSuspender t;
-               flush_pending ();
+               flush_pending (10);
        }
 
 #ifdef WINDOWS_VST_SUPPORT
@@ -3565,6 +3576,11 @@ ARDOUR_UI::build_session (const std::string& path, const std::string& snap_name,
                new_session->add_instant_xml (*n, false);
        }
 
+       n = Config->instant_xml (X_("Preferences"));
+       if (n) {
+               new_session->add_instant_xml (*n, false);
+       }
+
        /* Put the playhead at 0 and scroll fully left */
        n = new_session->instant_xml (X_("Editor"));
        if (n) {
@@ -3955,7 +3971,7 @@ ARDOUR_UI::cleanup_peakfiles ()
 }
 
 PresentationInfo::order_t
-ARDOUR_UI::translate_order (AddRouteDialog::InsertAt place)
+ARDOUR_UI::translate_order (RouteDialogs::InsertAt place)
 {
        if (editor->get_selection().tracks.empty()) {
                return PresentationInfo::max_order;
@@ -3968,18 +3984,18 @@ ARDOUR_UI::translate_order (AddRouteDialog::InsertAt place)
          the highest order key in the selection + 1 (if available).
        */
 
-       if (place == AddRouteDialog::AfterSelection) {
+       if (place == RouteDialogs::AfterSelection) {
                RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView*> (editor->get_selection().tracks.back());
                if (rtav) {
                        order_hint = rtav->route()->presentation_info().order();
                        order_hint++;
                }
-       } else if (place == AddRouteDialog::BeforeSelection) {
+       } else if (place == RouteDialogs::BeforeSelection) {
                RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView*> (editor->get_selection().tracks.front());
                if (rtav) {
                        order_hint = rtav->route()->presentation_info().order();
                }
-       } else if (place == AddRouteDialog::First) {
+       } else if (place == RouteDialogs::First) {
                order_hint = 0;
        } else {
                /* leave order_hint at max_order */
@@ -4047,9 +4063,9 @@ ARDOUR_UI::add_route_dialog_finished (int r)
 
        if (!template_path.empty()) {
                if (add_route_dialog->name_template_is_default())  {
-                       _session->new_route_from_template (count, template_path, string());
+                       _session->new_route_from_template (count, order, template_path, string());
                } else {
-                       _session->new_route_from_template (count, template_path, add_route_dialog->name_template());
+                       _session->new_route_from_template (count, order, template_path, add_route_dialog->name_template());
                }
                return;
        }
@@ -4535,6 +4551,24 @@ ARDOUR_UI::export_video (bool range)
        export_video_dialog->hide ();
 }
 
+XMLNode*
+ARDOUR_UI::preferences_settings () const
+{
+       XMLNode* node = 0;
+
+       if (_session) {
+               node = _session->instant_xml(X_("Preferences"));
+       } else {
+               node = Config->instant_xml(X_("Preferences"));
+       }
+
+       if (!node) {
+               node = new XMLNode (X_("Preferences"));
+       }
+
+       return node;
+}
+
 XMLNode*
 ARDOUR_UI::mixer_settings () const
 {
@@ -5365,16 +5399,16 @@ ARDOUR_UI::setup_toplevel_window (Gtk::Window& window, const string& name, void*
 
        if (window_icons.empty()) {
                Glib::RefPtr<Gdk::Pixbuf> icon;
-               if ((icon = ::get_icon (PROGRAM_NAME "-icon_16px")) != 0) {
+               if ((icon = ::get_icon (PROGRAM_NAME "-icon_16px"))) {
                        window_icons.push_back (icon);
                }
-               if ((icon = ::get_icon (PROGRAM_NAME "-icon_22px")) != 0) {
+               if ((icon = ::get_icon (PROGRAM_NAME "-icon_22px"))) {
                        window_icons.push_back (icon);
                }
-               if ((icon = ::get_icon (PROGRAM_NAME "-icon_32px")) != 0) {
+               if ((icon = ::get_icon (PROGRAM_NAME "-icon_32px"))) {
                        window_icons.push_back (icon);
                }
-               if ((icon = ::get_icon (PROGRAM_NAME "-icon_48px")) != 0) {
+               if ((icon = ::get_icon (PROGRAM_NAME "-icon_48px"))) {
                        window_icons.push_back (icon);
                }
        }
@@ -5504,7 +5538,7 @@ ARDOUR_UI::key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey
         DEBUG_TRACE (DEBUG::Accelerators, string_compose ("Win = %1 [title = %9] focus = %7 (%8) Key event: code = %2  state = %3 special handling ? %4 magic widget focus ? %5 focus widget %6 named %7 mods ? %8\n",
                                                           win,
                                                           ev->keyval,
-                                                         show_gdk_event_state (ev->state),
+                                                         Gtkmm2ext::show_gdk_event_state (ev->state),
                                                           special_handling_of_unmodified_accelerators,
                                                           Keyboard::some_magic_widget_has_focus(),
                                                          focus,
@@ -5629,9 +5663,6 @@ void
 ARDOUR_UI::cancel_solo ()
 {
        if (_session) {
-               if (_session) {
-                       _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_control), 0.0, Controllable::NoGroup);
-               }
-               _session->clear_all_solo_state (_session->get_routes()); // safeguard, ideally this won't do anything, check the log-window
+               _session->cancel_all_solo ();
        }
 }