ripping, tearing, shredding
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 27 Nov 2005 17:59:03 +0000 (17:59 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 27 Nov 2005 17:59:03 +0000 (17:59 +0000)
git-svn-id: svn://localhost/trunk/ardour2@130 d708f5d6-7413-0410-9779-e7cbd77b26cf

12 files changed:
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui2.cc
gtk2_ardour/ardour_ui_dependents.cc
gtk2_ardour/ardour_ui_dialogs.cc
gtk2_ardour/keyboard.cc
gtk2_ardour/keyboard.h
gtk2_ardour/mixer_ui.cc
gtk2_ardour/plugin_selector.cc
gtk2_ardour/plugin_selector.h
gtk2_ardour/redirect_box.cc
gtk2_ardour/redirect_box.h

index cb41fc652e90b95670b4eba0e8c97d1744766185..cae22667e806ab41292adeb57e5c7ee2a59d842f 100644 (file)
@@ -847,7 +847,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        connection_editor = 0;
        add_route_dialog = 0;
        route_params = 0;
-       meter_bridge = 0;
        option_editor = 0;
        location_ui = 0;
        open_session_selector = 0;
@@ -1897,7 +1896,6 @@ restart JACK with more ports."));
 void
 ARDOUR_UI::diskstream_added (DiskStream* ds)
 {
-       // meter_bridge_dialog_check->set_sensitive (true);
 }
 
 void
index 38cbfc5fb64a42728cf008b2d36dd5a1d1295405..5b261a9ef36b4f97f9eed78a6085cf1cd6110e70 100644 (file)
@@ -205,7 +205,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
   protected:
        friend class PublicEditor;
 
-       void toggle_metering ();
        void toggle_clocking ();
        void toggle_auto_play ();
        void toggle_auto_input ();
@@ -329,9 +328,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        void         start_clocking ();
        void         stop_clocking ();
 
-       AudioClock               big_clock;
-       Gtk::Frame               big_clock_frame;
-       ArdourDialog*          big_clock_window;
+       void manage_window (Gtk::Window&);
+       
+       AudioClock   big_clock;
+       Gtk::Frame   big_clock_frame;
+       Gtk::Window* big_clock_window;
 
        /* Transport Control */
 
index 64f85c019251ef6b9ce7f18354603394d1740112..90eee48557264782502903be7d8ce5fc05e08d89 100644 (file)
@@ -66,11 +66,6 @@ ARDOUR_UI::setup_windows ()
                return -1;
        }
 
-       if (create_meter_bridge ()) {
-               error << _("UI: cannot setup meter_bridge") << endmsg;
-               return -1;
-       }
-
        /* all other dialogs are created conditionally */
 
        we_have_dependents ();
@@ -425,16 +420,24 @@ ARDOUR_UI::setup_clock ()
 {
        ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
        
-       big_clock_window = new ArdourDialog ("big clock window");
+       big_clock_window = new Gtk::Window (WINDOW_TOPLEVEL);
        
        big_clock_window->set_border_width (0);
        big_clock_window->add  (big_clock);
        big_clock_window->set_title (_("ardour: clock"));
        big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
+       big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window,  (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
+       big_clock_window->signal_unmap().connect (mem_fun(*this, &ARDOUR_UI::big_clock_hiding));
 
-       big_clock_window->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Gtk::Window*>(big_clock_window)));
+       manage_window (*big_clock_window);
+}
 
-       big_clock_window->signal_unmap().connect (mem_fun(*this, &ARDOUR_UI::big_clock_hiding));
+void
+ARDOUR_UI::manage_window (Window& win)
+{
+       win.signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), &win));
+       win.signal_enter_notify_event().connect (bind (mem_fun (Keyboard::the_keyboard(), &Keyboard::enter_window), &win));
+       win.signal_leave_notify_event().connect (bind (mem_fun (Keyboard::the_keyboard(), &Keyboard::leave_window), &win));
 }
 
 void
