Add keyboard shortcut to tooltip text where possible.
authorDavid Robillard <d@drobilla.net>
Tue, 9 Feb 2010 00:50:24 +0000 (00:50 +0000)
committerDavid Robillard <d@drobilla.net>
Tue, 9 Feb 2010 00:50:24 +0000 (00:50 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6657 d708f5d6-7413-0410-9779-e7cbd77b26cf

23 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/audio_region_editor.cc
gtk2_ardour/automation_time_axis.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/gain_meter.cc
gtk2_ardour/generic_pluginui.cc
gtk2_ardour/keyboard.cc
gtk2_ardour/keyboard.h
gtk2_ardour/location_ui.cc
gtk2_ardour/mixer_strip.cc
gtk2_ardour/panner_ui.cc
gtk2_ardour/plugin_selector.cc
gtk2_ardour/processor_box.cc
gtk2_ardour/public_editor.h
gtk2_ardour/route_time_axis.cc
gtk2_ardour/visual_time_axis.cc
libs/gtkmm2ext/gtk_ui.cc
libs/gtkmm2ext/gtkmm2ext/gtk_ui.h

index ee205237bbcaf6ea7dbf90a03097fa685b1fde8f..b6486827e476ee9e509a6cffd7d9dde1af2c793a 100644 (file)
@@ -274,7 +274,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
        /* we like keyboards */
 
-       keyboard = new ArdourKeyboard;
+       keyboard = new ArdourKeyboard(*this);
 
        XMLNode* node = ARDOUR_UI::instance()->keyboard_settings();
        if (node) {
index bb8db0ef5a54a900a705be1936aba80ba829ca6e..a807261127ac6e37c7373ae6cc43103e82fb7ce7 100644 (file)
@@ -229,6 +229,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
        void setup_profile ();
        void setup_theme ();
+       void setup_tooltips ();
 
        void set_shuttle_fract (double);
 
index 4421069f8ceb8b73b55f903a4bdeff1769cc9364..c40c7e1efee97271e1739116fb07fa366c79d569 100644 (file)
@@ -97,9 +97,42 @@ ARDOUR_UI::setup_windows ()
 
        editor->add_toplevel_controls (top_packer);
 
+       setup_tooltips ();
+
        return 0;
 }
 
+void
+ARDOUR_UI::setup_tooltips ()
+{
+       set_tip (roll_button, _("Play from playhead"));
+       set_tip (stop_button, _("Stop playback"));
+       set_tip (rec_button, _("Toggle record"));
+       set_tip (play_selection_button, _("Play range/selection"));
+       set_tip (join_play_range_button, _("Always play range/selection"));
+       set_tip (goto_start_button, _("Go to start of session"));
+       set_tip (goto_end_button, _("Go to end of session"));
+       set_tip (auto_loop_button, _("Play loop range"));
+
+       set_tip (auto_return_button, _("Return to last playback start when stopped"));
+       set_tip (auto_play_button, _("Start playback after any locate"));
+       set_tip (auto_input_button, _("Be sensible about input monitoring"));
+       set_tip (punch_in_button, _("Start recording at auto-punch start"));
+       set_tip (punch_out_button, _("Stop recording at auto-punch end"));
+       set_tip (click_button, _("Enable/Disable audio click"));
+       set_tip (sync_button, _("Enable/Disable external positional sync"));
+       set_tip (time_master_button, _("Does Ardour control the time?"));
+       set_tip (shuttle_box, _("Shuttle speed control"));
+       set_tip (shuttle_units_button, _("Select semitones or %%-age for speed display"));
+       set_tip (speed_display_box, _("Current transport speed"));
+       set_tip (solo_alert_button, _("When active, something is soloed.\nClick to de-solo everything"));
+       set_tip (auditioning_alert_button, _("When active, auditioning is taking place\nClick to stop the audition"));
+       set_tip (primary_clock, _("Primary clock"));
+       set_tip (secondary_clock, _("secondary clock"));
+
+       editor->setup_tooltips ();
+}
+
 void
 ARDOUR_UI::display_message (const char *prefix, gint prefix_len, RefPtr<TextBuffer::Tag> ptag, RefPtr<TextBuffer::Tag> mtag, const char *msg)
 {
@@ -247,27 +280,6 @@ ARDOUR_UI::setup_transport ()
        act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync"));
        act->connect_proxy (sync_button);
 
-       ARDOUR_UI::instance()->tooltips().set_tip (roll_button, _("Play from playhead"));
-       ARDOUR_UI::instance()->tooltips().set_tip (stop_button, _("Stop playback"));
-       ARDOUR_UI::instance()->tooltips().set_tip (play_selection_button, _("Play range/selection"));
-       ARDOUR_UI::instance()->tooltips().set_tip (join_play_range_button, _("Always play range/selection"));
-       ARDOUR_UI::instance()->tooltips().set_tip (goto_start_button, _("Go to start of session"));
-       ARDOUR_UI::instance()->tooltips().set_tip (goto_end_button, _("Go to end of session"));
-       ARDOUR_UI::instance()->tooltips().set_tip (auto_loop_button, _("Play loop range"));
-
-       ARDOUR_UI::instance()->tooltips().set_tip (auto_return_button, _("Return to last playback start when stopped"));
-       ARDOUR_UI::instance()->tooltips().set_tip (auto_play_button, _("Start playback after any locate"));
-       ARDOUR_UI::instance()->tooltips().set_tip (auto_input_button, _("Be sensible about input monitoring"));
-       ARDOUR_UI::instance()->tooltips().set_tip (punch_in_button, _("Start recording at auto-punch start"));
-       ARDOUR_UI::instance()->tooltips().set_tip (punch_out_button, _("Stop recording at auto-punch end"));
-       ARDOUR_UI::instance()->tooltips().set_tip (click_button, _("Enable/Disable audio click"));
-       ARDOUR_UI::instance()->tooltips().set_tip (sync_button, _("Enable/Disable external positional sync"));
-       ARDOUR_UI::instance()->tooltips().set_tip (time_master_button, _("Does Ardour control the time?"));
-       ARDOUR_UI::instance()->tooltips().set_tip (shuttle_box, _("Shuttle speed control"));
-       ARDOUR_UI::instance()->tooltips().set_tip (shuttle_units_button, _("Select semitones or %%-age for speed display"));
-       ARDOUR_UI::instance()->tooltips().set_tip (speed_display_box, _("Current transport speed"));
-
-
        shuttle_box.set_flags (CAN_FOCUS);
        shuttle_box.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
        shuttle_box.set_size_request (100, 15);
@@ -287,9 +299,6 @@ ARDOUR_UI::setup_transport ()
        secondary_clock.ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
        big_clock.ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::big_clock_value_changed));
 
