Add keyboard shortcut to tooltip text where possible.

git-svn-id: svn://localhost/ardour2/branches/3.0@6657 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2010-02-09 00:50:24 +00:00
parent 535d602374
commit b5148d93d5
23 changed files with 148 additions and 103 deletions

View file

@ -274,7 +274,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
/* we like keyboards */ /* we like keyboards */
keyboard = new ArdourKeyboard; keyboard = new ArdourKeyboard(*this);
XMLNode* node = ARDOUR_UI::instance()->keyboard_settings(); XMLNode* node = ARDOUR_UI::instance()->keyboard_settings();
if (node) { if (node) {

View file

@ -229,6 +229,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void setup_profile (); void setup_profile ();
void setup_theme (); void setup_theme ();
void setup_tooltips ();
void set_shuttle_fract (double); void set_shuttle_fract (double);

View file

@ -97,9 +97,42 @@ ARDOUR_UI::setup_windows ()
editor->add_toplevel_controls (top_packer); editor->add_toplevel_controls (top_packer);
setup_tooltips ();
return 0; 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 void
ARDOUR_UI::display_message (const char *prefix, gint prefix_len, RefPtr<TextBuffer::Tag> ptag, RefPtr<TextBuffer::Tag> mtag, const char *msg) 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 = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync"));
act->connect_proxy (sync_button); 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.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.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); 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)); 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)); 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", "ToggleAutoReturn")->connect_proxy (auto_return_button);
ActionManager::get_action ("Transport", "ToggleAutoPlay")->connect_proxy (auto_play_button); ActionManager::get_action ("Transport", "ToggleAutoPlay")->connect_proxy (auto_play_button);
ActionManager::get_action ("Transport", "ToggleAutoInput")->connect_proxy (auto_input_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.set_name ("TransportAuditioningAlert");
auditioning_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_toggle)); 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 (solo_alert_button, false, false);
alert_box.pack_start (auditioning_alert_button, false, false); alert_box.pack_start (auditioning_alert_button, false, false);

View file

@ -58,6 +58,7 @@ ARDOUR_UI::we_have_dependents ()
install_actions (); install_actions ();
ProcessorBox::register_actions (); ProcessorBox::register_actions ();
keyboard->setup_keybindings (); keyboard->setup_keybindings ();
editor->setup_tooltips ();
editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks)); editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
} }

View 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_label, false, false);
name_hbox.pack_start (name_entry, 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); audition_button.unset_flags (Gtk::CAN_FOCUS);

View file

@ -120,8 +120,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr<Ro
controls_table.set_no_show_all(); controls_table.set_no_show_all();
ARDOUR_UI::instance()->tooltips().set_tip(auto_button, _("automation state")); ARDOUR_UI::instance()->set_tip(auto_button, _("automation state"));
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("hide track")); ARDOUR_UI::instance()->set_tip(hide_button, _("hide track"));
/* rearrange the name display */ /* rearrange the name display */
@ -174,7 +174,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr<Ro
tipname += ": "; tipname += ": ";
} }
tipname += _name; tipname += _name;
ARDOUR_UI::instance()->tooltips().set_tip(controls_ebox, tipname); ARDOUR_UI::instance()->set_tip(controls_ebox, tipname);
} }
/* add the buttons */ /* add the buttons */

View file