index f2b41bd47a4d39ab3caef2acb2f8dcac8e711b24..cd6a5c5a1e19b565a65083f0498c0c6ca3c4233b 100644 (file)
@@ -27,7 +27,6 @@
 #include "ardour_ui.h"
 #include "public_editor.h"
 #include "mixer_ui.h"
-#include "meter_bridge.h"
 #include "keyboard.h"
 #include "route_params_ui.h"
 #include "i18n.h"
@@ -68,8 +67,6 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
 {
        editor->connect_to_session (s);
        mixer->connect_to_session (s);
-
-       meter_bridge->set_session (s);
 }
 
 void
index 9caf2396b2985c02ea9dcf63f00413bd7dcb2b1d..c524e15526918c291613757576fbd8c3300ece9e 100644 (file)
@@ -28,7 +28,6 @@
 #include "ardour_ui.h"
 #include "connection_editor.h"
 #include "location_ui.h"
-#include "meter_bridge.h"
 #include "mixer_ui.h"
 #include "option_editor.h"
 #include "public_editor.h"
@@ -81,9 +80,7 @@ ARDOUR_UI::connect_to_session (Session *s)
        /* </CMT Additions> */
        
 
-       if (session->n_diskstreams()) {
-               // meter_bridge_dialog_check->set_sensitive (true);
-       } else {
+       if (session->n_diskstreams() == 0) {
                session->DiskStreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added));
        }
 
@@ -178,10 +175,8 @@ ARDOUR_UI::unload_session ()
        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);
@@ -282,14 +277,10 @@ ARDOUR_UI::big_clock_hiding()
 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 ();
+               big_clock_window->hide ();
        } else {
-               big_clock_window->show_all ();
+               big_clock_window->present ();
        }
 }
 
@@ -305,9 +296,9 @@ ARDOUR_UI::toggle_options_window ()
        }
 
        if (option_editor->is_visible()) {
-               option_editor->hide_all ();
+               option_editor->hide ();
        } else {
-               option_editor->show_all ();
+               option_editor->present ();
        }
 }
 
@@ -324,18 +315,6 @@ 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
@@ -361,9 +340,9 @@ ARDOUR_UI::toggle_location_window ()
        }
 
        if (location_ui->is_visible()) {
-               location_ui->hide_all();
+               location_ui->hide();
        } else {
-               location_ui->show_all();
+               location_ui->present();
        }
 }
 
@@ -396,9 +375,9 @@ ARDOUR_UI::toggle_route_params_window ()
        }
 
        if (route_params->is_visible ()) {
-               route_params->hide_all ();
+               route_params->hide ();
        } else {
-               route_params->show_all ();
+               route_params->present ();
        }
 }
        
index 3e187f15d3902e64c6ef60a24bc0d2857b203050..de2039620bbd110815be84aca150ab935e724dad 100644 (file)
@@ -657,7 +657,7 @@ Keyboard::get_modifier_masks ()
 }
 
 bool