-       ARDOUR_UI::instance()->tooltips().set_tip (primary_clock, _("Primary clock"));
-       ARDOUR_UI::instance()->tooltips().set_tip (secondary_clock, _("secondary clock"));
-
        ActionManager::get_action ("Transport", "ToggleAutoReturn")->connect_proxy (auto_return_button);
        ActionManager::get_action ("Transport", "ToggleAutoPlay")->connect_proxy (auto_play_button);
        ActionManager::get_action ("Transport", "ToggleAutoInput")->connect_proxy (auto_input_button);
@@ -314,9 +323,6 @@ ARDOUR_UI::setup_transport ()
        auditioning_alert_button.set_name ("TransportAuditioningAlert");
        auditioning_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_toggle));
 
-       tooltips().set_tip (solo_alert_button, _("When active, something is soloed.\nClick to de-solo everything"));
-       tooltips().set_tip (auditioning_alert_button, _("When active, auditioning is taking place\nClick to stop the audition"));
-
        alert_box.pack_start (solo_alert_button, false, false);
        alert_box.pack_start (auditioning_alert_button, false, false);
 
index e1d00548914b21754a08a1dae1d6f9e73cde052e..6f48bee04ba4952655f80e0be935f14d094e5743 100644 (file)
@@ -58,6 +58,7 @@ ARDOUR_UI::we_have_dependents ()
        install_actions ();
        ProcessorBox::register_actions ();
        keyboard->setup_keybindings ();
+       editor->setup_tooltips ();
        editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
 }
 
index 90875a08d405b5b3fd6ef6db065cb0276a50c564..4ddf7ad0b7eb328b84543321680aed0c79760810 100644 (file)
@@ -72,7 +72,7 @@ AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr<AudioRegion>
        name_hbox.pack_start (name_label, false, false);
        name_hbox.pack_start (name_entry, false, false);
 
-       ARDOUR_UI::instance()->tooltips().set_tip (audition_button, _("audition this region"));
+       ARDOUR_UI::instance()->set_tip (audition_button, _("audition this region"));
 
        audition_button.unset_flags (Gtk::CAN_FOCUS);
 
index 1046588fb37f6e4a4da010f38ab5d531230e4e6c..44ee3edb12ab5ad20417b52fa4e6aefcda4901d4 100644 (file)
@@ -120,8 +120,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr<Ro
 
        controls_table.set_no_show_all();
 
