add rc-config widget to display text-config/paths (read only)
[ardour.git] / gtk2_ardour / route_ui.cc
index fd65b79eea5b443d30d91a52f11dea2678807504..8afa706e37c1a89586dc089c410c435f18708651 100644 (file)
@@ -54,6 +54,7 @@
 #include "ardour/filename_extensions.h"
 #include "ardour/midi_track.h"
 #include "ardour/internal_send.h"
+#include "ardour/profile.h"
 #include "ardour/send.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
@@ -545,9 +546,9 @@ RouteUI::solo_press(GdkEventButton* ev)
 
                                DisplaySuspender ds;
                                if (Config->get_solo_control_is_listen_control()) {
-                                       _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(),  Session::rt_cleanup, true);
+                                       _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(),  Session::rt_cleanup, false);
                                } else {
-                                       _session->set_solo (_session->get_routes(), !_route->self_soloed(),  Session::rt_cleanup, true);
+                                       _session->set_solo (_session->get_routes(), !_route->self_soloed(),  Session::rt_cleanup, false);
                                }
 
                        } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
@@ -596,8 +597,7 @@ RouteUI::solo_press(GdkEventButton* ev)
                                boost::shared_ptr<RouteList> rl;
 
                                if (ev->button == 1) {
-
-                                       if (_route->route_group()) {
+                                       if (ARDOUR::Profile->get_mixbus() && _route->route_group()) {
 
                                                rl = _route->route_group()->route_list();
 
@@ -654,9 +654,9 @@ RouteUI::solo_release (GdkEventButton* /*ev*/)
                } else {
                        DisplaySuspender ds;
                        if (Config->get_solo_control_is_listen_control()) {
-                               _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+                               _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, false);
                        } else {
-                               _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+                               _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, false);
                        }
                }
 
@@ -1729,6 +1729,12 @@ RouteUI::set_route_active (bool a, bool apply_to_selection)
        }
 }
 
+void
+RouteUI::duplicate_selected_routes ()
+{
+       ARDOUR_UI::instance()->start_duplicate_routes();
+}
+
 void
 RouteUI::toggle_denormal_protection ()
 {
@@ -1837,41 +1843,64 @@ RouteUI::adjust_latency ()
        LatencyDialog dialog (_route->name() + _(" latency"), *(_route->output()), _session->frame_rate(), AudioEngine::instance()->samples_per_cycle());
 }
 
-void
-RouteUI::save_as_template ()
+bool
+RouteUI::process_save_template_prompter (ArdourPrompter& prompter, const std::string& dir)
 {
        std::string path;
        std::string safe_name;
-       string name;
+       std::string name;
 
-       path = ARDOUR::user_route_template_directory ();
+       prompter.get_result (name, true);
 
-       if (g_mkdir_with_parents (path.c_str(), 0755)) {
-               error << string_compose (_("Cannot create route template directory %1"), path) << endmsg;
-               return;
+       safe_name = legalize_for_path (name);
+       safe_name += template_suffix;
+
+       path = Glib::build_filename (dir, safe_name);
+
+       if (Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
+               bool overwrite = overwrite_file_dialog (prompter,
+                                                       _("Confirm Template Overwrite"),
+                                                       _("A template already exists with that name. Do you want to overwrite it?"));
+
+               if (!overwrite) {
+                       return false;
+               }
        }
 
-       Prompter p (true); // modal
+       _route->save_as_template (path, name);
 
-       p.set_title (_("Save As Template"));
-       p.set_prompt (_("Template name:"));
-       p.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
-       switch (p.run()) {
-       case RESPONSE_ACCEPT:
-               break;
-       default:
+       return true;
+}
+
+void
+RouteUI::save_as_template ()
+{
+       std::string dir;
+
+       dir = ARDOUR::user_route_template_directory ();
+
+       if (g_mkdir_with_parents (dir.c_str(), 0755)) {
+               error << string_compose (_("Cannot create route template directory %1"), dir) << endmsg;
                return;
        }
 
-       p.hide ();
-       p.get_result (name, true);
+       ArdourPrompter prompter (true); // modal
 
-       safe_name = legalize_for_path (name);
-       safe_name += template_suffix;
-
-       path = Glib::build_filename (path, safe_name);
+       prompter.set_title (_("Save As Template"));
+       prompter.set_prompt (_("Template name:"));
+       prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
 
-       _route->save_as_template (path, name);
+       bool finished = false;
+       while (!finished) {
+               switch (prompter.run()) {
+               case RESPONSE_ACCEPT:
+                       finished = process_save_template_prompter (prompter, dir);
+                       break;
+               default:
+                       finished = true;
+                       break;
+               }
+       }
 }
 
 void
@@ -1961,7 +1990,7 @@ RouteUI::open_remote_control_id_dialog ()
                if (_route->is_master() || _route->is_monitor()) {
                        l->set_markup (string_compose (_("The remote control ID of %1 is: %2\n\n\n"
                                                         "The remote control ID of %3 cannot be changed."),
-                                                      Glib::Markup::escape_text (_route->name()),
+                                                      Gtkmm2ext::markup_escape_text (_route->name()),
                                                       _route->remote_control_id(),
                                                       (_route->is_master() ? _("the master bus") : _("the monitor bus"))));
                } else {
@@ -1972,7 +2001,7 @@ RouteUI::open_remote_control_id_dialog ()
                                                       _route->remote_control_id(),
                                                       "<span size=\"small\" style=\"italic\">",
                                                       "</span>",
-                                                      Glib::Markup::escape_text (_route->name()),
+                                                      Gtkmm2ext::markup_escape_text (_route->name()),
                                                       PROGRAM_NAME));
                }
                dialog.get_vbox()->pack_start (*l);