@ -459,8 +459,6 @@ Editor::Editor ()
h->pack_start (edit_controls_vbox); h->pack_start (edit_controls_vbox);
controls_layout.add (*h); 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.set_name ("EditControlsBase");
controls_layout.add_events (Gdk::SCROLL_MASK); controls_layout.add_events (Gdk::SCROLL_MASK);
controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false); 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_forward_button.add (*(manage (new Image (::get_icon("nudge_right")))));
nudge_backward_button.add (*(manage (new Image (::get_icon("nudge_left"))))); 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_forward_button.set_name ("TransportButton");
nudge_backward_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_name ("EditorTimeButton");
zoom_in_button.set_image (*(manage (new Image (Stock::ZOOM_IN, Gtk::ICON_SIZE_BUTTON)))); 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)); 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_name ("EditorTimeButton");
zoom_out_button.set_image (*(manage (new Image (Stock::ZOOM_OUT, Gtk::ICON_SIZE_BUTTON)))); 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)); 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_name ("EditorTimeButton");
zoom_out_full_button.set_image (*(manage (new Image (Stock::ZOOM_100, Gtk::ICON_SIZE_BUTTON)))); 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)); 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"); zoom_focus_selector.set_name ("ZoomFocusSelector");
set_popdown_strings (zoom_focus_selector, zoom_focus_strings, true); 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)); 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_out_button, false, false);
zoom_box.pack_start (zoom_in_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.set_size_request(-1,20);
tav_expand_button.add (*(manage (new Image (::get_icon("tav_exp"))))); 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)); 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_name ("TrackHeightButton");
tav_shrink_button.set_size_request(-1,20); tav_shrink_button.set_size_request(-1,20);
tav_shrink_button.add (*(manage (new Image (::get_icon("tav_shrink"))))); 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)); 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_spacing (1);
track_zoom_box.set_border_width (0); track_zoom_box.set_border_width (0);
@ -2902,17 +2891,14 @@ Editor::setup_toolbar ()
snap_type_selector.set_name ("SnapTypeSelector"); snap_type_selector.set_name ("SnapTypeSelector");
set_popdown_strings (snap_type_selector, snap_type_strings, true); 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)); 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"); snap_mode_selector.set_name ("SnapModeSelector");
set_popdown_strings (snap_mode_selector, snap_mode_strings, true); 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)); 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"); edit_point_selector.set_name ("EditPointSelector");
set_popdown_strings (edit_point_selector, edit_point_strings, true); 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)); 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_mode_selector, false, false);
snap_box.pack_start (snap_type_selector, false, false); snap_box.pack_start (snap_type_selector, false, false);
@ -2974,6 +2960,33 @@ Editor::setup_toolbar ()
toolbar_frame.add (toolbar_base); 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 void
Editor::midi_panic () Editor::midi_panic ()
{ {
@ -2992,14 +3005,12 @@ Editor::setup_midi_toolbar ()
/* Midi sound notes */ /* Midi sound notes */
midi_sound_notes.add (*(manage (new Image (::get_icon("midi_sound_notes"))))); midi_sound_notes.add (*(manage (new Image (::get_icon("midi_sound_notes")))));
midi_sound_notes.set_relief(Gtk::RELIEF_NONE); 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); midi_sound_notes.unset_flags (CAN_FOCUS);
/* Panic */ /* Panic */
act = ActionManager::get_action (X_("MIDI"), X_("panic")); act = ActionManager::get_action (X_("MIDI"), X_("panic"));
midi_panic_button.set_name("MidiPanicButton"); 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); act->connect_proxy (midi_panic_button);
panic_box.pack_start (midi_sound_notes , true, true); panic_box.pack_start (midi_sound_notes , true, true);

View file

@ -1566,6 +1566,8 @@ public:
void setup_toolbar (); void setup_toolbar ();
void setup_tooltips ();
Gtkmm2ext::TearOff* tools_tearoff; Gtkmm2ext::TearOff* tools_tearoff;
Gtk::HBox toolbar_hbox; Gtk::HBox toolbar_hbox;
Gtk::EventBox toolbar_base; Gtk::EventBox toolbar_base;

View file

@ -612,16 +612,6 @@ Editor::register_actions ()
Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode")); Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
RadioAction::Group mouse_mode_group; 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 = 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); act->connect_proxy (mouse_move_button);
mouse_move_button.set_image (*(manage (new Image (::get_icon("tool_object"))))); mouse_move_button.set_image (*(manage (new Image (::get_icon("tool_object")))));

View file

@ -132,8 +132,8 @@ GainMeterBase::GainMeterBase (Session* s,
gain_automation_style_button.set_name ("MixerAutomationModeButton"); gain_automation_style_button.set_name ("MixerAutomationModeButton");
gain_automation_state_button.set_name ("MixerAutomationPlaybackButton"); gain_automation_state_button.set_name ("MixerAutomationPlaybackButton");
ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_state_button, _("Fader automation mode")); ARDOUR_UI::instance()->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_style_button, _("Fader automation type"));
gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS); gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
gain_automation_state_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_style_button.set_name ("MixerAutomationModeButton");
gain_automation_state_button.set_name ("MixerAutomationPlaybackButton"); gain_automation_state_button.set_name ("MixerAutomationPlaybackButton");
ARDOUR_UI::instance()->tooltips().set_tip (gain_automation_state_button, _("Fader automation mode")); ARDOUR_UI::instance()->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_style_button, _("Fader automation type"));
gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS); gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS); gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS);

View file

@ -315,7 +315,7 @@ GenericPluginUI::ControlUI::ControlUI ()
: automate_button (X_("")) // force creation of a label : automate_button (X_("")) // force creation of a label
{ {
automate_button.set_name ("PluginAutomateButton"); 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 /* XXX translators: use a string here that will be at least as long
as the longest automation label (see ::automation_state_changed() as the longest automation label (see ::automation_state_changed()

View file

@ -22,6 +22,7 @@
#include "ardour/filesystem_paths.h" #include "ardour/filesystem_paths.h"
#include "ardour_ui.h"
#include "keyboard.h" #include "keyboard.h"
#include "opts.h" #include "opts.h"
@ -38,9 +39,11 @@ accel_map_changed (GtkAccelMap* /*map*/,
gchar* /*path*/, gchar* /*path*/,
guint /*key*/, guint /*key*/,
GdkModifierType /*mod*/, GdkModifierType /*mod*/,
gpointer /*arg*/) gpointer keyboard)
{ {
ArdourKeyboard* me = (ArdourKeyboard*)keyboard;
Keyboard::keybindings_changed (); Keyboard::keybindings_changed ();
me->ui.setup_tooltips ();
} }
void void
@ -173,7 +176,7 @@ ArdourKeyboard::setup_keybindings ()
/* catch changes */ /* catch changes */
GtkAccelMap* accelmap = gtk_accel_map_get(); 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 Selection::Operation