-       ARDOUR_UI::instance()->tooltips().set_tip(auto_button, _("automation state"));
-       ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("hide track"));
+       ARDOUR_UI::instance()->set_tip(auto_button, _("automation state"));
+       ARDOUR_UI::instance()->set_tip(hide_button, _("hide track"));
 
        /* rearrange the name display */
 
@@ -174,7 +174,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr<Ro
                        tipname += ": ";
                }
                tipname += _name;
-               ARDOUR_UI::instance()->tooltips().set_tip(controls_ebox, tipname);
+               ARDOUR_UI::instance()->set_tip(controls_ebox, tipname);
        }
 
        /* add the buttons */
index 4dbd316d3543502bb2bef6cc84007c04d987d0ea..ecefc1f3d1a3db47591847c42544f7b6e438202b 100644 (file)
@@ -459,8 +459,6 @@ Editor::Editor ()
        h->pack_start (edit_controls_vbox);
        controls_layout.add (*h);
 
-       ARDOUR_UI::instance()->tooltips().set_tip (*_group_tabs, _("Groups: context-click for possible operations"));
-
        controls_layout.set_name ("EditControlsBase");
        controls_layout.add_events (Gdk::SCROLL_MASK);
        controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
@@ -636,9 +634,6 @@ Editor::Editor ()
        nudge_forward_button.add (*(manage (new Image (::get_icon("nudge_right")))));
        nudge_backward_button.add (*(manage (new Image (::get_icon("nudge_left")))));
 
-       ARDOUR_UI::instance()->tooltips().set_tip (nudge_forward_button, _("Nudge Region/Selection Forwards"));
-       ARDOUR_UI::instance()->tooltips().set_tip (nudge_backward_button, _("Nudge Region/Selection Backwards"));
-
        nudge_forward_button.set_name ("TransportButton");
        nudge_backward_button.set_name ("TransportButton");
 
@@ -2850,22 +2845,18 @@ Editor::setup_toolbar ()
        zoom_in_button.set_name ("EditorTimeButton");
        zoom_in_button.set_image (*(manage (new Image (Stock::ZOOM_IN, Gtk::ICON_SIZE_BUTTON))));
        zoom_in_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), false));
-       ARDOUR_UI::instance()->tooltips().set_tip (zoom_in_button, _("Zoom In"));
 
        zoom_out_button.set_name ("EditorTimeButton");
        zoom_out_button.set_image (*(manage (new Image (Stock::ZOOM_OUT, Gtk::ICON_SIZE_BUTTON))));
        zoom_out_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), true));
-       ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_button, _("Zoom Out"));
 
        zoom_out_full_button.set_name ("EditorTimeButton");
        zoom_out_full_button.set_image (*(manage (new Image (Stock::ZOOM_100, Gtk::ICON_SIZE_BUTTON))));
        zoom_out_full_button.signal_clicked().connect (sigc::mem_fun(*this, &Editor::temporal_zoom_session));
-       ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_full_button, _("Zoom to Session"));
 
        zoom_focus_selector.set_name ("ZoomFocusSelector");
        set_popdown_strings (zoom_focus_selector, zoom_focus_strings, true);
        zoom_focus_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::zoom_focus_selection_done));
-       ARDOUR_UI::instance()->tooltips().set_tip (zoom_focus_selector, _("Zoom focus"));
 
        zoom_box.pack_start (zoom_out_button, false, false);
        zoom_box.pack_start (zoom_in_button, false, false);
@@ -2876,13 +2867,11 @@ Editor::setup_toolbar ()
        tav_expand_button.set_size_request(-1,20);
        tav_expand_button.add (*(manage (new Image (::get_icon("tav_exp")))));
        tav_expand_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::tav_zoom_step), true));
-       ARDOUR_UI::instance()->tooltips().set_tip (tav_expand_button, _("Expand Tracks"));
 
        tav_shrink_button.set_name ("TrackHeightButton");
        tav_shrink_button.set_size_request(-1,20);
        tav_shrink_button.add (*(manage (new Image (::get_icon("tav_shrink")))));
        tav_shrink_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::tav_zoom_step), false));
-       ARDOUR_UI::instance()->tooltips().set_tip (tav_shrink_button, _("Shrink Tracks"));
 
        track_zoom_box.set_spacing (1);
        track_zoom_box.set_border_width (0);
@@ -2902,17 +2891,14 @@ Editor::setup_toolbar ()
        snap_type_selector.set_name ("SnapTypeSelector");
        set_popdown_strings (snap_type_selector, snap_type_strings, true);
        snap_type_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::snap_type_selection_done));