-Keyboard::enter_window (GdkEventCrossing *ev)
+Keyboard::enter_window (GdkEventCrossing *ev, Gtk::Window* win)
 {
        switch (ev->detail) {
        case GDK_NOTIFY_INFERIOR:
@@ -674,7 +674,7 @@ Keyboard::enter_window (GdkEventCrossing *ev)
 }
 
 bool
-Keyboard::leave_window (GdkEventCrossing *ev)
+Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win)
 {
        switch (ev->detail) {
        case GDK_NOTIFY_INFERIOR:
index 8e1c0f1b939ff3cfe21d40445d23f497c39cbc83..9178546c8e12d8dc549c6b5196e83ad9d6fa8047 100644 (file)
@@ -65,8 +65,8 @@ class Keyboard : public sigc::trackable, Stateful
                return (ev->state & RelevantModifierKeyMask) == 0;
        }
 
-       bool leave_window (GdkEventCrossing *ev);
-       bool enter_window (GdkEventCrossing *ev);
+       bool leave_window (GdkEventCrossing *ev, Gtk::Window*);
+       bool enter_window (GdkEventCrossing *ev, Gtk::Window*);
 
        static bool modifier_state_contains (guint state, ModifierMask);
        static bool modifier_state_equals   (guint state, ModifierMask);
index a67728b03796f27b3fd0594cec263d4c50f5ce1e..364f7b0f3ef5b3df477562a985b4323f1fb287f8 100644 (file)
@@ -167,8 +167,6 @@ Mixer_UI::Mixer_UI (AudioEngine& eng)
        snapshot_display.signal_button_press_event().connect (mem_fun (*this, &Mixer_UI::snapshot_display_button_press));
 
        _plugin_selector = new PluginSelector (PluginManager::the_manager());
-       _plugin_selector->signal_delete_event().connect (bind (ptr_fun (just_hide_it), 
-                                                    static_cast<Window *> (_plugin_selector)));
 
        signal_configure_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
 
index f2a32321d09e5624e6b98132edc4ba8326f4da2d..d74b46f74f43c3ff56c60bb4cacd68987181ba27 100644 (file)
@@ -21,6 +21,7 @@
 #include <lrdf.h>
 
 #include <gtkmm/table.h>
+#include <gtkmm/stock.h>
 #include <gtkmm/button.h>
 #include <gtkmm/notebook.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace Gtk;
 
 PluginSelector::PluginSelector (PluginManager *mgr)
-       : ArdourDialog ("plugin selector")
+       : Dialog (_("ardour: plugins"), true, false)
 {
        set_position (Gtk::WIN_POS_MOUSE);
        set_name ("PluginSelectorWindow");
-       set_title (_("ardour: plugins"));
-       set_modal(true);
        add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
 
        manager = mgr;
@@ -89,14 +89,9 @@ PluginSelector::PluginSelector (PluginManager *mgr)
        ARDOUR_UI::instance()->tooltips().set_tip(*btn_add, _("Add a plugin to the effect list"));
        Gtk::Button *btn_remove = manage(new Gtk::Button(_("Remove")));
        ARDOUR_UI::instance()->tooltips().set_tip(*btn_remove, _("Remove a plugin from the effect list"));
-       Gtk::Button *btn_ok = manage(new Gtk::Button(_("OK")));
-       Gtk::Button *btn_cancel = manage(new Gtk::Button(_("Cancel")));
-
        Gtk::Button *btn_update = manage(new Gtk::Button(_("Update")));
        ARDOUR_UI::instance()->tooltips().set_tip(*btn_update, _("Update available plugins"));
 
-       btn_ok->set_name("PluginSelectorButton");
-       btn_cancel->set_name("PluginSelectorButton");
        btn_add->set_name("PluginSelectorButton");
        btn_remove->set_name("PluginSelectorButton");
        
@@ -109,9 +104,11 @@ PluginSelector::PluginSelector (PluginManager *mgr)
        table->attach(*btn_update, 5, 6, 5, 6, Gtk::FILL, Gtk::FILL, 5, 5);
 
        table->attach(added_list, 0, 7, 7, 9);
-       table->attach(*btn_ok, 1, 3, 9, 10, Gtk::FILL, Gtk::FILL, 5, 5);
-       table->attach(*btn_cancel, 3, 4, 9, 10, Gtk::FILL, Gtk::FILL, 5, 5);
-       add (*table);
+
+       add_button (Stock::OK, RESPONSE_ACCEPT);
+       add_button (Stock::CANCEL, RESPONSE_CANCEL);
+
+       get_vbox()->pack_start (*table);
 
        using namespace Gtk::Notebook_Helpers;
        notebook.pages().push_back (TabElem (ladspa_display, _("LADSPA")));
@@ -142,10 +139,6 @@ PluginSelector::PluginSelector (PluginManager *mgr)
        btn_update->signal_clicked().connect (mem_fun(*this, &PluginSelector::btn_update_clicked));
        btn_add->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_add_clicked));
        btn_remove->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_remove_clicked));