View file

@ -25,15 +25,18 @@
#include "selection.h" #include "selection.h"
class ARDOUR_UI;
class ArdourKeyboard : public Gtkmm2ext::Keyboard class ArdourKeyboard : public Gtkmm2ext::Keyboard
{ {
public: public:
ArdourKeyboard() {} ArdourKeyboard(ARDOUR_UI& ardour_ui) : ui(ardour_ui) {}
void setup_keybindings (); void setup_keybindings ();
static Selection::Operation selection_type (guint state); static Selection::Operation selection_type (guint state);
ARDOUR_UI& ui;
}; };
#endif /* __ardour_keyboard_h__ */ #endif /* __ardour_keyboard_h__ */

View file

@ -260,18 +260,18 @@ LocationEditRow::set_location (Location *loc)
end_clock.show(); end_clock.show();
length_clock.show(); length_clock.show();
ARDOUR_UI::instance()->tooltips().set_tip (end_go_button, _("Jump to the end of this range")); ARDOUR_UI::instance()->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()->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()->set_tip (remove_button, _("Forget this range"));
ARDOUR_UI::instance()->tooltips().set_tip (start_clock, _("Start time")); ARDOUR_UI::instance()->set_tip (start_clock, _("Start time"));
ARDOUR_UI::instance()->tooltips().set_tip (end_clock, _("End time")); ARDOUR_UI::instance()->set_tip (end_clock, _("End time"));
ARDOUR_UI::instance()->tooltips().set_tip (length_clock, _("Length")); ARDOUR_UI::instance()->set_tip (length_clock, _("Length"));
} else { } else {
ARDOUR_UI::instance()->tooltips().set_tip (start_go_button, _("Jump to this marker")); ARDOUR_UI::instance()->set_tip (start_go_button, _("Jump to this marker"));
ARDOUR_UI::instance()->tooltips().set_tip (remove_button, _("Forget this marker")); ARDOUR_UI::instance()->set_tip (remove_button, _("Forget this marker"));
ARDOUR_UI::instance()->tooltips().set_tip (start_clock, _("Position")); ARDOUR_UI::instance()->set_tip (start_clock, _("Position"));
end_go_button.hide(); end_go_button.hide();
end_clock.hide(); end_clock.hide();

View file

@ -399,7 +399,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
delete route_ops_menu; delete route_ops_menu;
route_ops_menu = 0; 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"): _("Click to Add/Edit Comments"):
_route->comment()); _route->comment());
@ -1210,7 +1210,7 @@ MixerStrip::comment_editor_done_editing()
break; break;
} }
ARDOUR_UI::instance()->tooltips().set_tip (comment_button, ARDOUR_UI::instance()->set_tip (comment_button,
str.empty() ? _("Click to Add/Edit Comments") : str); str.empty() ? _("Click to Add/Edit Comments") : str);
} }

View file

@ -71,17 +71,17 @@ PannerUI::PannerUI (Session* s)
pan_automation_style_button.set_name ("MixerAutomationModeButton"); pan_automation_style_button.set_name ("MixerAutomationModeButton");
pan_automation_state_button.set_name ("MixerAutomationPlaybackButton"); pan_automation_state_button.set_name ("MixerAutomationPlaybackButton");
ARDOUR_UI::instance()->tooltips().set_tip (pan_automation_state_button, _("Pan automation mode")); ARDOUR_UI::instance()->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_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_state_button, X_("O"), 2, 2);
//set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2); //set_size_request_to_display_given_text (pan_automation_style_button, X_("0"), 2, 2);
panning_viewport.set_name (X_("BaseFrame")); 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")); _("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")); _("panning link direction"));
pan_automation_style_button.unset_flags (Gtk::CAN_FOCUS); pan_automation_style_button.unset_flags (Gtk::CAN_FOCUS);
@ -424,7 +424,7 @@ PannerUI::setup_pan ()
char buf[64]; char buf[64];
snprintf (buf, sizeof (buf), _("panner for channel %zu"), asz + 1); 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 bc->event_widget().signal_button_release_event().connect
(sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz)); (sigc::bind (sigc::mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz));

View file