-       ARDOUR_UI::instance()->tooltips().set_tip (snap_type_selector, _("Snap/Grid Units"));
 
        snap_mode_selector.set_name ("SnapModeSelector");
        set_popdown_strings (snap_mode_selector, snap_mode_strings, true);
        snap_mode_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::snap_mode_selection_done));
-       ARDOUR_UI::instance()->tooltips().set_tip (snap_mode_selector, _("Snap/Grid Mode"));
 
        edit_point_selector.set_name ("EditPointSelector");
        set_popdown_strings (edit_point_selector, edit_point_strings, true);
        edit_point_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::edit_point_selection_done));
-       ARDOUR_UI::instance()->tooltips().set_tip (edit_point_selector, _("Edit point"));
 
        snap_box.pack_start (snap_mode_selector, false, false);
        snap_box.pack_start (snap_type_selector, false, false);
@@ -2974,6 +2960,33 @@ Editor::setup_toolbar ()
        toolbar_frame.add (toolbar_base);
 }
 
+void
+Editor::setup_tooltips ()
+{
+       ARDOUR_UI::instance()->set_tip (mouse_move_button, _("Select/Move Objects"));
+       ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Select/Move Ranges"));
+       ARDOUR_UI::instance()->set_tip (mouse_gain_button, _("Draw Gain Automation"));
+       ARDOUR_UI::instance()->set_tip (mouse_zoom_button, _("Select Zoom Range"));
+       ARDOUR_UI::instance()->set_tip (mouse_timefx_button, _("Stretch/Shrink Regions"));
+       ARDOUR_UI::instance()->set_tip (mouse_audition_button, _("Listen to Specific Regions"));
+       ARDOUR_UI::instance()->set_tip (join_object_range_button, _("Select/Move Objects or Ranges"));
+       ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Edit Region Contents (e.g. notes)"));
+       ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: context-click for possible operations"));
+       ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Forwards"));
+       ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Backwards"));
+       ARDOUR_UI::instance()->set_tip (zoom_in_button, _("Zoom In"));
+       ARDOUR_UI::instance()->set_tip (zoom_out_button, _("Zoom Out"));
+       ARDOUR_UI::instance()->set_tip (zoom_out_full_button, _("Zoom to Session"));
+       ARDOUR_UI::instance()->set_tip (zoom_focus_selector, _("Zoom focus"));
+       ARDOUR_UI::instance()->set_tip (tav_expand_button, _("Expand Tracks"));
+       ARDOUR_UI::instance()->set_tip (tav_shrink_button, _("Shrink Tracks"));
+       ARDOUR_UI::instance()->set_tip (snap_type_selector, _("Snap/Grid Units"));
+       ARDOUR_UI::instance()->set_tip (snap_mode_selector, _("Snap/Grid Mode"));
+       ARDOUR_UI::instance()->set_tip (edit_point_selector, _("Edit point"));
+       ARDOUR_UI::instance()->set_tip (midi_sound_notes, _("Sound Notes"));
+       ARDOUR_UI::instance()->set_tip (midi_panic_button, _("Send note off and reset controller messages on all MIDI channels"));
+}
+
 void
 Editor::midi_panic ()
 {
@@ -2992,14 +3005,12 @@ Editor::setup_midi_toolbar ()
        /* Midi sound notes */
        midi_sound_notes.add (*(manage (new Image (::get_icon("midi_sound_notes")))));
        midi_sound_notes.set_relief(Gtk::RELIEF_NONE);
-       ARDOUR_UI::instance()->tooltips().set_tip (midi_sound_notes, _("Sound Notes"));
        midi_sound_notes.unset_flags (CAN_FOCUS);
 
        /* Panic */
 
        act = ActionManager::get_action (X_("MIDI"), X_("panic"));
        midi_panic_button.set_name("MidiPanicButton");
-       ARDOUR_UI::instance()->tooltips().set_tip (midi_panic_button, _("Send note off and reset controller messages on all MIDI channels"));
        act->connect_proxy (midi_panic_button);
 
        panic_box.pack_start (midi_sound_notes , true, true);
index 8f50883ea8a7cae3b6acbd463923d3f51339e7a7..1faaa43bf6f9089acdee3478584bf1e623197b92 100644 (file)
@@ -1566,6 +1566,8 @@ public:
 
        void setup_toolbar ();
 
+       void setup_tooltips ();
+
        Gtkmm2ext::TearOff*      tools_tearoff;
        Gtk::HBox                toolbar_hbox;
        Gtk::EventBox            toolbar_base;
index 04b1fadb0d2ba5c58a3848693d65edddef56e663..fbfd500495392dbbc0aaef9ee290c0094517b0dd 100644 (file)
@@ -612,16 +612,6 @@ Editor::register_actions ()
        Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
        RadioAction::Group mouse_mode_group;
 
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_move_button, _("Select/Move Objects"));
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_select_button, _("Select/Move Ranges"));
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_gain_button, _("Draw Gain Automation"));
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_zoom_button, _("Select Zoom Range"));
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_timefx_button, _("Stretch/Shrink Regions"));
-       ARDOUR_UI::instance()->tooltips().set_tip (mouse_audition_button, _("Listen to Specific Regions"));
-       ARDOUR_UI::instance()->tooltips().set_tip (join_object_range_button, _("Select/Move Objects or Ranges"));
-       /* in the future, this may allow other kinds of "intra-region" editing, but for now its just MIDI */
-       ARDOUR_UI::instance()->tooltips().set_tip (internal_edit_button, _("Edit MIDI Notes"));
-
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
        act->connect_proxy (mouse_move_button);
        mouse_move_button.set_image (*(manage (new Image (::get_icon("tool_object")))));