-       btn_ok->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_ok_clicked));
-       btn_cancel->signal_clicked().connect(mem_fun(*this,&PluginSelector::btn_cancel_clicked));
-       signal_delete_event().connect (mem_fun(*this, &PluginSelector::wm_close));
-
 }
 
 void
@@ -328,37 +321,41 @@ PluginSelector::btn_remove_clicked()
        }
 }
 
-// Adds a plugin, and closes the window.
-void 
-PluginSelector::btn_ok_clicked()
+void
+PluginSelector::btn_update_clicked()
 {
+       manager->refresh ();
+       input_refiller ();
+}
+
+int
+PluginSelector::run ()
+{
+       ResponseType r;
        list<PluginInfo*>::iterator i;
 
-       for (i = added_plugins.begin(); i != added_plugins.end(); ++i){
-               use_plugin (*i);
+       r = (ResponseType) Dialog::run ();
+
+       switch (r) {
+       case RESPONSE_ACCEPT:
+               for (i = added_plugins.begin(); i != added_plugins.end(); ++i){
+                       use_plugin (*i);
+               }
+               break;
+
+       default:
+               break;
        }
 
-       hide();
-       added_plugins.clear();
+       cleanup ();
+
+       return (int) r;
 }
 
 void
-PluginSelector::btn_cancel_clicked()
+PluginSelector::cleanup ()
 {
        hide();
        added_plugins.clear();
 }
 
-void
-PluginSelector::btn_update_clicked()
-{
-       manager->refresh ();
-       input_refiller ();
-}
-
-gint
-PluginSelector::wm_close(GdkEventAny* ev)
-{
-       btn_cancel_clicked();
-       return TRUE;
-}
index d7c32ba28f52ea8569905a05af373bb7fae978c3..77eefd2c028e94c49ea5f9302ae0731688d3e0df 100644 (file)
 #ifndef __ardour_plugin_selector_h__
 #define __ardour_plugin_selector_h__
 
-#include <gtkmm/notebook.h>
+#include <gtkmm/dialog.h>
 #include <gtkmm/notebook.h>
 #include <gtkmm/treeview.h>
 #include <gtkmm2ext/selector.h>
 
-#include <ardour_dialog.h>
-
 namespace ARDOUR {
        class Session;
        class PluginManager;
        class Plugin;
 }
 
-class PluginSelector : public ArdourDialog 
+class PluginSelector : public Gtk::Dialog
 {
   public:
        PluginSelector (ARDOUR::PluginManager *);
        sigc::signal<void,ARDOUR::Plugin *> PluginCreated;
 
+       int run (); // XXX should we try not to overload the non-virtual Gtk::Dialog::run() ?
+
        void set_session (ARDOUR::Session*);
 
   private:
@@ -118,12 +118,10 @@ class PluginSelector : public ArdourDialog
        void row_clicked(GdkEventButton *);
        void btn_add_clicked();
        void btn_remove_clicked();
-       void btn_ok_clicked();
        void btn_update_clicked();
        void btn_apply_clicked();
-       void btn_cancel_clicked();
        void use_plugin (ARDOUR::PluginInfo*);
-       gint wm_close(GdkEventAny* ev);
+       void cleanup ();
 };
 
 #endif // __ardour_plugin_selector_h__
index d2507c364ee9fa601d14b0b1d17a4e104065e69a..041f73e5a9505bd98db6afb7b0645dd5ecc9dceb 100644 (file)
 using namespace sigc;
 using namespace ARDOUR;
 using namespace Gtk;
+using namespace Glib;
 using namespace Gtkmm2ext;
 
 
-
-RedirectBox::RedirectBox (Placement pcmnt, Session& sess, Route& rt, PluginSelector &plugsel, RouteRedirectSelection & rsel, bool owner_is_mixer)
+RedirectBox::RedirectBox (Placement pcmnt, Session& sess, Route& rt, PluginSelector &plugsel, 
+                         RouteRedirectSelection & rsel, bool owner_is_mixer)
        : _route(rt), 
          _session(sess), 
          _owner_is_mixer (owner_is_mixer), 
@@ -83,8 +84,11 @@ RedirectBox::RedirectBox (Placement pcmnt, Session& sess, Route& rt, PluginSelec
        redirect_drag_in_progress = false;
        
        model = ListStore::create(columns);
-       selection = redirect_display.get_selection();
+
+       RefPtr<TreeSelection> selection = redirect_display.get_selection();
        selection->set_mode (Gtk::SELECTION_MULTIPLE);
+       selection->signal_changed().connect (mem_fun (*this, &RedirectBox::selection_changed));
+
        redirect_display.set_model (model);
        redirect_display.append_column (NULL, columns.text);
        redirect_display.set_name ("MixerRedirectSelector");
@@ -113,7 +117,6 @@ RedirectBox::RedirectBox (Placement pcmnt, Session& sess, Route& rt, PluginSelec
        redirect_display.signal_button_release_event().connect (mem_fun(*this, &RedirectBox::redirect_button));
 
        //redirect_display.signal_button_release_event().connect_after (ptr_fun (do_not_propagate));
-       //_plugin_selector.hide.connect(mem_fun(*this,&RedirectBox::disconnect_newplug));
        set_stuff_from_route ();
 
        /* start off as a passthru strip. we'll correct this, if necessary,
@@ -323,61 +326,62 @@ RedirectBox::redirect_button (GdkEventButton *ev)
 Menu *
 RedirectBox::build_redirect_menu ()
 {
-       popup_act_grp = Gtk::ActionGroup::create();
-       
+       popup_act_grp = Gtk::ActionGroup::create(X_("redirectmenu"));
+       Glib::RefPtr<Action> act;
+
        /* new stuff */
+       ActionManager::register_action (popup_act_grp, X_("newplugin"), _("New Plugin ..."),  mem_fun(*this, &RedirectBox::choose_plugin));
+       ActionManager::register_action (popup_act_grp, X_("newinsert"), _("New Insert"),  mem_fun(*this, &RedirectBox::choose_insert));
+       ActionManager::register_action (popup_act_grp, X_("newsend"), _("New Send ..."),  mem_fun(*this, &RedirectBox::choose_send));
+       ActionManager::register_action (popup_act_grp, X_("clear"), _("Clear"),  mem_fun(*this, &RedirectBox::clear_redirects));
 
-       popup_act_grp->add (Gtk::Action::create("newplugin", _("New Plugin ...")), mem_fun(*this, &RedirectBox::choose_plugin));
-       popup_act_grp->add (Gtk::Action::create("newinsert", _("New Insert")), mem_fun(*this, &RedirectBox::choose_insert));
-       popup_act_grp->add (Gtk::Action::create("newsend", _("New Send ...")), mem_fun(*this, &RedirectBox::choose_send));
-       popup_act_grp->add (Gtk::Action::create("clear", _("Clear")), mem_fun(*this, &RedirectBox::clear_redirects));
-       
        /* standard editing stuff */
-       
-       popup_act_grp->add (Gtk::Action::create("cut", _("Cut")), mem_fun(*this, &RedirectBox::cut_redirects));
-       popup_act_grp->add (Gtk::Action::create("copy", _("Copy")), mem_fun(*this, &RedirectBox::copy_redirects));
-       popup_act_grp->add (Gtk::Action::create("paste", _("Paste")), mem_fun(*this, &RedirectBox::paste_redirects));
-       popup_act_grp->add (Gtk::Action::create("rename", _("Rename")), mem_fun(*this, &RedirectBox::rename_redirects));
-       popup_act_grp->add (Gtk::Action::create("selectall", _("Select All")), mem_fun(*this, &RedirectBox::select_all_redirects));
-       popup_act_grp->add (Gtk::Action::create("deselectall", _("Deselect All")), mem_fun(*this, &RedirectBox::deselect_all_redirects));
-       
+       act = ActionManager::register_action (popup_act_grp, X_("cut"), _("Cut"),  mem_fun(*this, &RedirectBox::cut_redirects));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+       act = ActionManager::register_action (popup_act_grp, X_("copy"), _("Copy"),  mem_fun(*this, &RedirectBox::copy_redirects));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+       ActionManager::ActionManager::register_action (popup_act_grp, X_("paste"), _("Paste"),  mem_fun(*this, &RedirectBox::paste_redirects));
+       act = ActionManager::register_action (popup_act_grp, X_("rename"), _("Rename"),  mem_fun(*this, &RedirectBox::rename_redirects));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+       ActionManager::register_action (popup_act_grp, X_("selectall"), _("Select All"),  mem_fun(*this, &RedirectBox::select_all_redirects));
+       ActionManager::register_action (popup_act_grp, X_("deselectall"), _("Deselect All"),  mem_fun(*this, &RedirectBox::deselect_all_redirects));
+               
        /* activation */
-       
-       popup_act_grp->add (Gtk::Action::create("activate", _("Activate")), bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::activate_redirect));
-       popup_act_grp->add (Gtk::Action::create("deactivate", _("Deactivate")), bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::deactivate_redirect));
-       popup_act_grp->add (Gtk::Action::create("activateall", _("Activate All")), bind (mem_fun(*this, &RedirectBox::all_redirects_active), true));
-       popup_act_grp->add (Gtk::Action::create("deactivateall", _("Deactivate All")), bind (mem_fun(*this, &RedirectBox::all_redirects_active), false));
-       
+       act = ActionManager::register_action (popup_act_grp, X_("activate"), _("Activate"),  bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::activate_redirect));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+       act = ActionManager::register_action (popup_act_grp, X_("deactivate"), _("Deactivate"),  bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::deactivate_redirect));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+       ActionManager::register_action (popup_act_grp, X_("activate"), _("Activate"),  bind (mem_fun(*this, &RedirectBox::all_redirects_active),true));
+       ActionManager::register_action (popup_act_grp, X_("activate"), _("Activate"),  bind (mem_fun(*this, &RedirectBox::all_redirects_active), false));
+
        /* show editors */