@ -127,13 +127,13 @@ PluginSelector::PluginSelector (PluginManager *mgr)
ascroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); ascroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
ascroller.add(added_list); ascroller.add(added_list);
btn_add = manage(new Gtk::Button(Stock::ADD)); 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_add->set_sensitive (false);
btn_remove = manage(new Gtk::Button(Stock::REMOVE)); btn_remove = manage(new Gtk::Button(Stock::REMOVE));
btn_remove->set_sensitive (false); 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)); 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_add->set_name("PluginSelectorButton");
btn_remove->set_name("PluginSelectorButton"); btn_remove->set_name("PluginSelectorButton");

View file

@ -988,7 +988,7 @@ ProcessorBox::build_processor_tooltip (EventBox& box, string start)
tip += (*i)->processor()->name(); tip += (*i)->processor()->name();
} }
ARDOUR_UI::instance()->tooltips().set_tip (box, tip); ARDOUR_UI::instance()->set_tip (box, tip);
} }
void void

View file

@ -94,6 +94,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
virtual bool have_idled() const = 0; virtual bool have_idled() const = 0;
virtual void first_idle() = 0; virtual void first_idle() = 0;
virtual void setup_tooltips() = 0;
/** Attach this editor to a Session. /** Attach this editor to a Session.
* @param s Session to connect to. * @param s Session to connect to.
*/ */

View file

@ -183,7 +183,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh
rec_enable_button->show_all (); 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); 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()); 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 (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); 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()->set_tip(*solo_button,_("Solo"));
ARDOUR_UI::instance()->tooltips().set_tip(*mute_button,_("Mute")); ARDOUR_UI::instance()->set_tip(*mute_button,_("Mute"));
ARDOUR_UI::instance()->tooltips().set_tip(route_group_button, _("Route Group")); ARDOUR_UI::instance()->set_tip(route_group_button, _("Route Group"));
ARDOUR_UI::instance()->tooltips().set_tip(size_button,_("Display Height")); ARDOUR_UI::instance()->set_tip(size_button,_("Display Height"));
ARDOUR_UI::instance()->tooltips().set_tip(playlist_button,_("Playlist")); ARDOUR_UI::instance()->set_tip(playlist_button,_("Playlist"));
ARDOUR_UI::instance()->tooltips().set_tip(automation_button, _("Automation")); ARDOUR_UI::instance()->set_tip(automation_button, _("Automation"));
ARDOUR_UI::instance()->tooltips().set_tip(visual_button, _("Visual options")); ARDOUR_UI::instance()->set_tip(visual_button, _("Visual options"));
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("Hide this track")); ARDOUR_UI::instance()->set_tip(hide_button, _("Hide this track"));
label_view (); label_view ();
@ -341,7 +341,7 @@ RouteTimeAxisView::label_view ()
name_entry.set_text (x); name_entry.set_text (x);
} }
ARDOUR_UI::instance()->tooltips().set_tip (name_entry, x); ARDOUR_UI::instance()->set_tip (name_entry, x);
} }
void void

View 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)) ; 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)) ; visual_button.signal_clicked().connect (sigc::mem_fun (*this, &VisualTimeAxis::visual_click)) ;
hide_button.signal_clicked().connect (sigc::mem_fun (*this, &VisualTimeAxis::hide_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()->set_tip(size_button,_("Display Height")) ;
ARDOUR_UI::instance()->tooltips().set_tip(visual_button, _("Visual options")) ; ARDOUR_UI::instance()->set_tip(visual_button, _("Visual options")) ;
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("Hide this track")) ; 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 (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); 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_label.set_text(time_axis_name) ;
name_entry.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) ;
} }

View file

@ -38,6 +38,7 @@
#include <gtkmm2ext/popup.h> #include <gtkmm2ext/popup.h>
#include <gtkmm2ext/utils.h> #include <gtkmm2ext/utils.h>
#include <gtkmm2ext/window_title.h> #include <gtkmm2ext/window_title.h>
#include <gtkmm2ext/actions.h>
#include "i18n.h" #include "i18n.h"
@ -297,17 +298,40 @@ UI::touch_display (Touchable *display)
send_request (req); 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 void
UI::set_tip (Widget *w, const gchar *tip, const gchar *hlp) UI::set_tip (Widget *w, const gchar *tip, const gchar *hlp)
{ {
UIRequest *req = get_request (SetTip); 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) { if (req == 0) {
return; return;
} }
req->widget = w; req->widget = w;
req->msg = tip; req->msg = msg.c_str();
req->msg2 = hlp; req->msg2 = hlp;
send_request (req); send_request (req);

View file

@ -113,7 +113,9 @@ class UI : public Receiver, public AbstractUI<UIRequest>
void flush_pending (); void flush_pending ();
void toggle_errors (); void toggle_errors ();
void touch_display (Touchable *); 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); void idle_add (int (*func)(void *), void *arg);
Gtk::Main& main() const { return *theMain; } Gtk::Main& main() const { return *theMain; }