index 6c80ae27253a1b18d10f944839a0de536f88e4d0..e391bc59336909db8c9679dd7f7a042fa3fd1dd9 100644 (file)
@@ -132,8 +132,8 @@ GainMeterBase::GainMeterBase (Session* s,
        gain_automation_style_button.set_name ("MixerAutomationModeButton");
        gain_automation_state_button.set_name ("MixerAutomationPlaybackButton");
 
-       ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_state_button, _("Fader automation mode"));
-       ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_style_button, _("Fader automation type"));
+       ARDOUR_UI::instance()->set_tip (gain_automation_state_button, _("Fader automation mode"));
+       ARDOUR_UI::instance()->set_tip (gain_automation_style_button, _("Fader automation type"));
 
        gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
        gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS);
@@ -802,8 +802,8 @@ GainMeter::GainMeter (Session* s, int fader_length)
        gain_automation_style_button.set_name ("MixerAutomationModeButton");
        gain_automation_state_button.set_name ("MixerAutomationPlaybackButton");
 
-       ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_state_button, _("Fader automation mode"));
-       ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_style_button, _("Fader automation type"));
+       ARDOUR_UI::instance()->set_tip (gain_automation_state_button, _("Fader automation mode"));
+       ARDOUR_UI::instance()->set_tip (gain_automation_style_button, _("Fader automation type"));
 
        gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
        gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS);
index 58d89ea3ba939e0f690a3e44b0b4ae00cd142ae5..636cdbc894f2e19e79fa75b277d867232f1c3c1b 100644 (file)
@@ -315,7 +315,7 @@ GenericPluginUI::ControlUI::ControlUI ()
        : automate_button (X_("")) // force creation of a label
 {
        automate_button.set_name ("PluginAutomateButton");
-       ARDOUR_UI::instance()->tooltips().set_tip (automate_button, _("Automation control"));
+       ARDOUR_UI::instance()->set_tip (automate_button, _("Automation control"));
 
        /* XXX translators: use a string here that will be at least as long
           as the longest automation label (see ::automation_state_changed()
index bcdd551c0ab82a67e24de16b805aed5162dd2f8c..99b24f6e01e38632718ebcb4d938caf90d59ae77 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "ardour/filesystem_paths.h"
 
+#include "ardour_ui.h"
 #include "keyboard.h"
 #include "opts.h"
 
@@ -38,9 +39,11 @@ accel_map_changed (GtkAccelMap* /*map*/,
                   gchar* /*path*/,
                   guint /*key*/,
                   GdkModifierType /*mod*/,
-                  gpointer /*arg*/)
+                  gpointer keyboard)
 {
+       ArdourKeyboard* me = (ArdourKeyboard*)keyboard;
        Keyboard::keybindings_changed ();
+       me->ui.setup_tooltips ();
 }
 
 void
@@ -173,7 +176,7 @@ ArdourKeyboard::setup_keybindings ()
        /* catch changes */
 
        GtkAccelMap* accelmap = gtk_accel_map_get();
-       g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, 0);
+       g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
 }
 
 Selection::Operation
index d4f1158e35664e1af0cf07bd5e7ac7d45f008586..6a689567e54e67b4b6d8468052f682b91fce00ba 100644 (file)
 
 #include "selection.h"
 
+class ARDOUR_UI;
 
-class ArdourKeyboard : public Gtkmm2ext::Keyboard 
+class ArdourKeyboard : public Gtkmm2ext::Keyboard
 {
   public:
-       ArdourKeyboard() {}
+       ArdourKeyboard(ARDOUR_UI& ardour_ui) : ui(ardour_ui) {}
 
        void setup_keybindings ();
 
        static Selection::Operation selection_type (guint state);
+
+       ARDOUR_UI& ui;
 };
 
 #endif /* __ardour_keyboard_h__ */
