From b5148d93d5a9e6949f82f8685cab50cb772f2b9d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 9 Feb 2010 00:50:24 +0000 Subject: Add keyboard shortcut to tooltip text where possible. git-svn-id: svn://localhost/ardour2/branches/3.0@6657 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 2 +- gtk2_ardour/ardour_ui.h | 1 + gtk2_ardour/ardour_ui2.cc | 60 ++++++++++++++++++++----------------- gtk2_ardour/ardour_ui_dependents.cc | 1 + gtk2_ardour/audio_region_editor.cc | 2 +- gtk2_ardour/automation_time_axis.cc | 6 ++-- gtk2_ardour/editor.cc | 43 ++++++++++++++++---------- gtk2_ardour/editor.h | 2 ++ gtk2_ardour/editor_actions.cc | 10 ------- gtk2_ardour/gain_meter.cc | 8 ++--- gtk2_ardour/generic_pluginui.cc | 2 +- gtk2_ardour/keyboard.cc | 7 +++-- gtk2_ardour/keyboard.h | 7 +++-- gtk2_ardour/location_ui.cc | 18 +++++------ gtk2_ardour/mixer_strip.cc | 4 +-- gtk2_ardour/panner_ui.cc | 10 +++---- gtk2_ardour/plugin_selector.cc | 6 ++-- gtk2_ardour/processor_box.cc | 2 +- gtk2_ardour/public_editor.h | 2 ++ gtk2_ardour/route_time_axis.cc | 20 ++++++------- gtk2_ardour/visual_time_axis.cc | 8 ++--- libs/gtkmm2ext/gtk_ui.cc | 26 +++++++++++++++- libs/gtkmm2ext/gtkmm2ext/gtk_ui.h | 4 ++- 23 files changed, 148 insertions(+), 103 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index ee205237bb..b6486827e4 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -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) { diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index bb8db0ef5a..a807261127 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -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); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 4421069f8c..c40c7e1efe 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -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 ptag, RefPtr 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); diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index e1d0054891..6f48bee04b 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -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)); } diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc index 90875a08d4..4ddf7ad0b7 100644 --- a/gtk2_ardour/audio_region_editor.cc +++ b/gtk2_ardour/audio_region_editor.cc @@ -72,7 +72,7 @@ AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr 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); diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 1046588fb3..44ee3edb12 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -120,8 +120,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptrtooltips().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_ptrtooltips().set_tip(controls_ebox, tipname); + ARDOUR_UI::instance()->set_tip(controls_ebox, tipname); } /* add the buttons */ diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4dbd316d35..ecefc1f3d1 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -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); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 8f50883ea8..1faaa43bf6 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1566,6 +1566,8 @@ public: void setup_toolbar (); + void setup_tooltips (); + Gtkmm2ext::TearOff* tools_tearoff; Gtk::HBox toolbar_hbox; Gtk::EventBox toolbar_base; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 04b1fadb0d..fbfd500495 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -612,16 +612,6 @@ Editor::register_actions () Glib::RefPtr 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"))))); diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 6c80ae2725..e391bc5933 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -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); diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 58d89ea3ba..636cdbc894 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -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() diff --git a/gtk2_ardour/keyboard.cc b/gtk2_ardour/keyboard.cc index bcdd551c0a..99b24f6e01 100644 --- a/gtk2_ardour/keyboard.cc +++ b/gtk2_ardour/keyboard.cc @@ -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 diff --git a/gtk2_ardour/keyboard.h b/gtk2_ardour/keyboard.h index d4f1158e35..6a689567e5 100644 --- a/gtk2_ardour/keyboard.h +++ b/gtk2_ardour/keyboard.h @@ -25,15 +25,18 @@ #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__ */ diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index 439d64971b..6505634a8e 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -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(); diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 4cb78f3495..94c876cfcd 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -399,7 +399,7 @@ MixerStrip::set_route (boost::shared_ptr 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); } diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc index fd97dca7a7..5977f9903a 100644 --- a/gtk2_ardour/panner_ui.cc +++ b/gtk2_ardour/panner_ui.cc @@ -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)); diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index 2800343784..e1aa195882 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -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"); diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 7324541ae2..86a90fa9c5 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -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 diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 1677c2ee49..9b41977f6f 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -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. */ diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index dc1a463af9..8de2f6b141 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -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 diff --git a/gtk2_ardour/visual_time_axis.cc b/gtk2_ardour/visual_time_axis.cc index b4b613042b..71dc70df50 100644 --- a/gtk2_ardour/visual_time_axis.cc +++ b/gtk2_ardour/visual_time_axis.cc @@ -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) ; } diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc index 318dedd1fc..f7fbd04459 100644 --- a/libs/gtkmm2ext/gtk_ui.cc +++ b/libs/gtkmm2ext/gtk_ui.cc @@ -38,6 +38,7 @@ #include #include #include +#include #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 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); diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h index 1fbfb9d800..2484b1e620 100644 --- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h +++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h @@ -113,7 +113,9 @@ class UI : public Receiver, public AbstractUI 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; } -- cgit v1.2.3