X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_actions.cc;h=79900b35174c3db546564b035700bc9c7a596b1f;hb=8af589b322408aba38413dc2c85dc77ae1c9f2e4;hp=4c632241aa756610848ece7c5d9840ff4dd3b5f6;hpb=bc487bb4b02a9780938d6cf8528c888e59161aa9;p=ardour.git diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 4c632241aa..79900b3517 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -41,7 +41,7 @@ #include "time_axis_view.h" #include "ui_config.h" #include "utils.h" -#include "i18n.h" +#include "pbd/i18n.h" #include "audio_time_axis.h" #include "editor_group_tabs.h" #include "editor_routes.h" @@ -147,13 +147,12 @@ 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 (); /* add named actions for the editor */ - myactions.register_action (editor_actions, "escape", _("Break drag or deselect all"), sigc::mem_fun (*this, &Editor::escape)); - /* We don't bother registering "unlock" because it would be insensitive when required. Editor::unlock() must be invoked directly. */ @@ -246,6 +245,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)); @@ -365,7 +365,8 @@ Editor::register_actions () reg_sens (editor_actions, "editor-fade-range", _("Fade Range Selection"), sigc::mem_fun(*this, &Editor::fade_range)); - reg_sens (editor_actions, "set-tempo-from-edit-range", _("Set Tempo from Edit Range = Bar"), sigc::mem_fun(*this, &Editor::use_range_as_bar)); + act = myactions.register_action (editor_actions, "set-tempo-from-edit-range", _("Set Tempo from Edit Range = Bar"), sigc::mem_fun(*this, &Editor::use_range_as_bar)); + ActionManager::time_selection_sensitive_actions.push_back (act); toggle_reg_sens (editor_actions, "toggle-log-window", _("Log"), sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::toggle_errors)); @@ -473,6 +474,13 @@ Editor::register_actions () myactions.register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus)); + 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); + act = myactions.register_action (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::trigger_script), i - 1)); + act->set_tooltip (_("no action bound")); + act->set_sensitive (false); + } Glib::RefPtr mouse_mode_actions = myactions.create_action_group (X_("MouseMode")); RadioAction::Group mouse_mode_group; @@ -637,7 +645,7 @@ Editor::register_actions () ruler_range_action->set_active (true); ruler_loop_punch_action->set_active (true); ruler_loop_punch_action->set_active (true); - ruler_bbt_action->set_active (false); + ruler_bbt_action->set_active (true); ruler_cd_marker_action->set_active (true); ruler_timecode_action->set_active (true); ruler_minsec_action->set_active (false); @@ -736,12 +744,6 @@ 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 tact = Glib::RefPtr::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)); } @@ -749,7 +751,7 @@ Editor::register_actions () void Editor::load_bindings () { - bindings = Bindings::get_bindings (X_("editor"), myactions); + bindings = Bindings::get_bindings (X_("Editor"), myactions); global_hpacker.set_data ("ardour-bindings", bindings); } @@ -978,23 +980,6 @@ Editor::toggle_measure_visibility () } } -void -Editor::toggle_logo_visibility () -{ - Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("ToggleLogoVisibility")); - - if (act) { - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); - if (logo_item) { - if (tact->get_active()) { - logo_item->show (); - } else { - logo_item->hide (); - } - } - } -} - RefPtr Editor::snap_type_action (SnapType type) { @@ -1726,19 +1711,6 @@ Editor::parameter_changed (std::string p) } } else if (p == "show-region-gain") { set_gain_envelope_visibility (); - } else if (p == "remote-model") { - if (_routes) { - _routes->reset_remote_control_ids (); - } - } else if (p == "use-tooltips") { - - /* this doesn't really belong here but it has to go somewhere */ - - if (UIConfiguration::instance().get_use_tooltips()) { - Gtkmm2ext::enable_tooltips (); - } else { - Gtkmm2ext::disable_tooltips (); - } } else if (p == "skip-playback") { Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("toggle-skip-playback")); @@ -1753,9 +1725,40 @@ Editor::parameter_changed (std::string p) } void -Editor::reset_focus () +Editor::reset_focus (Gtk::Widget* w) { - _track_canvas->grab_focus(); + /* this resets focus to the first focusable parent of the given widget, + * or, if there is no focusable parent, cancels focus in the toplevel + * window that the given widget is packed into (if there is one). + */ + + if (!w) { + return; + } + + Gtk::Widget* top = w->get_toplevel(); + + if (!top || !top->is_toplevel()) { + return; + } + + w = w->get_parent (); + + while (w) { + if (w->get_can_focus ()) { + Window* win = dynamic_cast (top); + win->set_focus (*w); + return; + } + w = w->get_parent (); + } + + /* no focusable parent found, cancel focus in top level window. + C++ API cannot be used for this. Thanks, references. + */ + + gtk_window_set_focus (GTK_WINDOW(top->gobj()), 0); + } void @@ -1938,7 +1941,8 @@ Editor::register_region_actions () reg_sens (_region_actions, "combine-regions", _("Combine"), sigc::mem_fun (*this, &Editor::combine_regions)); reg_sens (_region_actions, "uncombine-regions", _("Uncombine"), sigc::mem_fun (*this, &Editor::uncombine_regions)); - reg_sens (_region_actions, "analyze-region", _("Spectral Analysis..."), sigc::mem_fun (*this, &Editor::analyze_region_selection)); + reg_sens (_region_actions, "loudness-analyze-region", _("Loudness Analysis..."), sigc::mem_fun (*this, &Editor::loudness_analyze_region_selection)); + reg_sens (_region_actions, "spectral-analyze-region", _("Spectral Analysis..."), sigc::mem_fun (*this, &Editor::spectral_analyze_region_selection)); reg_sens (_region_actions, "reset-region-gain-envelopes", _("Reset Envelope"), sigc::mem_fun (*this, &Editor::reset_region_gain_envelopes)); @@ -2045,6 +2049,6 @@ Editor::register_region_actions () reg_sens (_region_actions, "choose-top-region", _("Choose Top..."), sigc::bind (sigc::mem_fun (*this, &Editor::change_region_layering_order), false)); reg_sens (_region_actions, "choose-top-region-context-menu", _("Choose Top..."), sigc::bind (sigc::mem_fun (*this, &Editor::change_region_layering_order), true)); - _all_region_actions_sensitized = true; - + /* desensitize them all by default. region selection will change this */ + sensitize_all_region_actions (false); }