-       
-       popup_act_grp->add (Gtk::Action::create("edit", _("Edit")), bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::edit_redirect));
-       
-       selection_dependent_items.push_back (popup_act_grp->get_action("cut"));
-       selection_dependent_items.push_back (popup_act_grp->get_action("copy"));
-       selection_dependent_items.push_back (popup_act_grp->get_action("rename"));
-       selection_dependent_items.push_back (popup_act_grp->get_action("activate"));
-       selection_dependent_items.push_back (popup_act_grp->get_action("deactivate"));
-       selection_dependent_items.push_back (popup_act_grp->get_action("edit"));
-
-       //popup_ui_mgr = Gtk::UIManager::create();
-       //popup_ui_mgr->insert_action_group(popup_act_grp);
-       
-    redirect_menu = dynamic_cast<Gtk::Menu*>(ActionManager::get_widget("/redirectmenu") );
-    redirect_menu->signal_map_event().connect (mem_fun(*this, &RedirectBox::redirect_menu_map_handler));
-    redirect_menu->set_name ("ArdourContextMenu");
-    show_all_children();
-    return redirect_menu;
+       act = ActionManager::register_action (popup_act_grp, X_("edit"), _("Edit"),  bind (mem_fun(*this, &RedirectBox::for_selected_redirects), &RedirectBox::edit_redirect));
+       ActionManager::plugin_selection_sensitive_actions.push_back(act);
+
+       ActionManager::add_action_group (popup_act_grp);
+
+       redirect_menu = dynamic_cast<Gtk::Menu*>(ActionManager::get_widget("/redirectmenu") );
+       redirect_menu->signal_map_event().connect (mem_fun(*this, &RedirectBox::redirect_menu_map_handler));
+       redirect_menu->set_name ("ArdourContextMenu");
+
+       show_all_children();
+
+       return redirect_menu;
 }
 