index 439d64971bb0b6f39b2caeb005342854232372e4..6505634a8e5048d92f05ed3212a3f8b22fc52092 100644 (file)
@@ -260,18 +260,18 @@ LocationEditRow::set_location (Location *loc)
                end_clock.show();
                length_clock.show();
 
-               ARDOUR_UI::instance()->tooltips().set_tip (end_go_button, _("Jump to the end of this range"));
-               ARDOUR_UI::instance()->tooltips().set_tip (start_go_button, _("Jump to the start of this range"));
-               ARDOUR_UI::instance()->tooltips().set_tip (remove_button, _("Forget this range"));
-               ARDOUR_UI::instance()->tooltips().set_tip (start_clock, _("Start time"));
-               ARDOUR_UI::instance()->tooltips().set_tip (end_clock, _("End time"));
-               ARDOUR_UI::instance()->tooltips().set_tip (length_clock, _("Length"));
+               ARDOUR_UI::instance()->set_tip (end_go_button, _("Jump to the end of this range"));
+               ARDOUR_UI::instance()->set_tip (start_go_button, _("Jump to the start of this range"));
+               ARDOUR_UI::instance()->set_tip (remove_button, _("Forget this range"));
+               ARDOUR_UI::instance()->set_tip (start_clock, _("Start time"));
+               ARDOUR_UI::instance()->set_tip (end_clock, _("End time"));
+               ARDOUR_UI::instance()->set_tip (length_clock, _("Length"));
 
        } else {
 
-               ARDOUR_UI::instance()->tooltips().set_tip (start_go_button, _("Jump to this marker"));
-               ARDOUR_UI::instance()->tooltips().set_tip (remove_button, _("Forget this marker"));
-               ARDOUR_UI::instance()->tooltips().set_tip (start_clock, _("Position"));
+               ARDOUR_UI::instance()->set_tip (start_go_button, _("Jump to this marker"));
+               ARDOUR_UI::instance()->set_tip (remove_button, _("Forget this marker"));
+               ARDOUR_UI::instance()->set_tip (start_clock, _("Position"));
 
                end_go_button.hide();
                end_clock.hide();
index 4cb78f3495daa3f6e036e8d0dd40f5e2c6600f08..94c876cfcdd7c2666c7397cacb447ea5a260d560 100644 (file)
@@ -399,7 +399,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
        delete route_ops_menu;
        route_ops_menu = 0;
 
-       ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
+       ARDOUR_UI::instance()->set_tip (comment_button, _route->comment().empty() ?
                                                   _("Click to Add/Edit Comments"):
                                                   _route->comment());
 
@@ -1210,7 +1210,7 @@ MixerStrip::comment_editor_done_editing()
                        break;
                }
 
-               ARDOUR_UI::instance()->tooltips().set_tip (comment_button,
+               ARDOUR_UI::instance()->set_tip (comment_button,
                                str.empty() ? _("Click to Add/Edit Comments") : str);
        }
 
index fd97dca7a76dc9fcdc6368181a58df6512a5c0ab..5977f9903aa84a377fdc05161d4157fce7e287fd 100644 (file)
@@ -71,17 +71,17 @@ PannerUI::PannerUI (Session* s)
        pan_automation_style_button.set_name ("MixerAutomationModeButton");
        pan_automation_state_button.set_name ("MixerAutomationPlaybackButton");
 
-       ARDOUR_UI::instance()->tooltips().set_tip (pan_automation_state_button, _("Pan automation mode"));
-       ARDOUR_UI::instance()->tooltips().set_tip (pan_automation_style_button, _("Pan automation type"));
+       ARDOUR_UI::instance()->set_tip (pan_automation_state_button, _("Pan automation mode"));
+       ARDOUR_UI::instance()->set_tip (pan_automation_style_button, _("Pan automation type"));
 
        //set_size_request_to_display_given_text (pan_automation_state_button, X_("O"), 2, 2);
        //set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2);
 
        panning_viewport.set_name (X_("BaseFrame"));
 
