Implements review comments
[ardour.git] / gtk2_ardour / editor_actions.cc
index 35fea0eb36029863684b26d6fd60707babd8d5b9..046d9b94e111e1a825f9ac1d1dea024946039075 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "pbd/file_utils.h"
 
+#include "gtkmm2ext/bindings.h"
 #include "gtkmm2ext/utils.h"
 
 #include "ardour/filesystem_paths.h"
@@ -54,6 +55,8 @@ using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Editing;
 
+using Gtkmm2ext::Bindings;
+
 /* Convenience functions to slightly reduce verbosity below */
 
 RefPtr<Action>
@@ -144,6 +147,7 @@ Editor::register_actions ()
        myactions.register_action (editor_menu_actions, X_("View"), _("View"));
        myactions.register_action (editor_menu_actions, X_("ZoomFocus"), _("Zoom Focus"));
        myactions.register_action (editor_menu_actions, X_("ZoomMenu"), _("Zoom"));
+       myactions.register_action (editor_menu_actions, X_("ActionScripts"), _("Scripted Actions"));
 
        register_region_actions ();
 
@@ -243,6 +247,7 @@ Editor::register_actions ()
                reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::goto_nth_marker), i - 1));
        }
 
+
        reg_sens (editor_actions, "jump-forward-to-mark", _("Jump to Next Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
        reg_sens (editor_actions, "alternate-jump-forward-to-mark", _("Jump to Next Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
        reg_sens (editor_actions, "jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
@@ -470,11 +475,18 @@ Editor::register_actions ()
 
        myactions.register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus));
 
+       act = reg_sens (editor_actions, "manage-action-scripts", _("Manage"),
+                               sigc::mem_fun(*this, &Editor::manage_action_scripts));
+       for (int i = 1; i <= 9; ++i) {
+               string const a = string_compose (X_("script-action-%1"), i);
+               string const n = string_compose (_("Unset #%1"), i);
+               reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::trigger_script), i - 1));
+       }
 
        Glib::RefPtr<ActionGroup> mouse_mode_actions = myactions.create_action_group (X_("MouseMode"));
        RadioAction::Group mouse_mode_group;
 
-       act = myactions.register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Object Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));    
+       act = myactions.register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Object Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
        smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
        smart_mode_button.set_related_action (smart_mode_action);
        smart_mode_button.set_text (_("Smart"));
@@ -485,27 +497,27 @@ Editor::register_actions ()
        mouse_move_button.set_icon (Gtkmm2ext::ArdourIcon::ToolGrab);
        mouse_move_button.set_name ("mouse mode button");
 
-       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));     
+       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));
        mouse_select_button.set_related_action (act);
        mouse_select_button.set_icon (Gtkmm2ext::ArdourIcon::ToolRange);
        mouse_select_button.set_name ("mouse mode button");
 
-       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));        
+       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));
        mouse_draw_button.set_related_action (act);
        mouse_draw_button.set_icon (Gtkmm2ext::ArdourIcon::ToolDraw);
        mouse_draw_button.set_name ("mouse mode button");
 
-       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));    
+       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));
        mouse_audition_button.set_related_action (act);
        mouse_audition_button.set_icon (Gtkmm2ext::ArdourIcon::ToolAudition);
        mouse_audition_button.set_name ("mouse mode button");
 
-       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX)); 
+       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));
        mouse_timefx_button.set_related_action (act);
        mouse_timefx_button.set_icon (Gtkmm2ext::ArdourIcon::ToolStretch);
        mouse_timefx_button.set_name ("mouse mode button");
 
-       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Content Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseContent));       
+       act = myactions.register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Content Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseContent));
        mouse_content_button.set_related_action (act);
        mouse_content_button.set_icon (Gtkmm2ext::ArdourIcon::ToolContent);
        mouse_content_button.set_name ("mouse mode button");
@@ -733,29 +745,15 @@ Editor::register_actions ()
 
        myactions.register_toggle_action (editor_actions, X_("ToggleMeasureVisibility"), _("Show Measure Lines"), sigc::mem_fun (*this, &Editor::toggle_measure_visibility));
 
-       /* if there is a logo in the editor canvas, its always visible at startup */
-
-       act = myactions.register_toggle_action (editor_actions, X_("ToggleLogoVisibility"), _("Show Logo"), sigc::mem_fun (*this, &Editor::toggle_logo_visibility));
-       Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
-       tact->set_active (true);
-
-       myactions.register_action (editor_actions, X_("toggle-midi-input-active"), _("Toggle MIDI Input Active for Editor-Selected Tracks/Busses"), 
-                                  sigc::bind (sigc::mem_fun (*this, &Editor::toggle_midi_input_active), false));
-
-       myactions.install_action_group (rl_actions);
-       myactions.install_action_group (ruler_actions);
-       myactions.install_action_group (zoom_actions);
-       myactions.install_action_group (mouse_mode_actions);
-       myactions.install_action_group (snap_actions);
-       myactions.install_action_group (editor_actions);
-       myactions.install_action_group (editor_menu_actions);
+       myactions.register_action (editor_actions, X_("toggle-midi-input-active"), _("Toggle MIDI Input Active for Editor-Selected Tracks/Busses"),
+                                  sigc::bind (sigc::mem_fun (*this, &Editor::toggle_midi_input_active), false));
 }
 
 void
 Editor::load_bindings ()
 {
-        key_bindings.set_action_map (myactions);
-        key_bindings.load ("editor");
+       bindings = Bindings::get_bindings (X_("editor"), myactions);
+       global_hpacker.set_data ("ardour-bindings", bindings);
 }
 
 void
@@ -983,23 +981,6 @@ Editor::toggle_measure_visibility ()
        }
 }
 
-void
-Editor::toggle_logo_visibility ()
-{
-       Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleLogoVisibility"));
-
-       if (act) {
-               Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
-               if (logo_item) {
-                       if (tact->get_active()) {
-                               logo_item->show ();
-                       } else {
-                               logo_item->hide ();
-                       }
-               }
-       }
-}
-
 RefPtr<RadioAction>
 Editor::snap_type_action (SnapType type)
 {
@@ -1779,7 +1760,7 @@ Editor::reset_canvas_action_sensitivity (bool onoff)
 void
 Editor::register_region_actions ()
 {
-       _region_actions = ActionGroup::create (X_("Region"));
+       _region_actions = myactions.create_action_group (X_("Region"));
 
        /* PART 1: actions that operate on the selection, and for which the edit point type and location is irrelevant */
 
@@ -2052,5 +2033,4 @@ Editor::register_region_actions ()
 
        _all_region_actions_sensitized = true;
 
-       ActionManager::add_action_group (_region_actions);
 }