-gint
-RedirectBox::redirect_menu_map_handler (GdkEventAny *ev)
+void
+RedirectBox::selection_changed ()
 {
        bool sensitive = (redirect_display.get_selection()->count_selected_rows()) ? true : false;
 
-       for (vector<Glib::RefPtr<Gtk::Action> >::iterator i = selection_dependent_items.begin(); i != selection_dependent_items.end(); ++i) {
+       for (vector<Glib::RefPtr<Gtk::Action> >::iterator i = ActionManager::plugin_selection_sensitive_actions.begin(); i != ActionManager::plugin_selection_sensitive_actions.end(); ++i) {
                (*i)->set_sensitive (sensitive);
        }
+}
 
+gint
+RedirectBox::redirect_menu_map_handler (GdkEventAny *ev)
+{
        popup_act_grp->get_action("paste")->set_sensitive (!_rr_selection.redirects.empty());
        return FALSE;
 }
@@ -397,7 +401,9 @@ RedirectBox::deselect_all_redirects ()
 void
 RedirectBox::choose_plugin ()
 {
-       show_plugin_selector();
+       sigc::connection newplug_connection = _plugin_selector.PluginCreated.connect (mem_fun(*this,&RedirectBox::insert_plugin_chosen));
+       _plugin_selector.run ();
+       newplug_connection.disconnect();
 }
 
 void
@@ -534,18 +540,6 @@ RedirectBox::send_io_finished (IOSelector::Result r, Redirect* redirect, IOSelec
        delete_when_idle (ios);
 }
 
-void 
-RedirectBox::disconnect_newplug ()
-{
-    newplug_connection.disconnect();
-}
-void
-RedirectBox::show_plugin_selector ()
-{
-       newplug_connection = _plugin_selector.PluginCreated.connect (mem_fun(*this,&RedirectBox::insert_plugin_chosen));
-       _plugin_selector.show_all ();
-}
-
 void
 RedirectBox::redirects_changed (void *src)
 {
index 278c423df48cc31a5d1a40c18d97bec8ede6a8de..c5e274b017fe91c6e6e4da727c9523340a525b86 100644 (file)
@@ -107,7 +107,8 @@ class RedirectBox : public Gtk::HBox
 
        ModelColumns columns;
        Glib::RefPtr<Gtk::ListStore> model;
-       Glib::RefPtr<Gtk::TreeSelection> selection;
+       
+       void selection_changed ();
        
        Gtk::EventBox          redirect_eventbox;
        Gtk::HBox              redirect_hpacker;
@@ -118,8 +119,6 @@ class RedirectBox : public Gtk::HBox
 
        Width _width;
        
-       sigc::connection newplug_connection;
-       
        Gtk::Menu *send_action_menu;
        void build_send_action_menu ();
 
@@ -129,7 +128,6 @@ class RedirectBox : public Gtk::HBox
        Glib::RefPtr<Gtk::UIManager> popup_ui_mgr;
        Glib::RefPtr<Gtk::ActionGroup> popup_act_grp;
        Gtk::Menu *redirect_menu;
-       vector<Glib::RefPtr<Gtk::Action> > selection_dependent_items;
        gint redirect_menu_map_handler (GdkEventAny *ev);
        Gtk::Menu * build_redirect_menu ();
        void build_redirect_tooltip (Gtk::EventBox&, string);
@@ -147,16 +145,10 @@ class RedirectBox : public Gtk::HBox
        void show_redirect_name (void*, ARDOUR::Redirect *);
        void add_redirect_to_display (ARDOUR::Redirect *);
 
-       void show_plugin_selector ();
-
-
        string redirect_name (ARDOUR::Redirect&);
 
-
        void remove_redirect_gui (ARDOUR::Redirect *);
 
-       void disconnect_newplug();
-
        void redirects_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*);
        gint compute_redirect_sort_keys ();
        vector<sigc::connection> redirect_active_connections;