-       ARDOUR_UI::instance()->tooltips().set_tip (panning_link_button,
+       ARDOUR_UI::instance()->set_tip (panning_link_button,
                                                   _("panning link control"));
-       ARDOUR_UI::instance()->tooltips().set_tip (panning_link_direction_button,
+       ARDOUR_UI::instance()->set_tip (panning_link_direction_button,
                                                   _("panning link direction"));
 
        pan_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
@@ -424,7 +424,7 @@ PannerUI::setup_pan ()
 
                        char buf[64];
                        snprintf (buf, sizeof (buf), _("panner for channel %zu"), asz + 1);
-                       ARDOUR_UI::instance()->tooltips().set_tip (bc->event_widget(), buf);
+                       ARDOUR_UI::instance()->set_tip (bc->event_widget(), buf);
 
                        bc->event_widget().signal_button_release_event().connect
                                (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz));
index 2800343784fa8219455741357177e168123f9e37..e1aa19588279d772a218e607d2aab3bfc1d22fdc 100644 (file)
@@ -127,13 +127,13 @@ PluginSelector::PluginSelector (PluginManager *mgr)
        ascroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
        ascroller.add(added_list);
        btn_add = manage(new Gtk::Button(Stock::ADD));
-       ARDOUR_UI::instance()->tooltips().set_tip(*btn_add, _("Add a plugin to the effect list"));
+       ARDOUR_UI::instance()->set_tip(*btn_add, _("Add a plugin to the effect list"));
        btn_add->set_sensitive (false);
        btn_remove = manage(new Gtk::Button(Stock::REMOVE));
        btn_remove->set_sensitive (false);
-       ARDOUR_UI::instance()->tooltips().set_tip(*btn_remove, _("Remove a plugin from the effect list"));
+       ARDOUR_UI::instance()->set_tip(*btn_remove, _("Remove a plugin from the effect list"));
        Gtk::Button *btn_update = manage(new Gtk::Button(Stock::REFRESH));
-       ARDOUR_UI::instance()->tooltips().set_tip(*btn_update, _("Update available plugins"));
+       ARDOUR_UI::instance()->set_tip(*btn_update, _("Update available plugins"));
 
        btn_add->set_name("PluginSelectorButton");
        btn_remove->set_name("PluginSelectorButton");
index 7324541ae207fd2d4147413dc2c806e19380369c..86a90fa9c53d83a46e050ea7825d3a6631b0341d 100644 (file)
@@ -988,7 +988,7 @@ ProcessorBox::build_processor_tooltip (EventBox& box, string start)
                tip += (*i)->processor()->name();
        }
        
-       ARDOUR_UI::instance()->tooltips().set_tip (box, tip);
+       ARDOUR_UI::instance()->set_tip (box, tip);
 }
 
 void
index 1677c2ee49aa3ef67ef1c3315bce10ffef62ee17..9b41977f6ffd820efe643100ee08229f6c2bb4a3 100644 (file)
@@ -94,6 +94,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
        virtual bool have_idled() const = 0;
        virtual void first_idle() = 0;
 
+       virtual void setup_tooltips() = 0;
+
        /** Attach this editor to a Session.
         * @param s Session to connect to.
         */
index dc1a463af92e56032a4048f4bb75fe8a7fca3805..8de2f6b141a18c0d128357fb525b51954f928829 100644 (file)
@@ -183,7 +183,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
                rec_enable_button->show_all ();
 
                controls_table.attach (*rec_enable_button, 5, 6, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
-               ARDOUR_UI::instance()->tooltips().set_tip(*rec_enable_button, _("Record"));
+               ARDOUR_UI::instance()->set_tip(*rec_enable_button, _("Record"));
 
                rec_enable_button->set_sensitive (_session->writable());
        }
@@ -199,14 +199,14 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
        controls_table.attach (route_group_button, 7, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
        controls_table.attach (gm.get_gain_slider(), 0, 5, 1, 2, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
 
-       ARDOUR_UI::instance()->tooltips().set_tip(*solo_button,_("Solo"));
-       ARDOUR_UI::instance()->tooltips().set_tip(*mute_button,_("Mute"));
-       ARDOUR_UI::instance()->tooltips().set_tip(route_group_button, _("Route Group"));
-       ARDOUR_UI::instance()->tooltips().set_tip(size_button,_("Display Height"));
-       ARDOUR_UI::instance()->tooltips().set_tip(playlist_button,_("Playlist"));
-       ARDOUR_UI::instance()->tooltips().set_tip(automation_button, _("Automation"));
-       ARDOUR_UI::instance()->tooltips().set_tip(visual_button, _("Visual options"));
-       ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("Hide this track"));
+       ARDOUR_UI::instance()->set_tip(*solo_button,_("Solo"));
+       ARDOUR_UI::instance()->set_tip(*mute_button,_("Mute"));
+       ARDOUR_UI::instance()->set_tip(route_group_button, _("Route Group"));
+       ARDOUR_UI::instance()->set_tip(size_button,_("Display Height"));
+       ARDOUR_UI::instance()->set_tip(playlist_button,_("Playlist"));
+       ARDOUR_UI::instance()->set_tip(automation_button, _("Automation"));
+       ARDOUR_UI::instance()->set_tip(visual_button, _("Visual options"));
+       ARDOUR_UI::instance()->set_tip(hide_button, _("Hide this track"));
 
        label_view ();
 
@@ -341,7 +341,7 @@ RouteTimeAxisView::label_view ()
                name_entry.set_text (x);
        }
 
