remove UUIDs as implemention of PBD::ID, use static counter (not finished - counter...
[ardour.git] / gtk2_ardour / redirect_box.cc
index ea43d767450139ef52b62a3fa079eead21d7aaf5..f5cb9522e06caf72c237fe2a888d6dfa8414df74 100644 (file)
 */
 
 #include <cmath>
-#include <glib.h>
 
 #include <sigc++/bind.h>
 
+#include <pbd/convert.h>
+
 #include <gtkmm/messagedialog.h>
 
 #include <gtkmm2ext/gtk_ui.h>
@@ -37,7 +38,7 @@
 #include <ardour/audioengine.h>
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/send.h>
 #include <ardour/insert.h>
 #include <ardour/ladspa_plugin.h>
@@ -64,6 +65,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Gtkmm2ext;
@@ -243,7 +245,7 @@ RedirectBox::show_redirect_menu (gint arg)
 
        paste_action->set_sensitive (!_rr_selection.redirects.empty());
 
-       redirect_menu->popup (1, 0);
+       redirect_menu->popup (1, arg);
 }
 
 void
@@ -293,7 +295,7 @@ RedirectBox::redirect_button_press_event (GdkEventButton *ev)
                
        } else if (Keyboard::is_context_menu_event (ev)) {
 
-               show_redirect_menu(0);
+               show_redirect_menu(ev->time);
                ret = true;
 
        } else if (redirect && ev->button == 2 && ev->state == 0) {
@@ -302,7 +304,12 @@ RedirectBox::redirect_button_press_event (GdkEventButton *ev)
                ret = true;
 
        } 
+       else if (redirect && ev->button == 1 && selected) {
 
+               // this is purely informational but necessary
+               RedirectSelected (redirect); // emit
+       }
+       
        return ret;
 }
 
@@ -423,10 +430,6 @@ RedirectBox::wierd_plugin_dialog (Plugin& p, uint32_t streams, IO& io)
        dialog.set_modal (true);
        dialog.show_all ();
 
-       // GTK2FIX
-       //dialog.realize();
-       //dialog.get_window()->set_decorations (Gdk::WMDecoration (GDK_DECOR_BORDER|GDK_DECOR_RESIZEH));
-
        dialog.run ();
 }
 
@@ -539,7 +542,7 @@ RedirectBox::redirect_name (Redirect& redirect)
                        name_display += send->name().substr (lbracket+1, lbracket-rbracket-1);
                        break;
                case Narrow:
-                       name_display += short_version (send->name().substr (lbracket+1, lbracket-rbracket-1), 4);
+                       name_display += PBD::short_version (send->name().substr (lbracket+1, lbracket-rbracket-1), 4);
                        break;
                }
 
@@ -550,7 +553,7 @@ RedirectBox::redirect_name (Redirect& redirect)
                        name_display += redirect.name();
                        break;
                case Narrow:
-                       name_display += short_version (redirect.name(), 5);
+                       name_display += PBD::short_version (redirect.name(), 5);
                        break;
                }
 
@@ -741,33 +744,26 @@ RedirectBox::idle_delete_redirect (Redirect *redirect)
 void
 RedirectBox::rename_redirect (Redirect* redirect)
 {
-       ArdourDialog dialog (_("ardour: rename redirect"), true);
-       Entry  entry;
-       VBox   vbox;
-       HBox   hbox;
-       Button ok_button (_("OK"));
-       Button cancel_button (_("Cancel"));
-
-       dialog.set_name ("RedirectRenameWindow");
-       dialog.set_size_request (300, -1);
-       dialog.set_position (Gtk::WIN_POS_MOUSE);
-
-       dialog.add_action_widget (entry, RESPONSE_ACCEPT);
-       dialog.add_button (Stock::OK, RESPONSE_ACCEPT);
-       dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
-       
-       entry.set_name ("RedirectNameDisplay");
-       entry.set_text (redirect->name());
-       entry.select_region (0, -1);
-       entry.grab_focus ();
-
-       switch (dialog.run ()) {
-       case RESPONSE_ACCEPT:
-               redirect->set_name (entry.get_text(), this);
-               break;
-       default:
+       ArdourPrompter name_prompter (true);
+       string result;
+       name_prompter.set_prompt (_("rename redirect"));
+       name_prompter.set_initial_text (redirect->name());
+       name_prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
+       name_prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
+       name_prompter.show_all ();
+
+       switch (name_prompter.run ()) {
+
+       case Gtk::RESPONSE_ACCEPT:
+        name_prompter.get_result (result);
+        if (result.length()) {
+                       redirect->set_name (result, this);
+               }       
                break;
        }
+
+       return;
+  
 }
 
 void
@@ -904,22 +900,16 @@ RedirectBox::clear_redirects()
                           "(this cannot be undone)");
        }
 
-       choices.push_back (_("Yes, remove them all"));
        choices.push_back (_("Cancel"));
+       choices.push_back (_("Yes, remove them all"));
 
        Gtkmm2ext::Choice prompter (prompt, choices);
 
-       prompter.chosen.connect(sigc::ptr_fun(Gtk::Main::quit));
-       prompter.show_all ();
-
-       Gtk::Main::run ();
-
-       if (prompter.get_choice() == 0) {
+       if (prompter.run () == 1) {
                _route.clear_redirects (this);
        }
 }
 
-
 void
 RedirectBox::edit_redirect (Redirect* redirect)
 {