-       ARDOUR_UI::instance()->tooltips().set_tip (name_entry, x);
+       ARDOUR_UI::instance()->set_tip (name_entry, x);
 }
 
 void
index b4b613042b99cbcd96152a506bc4f9f0c1015bdc..71dc70df50e8e551c78162f371397d6237242846 100644 (file)
@@ -86,9 +86,9 @@ VisualTimeAxis::VisualTimeAxis(const string & name, PublicEditor& ed, ARDOUR::Se
        size_button.signal_button_release_event().connect (sigc::mem_fun (*this, &VisualTimeAxis::size_click)) ;
        visual_button.signal_clicked().connect (sigc::mem_fun (*this, &VisualTimeAxis::visual_click)) ;
        hide_button.signal_clicked().connect (sigc::mem_fun (*this, &VisualTimeAxis::hide_click)) ;
-       ARDOUR_UI::instance()->tooltips().set_tip(size_button,_("Display Height")) ;
-       ARDOUR_UI::instance()->tooltips().set_tip(visual_button, _("Visual options")) ;
-       ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("Hide this track")) ;
+       ARDOUR_UI::instance()->set_tip(size_button,_("Display Height")) ;
+       ARDOUR_UI::instance()->set_tip(visual_button, _("Visual options")) ;
+       ARDOUR_UI::instance()->set_tip(hide_button, _("Hide this track")) ;
 
        controls_table.attach (hide_button, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
        controls_table.attach (visual_button, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
@@ -342,7 +342,7 @@ VisualTimeAxis::label_view()
 {
        name_label.set_text(time_axis_name) ;
        name_entry.set_text(time_axis_name) ;
-       ARDOUR_UI::instance()->tooltips().set_tip(name_entry, time_axis_name) ;
+       ARDOUR_UI::instance()->set_tip(name_entry, time_axis_name) ;
 }
 
 
index 318dedd1fc450a4513ea232b61f6f845f5e04b3d..f7fbd044590d102906f59bc9dae0c11a29cb0072 100644 (file)
@@ -38,6 +38,7 @@
 #include <gtkmm2ext/popup.h>
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/window_title.h>
+#include <gtkmm2ext/actions.h>
 
 #include "i18n.h"
 
@@ -297,17 +298,40 @@ UI::touch_display (Touchable *display)
        send_request (req);
 }
 
+void
+UI::set_tip (Widget &w, const gchar *tip)
+{
+       set_tip(&w, tip, "");
+}
+
+void
+UI::set_tip (Widget &w, const std::string& tip)
+{
+       set_tip(&w, tip.c_str(), "");
+}
+
 void
 UI::set_tip (Widget *w, const gchar *tip, const gchar *hlp)
 {
        UIRequest *req = get_request (SetTip);
 
+       std::string msg(tip);
+
+       Glib::RefPtr<Gtk::Action> action = w->get_action();
+       if (action) {
+               Gtk::AccelKey key;
+               bool has_key = ActionManager::lookup_entry(action->get_accel_path(), key);
+               if (has_key && key.get_abbrev() != "") {
+                       msg.append("\n\n Key: ").append(key.get_abbrev());
+               }
+       }
+
        if (req == 0) {
                return;
        }
 
        req->widget = w;
-       req->msg = tip;
+       req->msg = msg.c_str();
        req->msg2 = hlp;
 
        send_request (req);
index 1fbfb9d800cb04016dbf3a833bcebe0dd29733a3..2484b1e62084e1e4984cdbab91f173e5a5e2e6fb 100644 (file)
@@ -113,7 +113,9 @@ class UI : public Receiver, public AbstractUI<UIRequest>
        void flush_pending ();
        void toggle_errors ();
        void touch_display (Touchable *);
-       void set_tip (Gtk::Widget *w, const gchar *tip, const gchar *hlp);
+       void set_tip (Gtk::Widget &w, const gchar *tip);
+       void set_tip (Gtk::Widget &w, const std::string &tip);
+       void set_tip (Gtk::Widget *w, const gchar *tip, const gchar *hlp="");
        void idle_add (int (*func)(void *), void *arg);
 
        Gtk::Main& main() const { return *theMain; }