mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
change how mouse mode actions are defined
they now use a lambda for the functor, and the lambda calls current_editing_context() to pick which EditingContext will be affected. this design replaces one where each EditingContext had its own set of mouse mode actions defined, using its own name as the action group
This commit is contained in:
parent
462c5ad400
commit
22a5113b59
7 changed files with 67 additions and 67 deletions
|
|
@ -159,22 +159,22 @@ This mode provides many different operations on both regions and control points,
|
|||
@gmark|Common/jump-backward-to-mark| q|to previous mark
|
||||
@sess|Common/Quit| <@PRIMARY@>q|quit
|
||||
@gmark|Common/jump-forward-to-mark| w|to next mark
|
||||
@mmode|Editor/set-mouse-mode-content| e|content mode
|
||||
@mmode|Editing/set-mouse-mode-content| e|content mode
|
||||
@sess|Main/QuickExport| <@PRIMARY@>e|quick export session
|
||||
@rop|Region/export-region| <@PRIMARY@><@SECONDARY@>e|export selected region(s)
|
||||
@sess|Main/ExportAudio| <@SECONDARY@>e|export session
|
||||
@sess|Main/StemExport| <@SECONDARY@><@TERTIARY@>e|stem export selected tracks
|
||||
@select|Editor/select-all-after-edit-cursor| <@PRIMARY@><@TERTIARY@>e|select all after EP
|
||||
@vis|Editor/show-editor-mixer| <@TERTIARY@>e|toggle editor window mixer
|
||||
@mmode|Editor/set-mouse-mode-range| r|range mode
|
||||
@mmode|Editing/set-mouse-mode-range| r|range mode
|
||||
@wvis|Common/show-recorder| <@SECONDARY@>r|show recorder page
|
||||
@editing|Editing/redo| <@PRIMARY@>r|redo
|
||||
@edit|Editor/select-from-regions| <@PRIMARY@><@TERTIARY@>r|set Range to selected regions
|
||||
@edit|Editor/add-range-marker-from-selection| <@SECONDARY@><@TERTIARY@>r|Add single Range marker from selection
|
||||
@trans|Transport/Record| <@TERTIARY@>r|engage record
|
||||
@mmode|Editor/set-mouse-mode-timefx| t|timefx mode
|
||||
@mmode|Editing/set-mouse-mode-timefx| t|timefx mode
|
||||
@gselect|Common/select-all-visible-lanes| <@PRIMARY@>t|select all visible lanes
|
||||
@mmode|Editor/set-mouse-mode-grid| y|grid mode
|
||||
@mmode|Editing/set-mouse-mode-grid| y|grid mode
|
||||
@editing|Editing/alternate-redo| <@PRIMARY@>y|redo
|
||||
@select|Editor/select-all-between-cursors| <@PRIMARY@>u|select all regions enclosed by Range
|
||||
@select|Editor/select-all-within-cursors| u|select all regions touched by Range
|
||||
|
|
@ -202,7 +202,7 @@ This mode provides many different operations on both regions and control points,
|
|||
@sess|Main/SnapshotStay| <@PRIMARY@><@TERTIARY@>s|snapshot session
|
||||
@edtrk|Editor/track-solo-toggle| <@SECONDARY@>s|toggle track solo status
|
||||
@edit|Editor/ToggleSummary| <@TERTIARY@>s|toggle summary
|
||||
@mmode|Editor/set-mouse-mode-draw| d|note-draw mode
|
||||
@mmode|Editing/set-mouse-mode-draw| d|note-draw mode
|
||||
@edit|Editor/duplicate| <@PRIMARY@>d|duplicate (once)
|
||||
@edit|Editor/multi-duplicate| <@SECONDARY@>d|duplicate (multi)
|
||||
@select|Editor/select-all-in-punch-range| <@TERTIARY@>d|select all in punch range
|
||||
|
|
@ -212,7 +212,7 @@ This mode provides many different operations on both regions and control points,
|
|||
@rop|Region/show-rhythm-ferret| <@SECONDARY@>f|show rhythm ferret window
|
||||
@wvis|Common/ToggleMaximalEditor| <@PRIMARY@><@SECONDARY@>f|maximise editor space
|
||||
@wvis|Common/ToggleMaximalMixer| <@PRIMARY@><@TERTIARY@>f|maximise mixer space
|
||||
@mmode|Editor/set-mouse-mode-object| g|object mode
|
||||
@mmode|Editing/set-mouse-mode-object| g|object mode
|
||||
@edit|Editor/group-selected-regions| <@PRIMARY@>g|group selected regions
|
||||
@edit|Editor/ungroup-selected-regions| <@PRIMARY@><@TERTIARY@>g|ungroup selected regions
|
||||
@edit|Region/play-selected-regions| h|play selected region(s)
|
||||
|
|
@ -233,7 +233,7 @@ This mode provides many different operations on both regions and control points,
|
|||
@aep|Region/align-regions-sync-relative| x|align sync points (relative)
|
||||
@editing|Editing/editor-cut| <@PRIMARY@>x|cut
|
||||
@edit|Editor/cut-paste-section| <@PRIMARY@><@TERTIARY@>x|cut \& paste section
|
||||
@mmode|Editor/set-mouse-mode-cut| c|cut mode
|
||||
@mmode|Editing/set-mouse-mode-cut| c|cut mode
|
||||
@editing|Editing/editor-copy| <@PRIMARY@>c|copy
|
||||
@wvis|Common/show-trigger| <@SECONDARY@>c|show cues page
|
||||
@edit|Editor/editor-crop| <@PRIMARY@><@SECONDARY@>c|crop range
|
||||
|
|
@ -393,7 +393,7 @@ This mode provides many different operations on both regions and control points,
|
|||
@eep|Editor/cycle-edit-mode| 1|cycle edit mode {slide, lock, ripple}
|
||||
@eep|Editor/cycle-edit-point| 2|next EP w/o marker {playhead, mouse}
|
||||
@eep|Editor/cycle-edit-point-with-marker| <@PRIMARY@>2|next EP w/marker {playhead, mouse, marker}
|
||||
@mmode|Editor/set-mouse-mode-object-range| 3|Smart Mode (provide some Range tools in Object mode)
|
||||
@mmode|Editing/set-mouse-mode-object-range| 3|Smart Mode (provide some Range tools in Object mode)
|
||||
@gmode|Transport/ToggleFollowEdits| <@PRIMARY@>3|toggle playhead follows edits
|
||||
@grid|Editor/cycle-snap-mode| 4|cycle to next snap mode {On/Off}
|
||||
@grid|Editor/prev-grid-choice| 5|use prev grid unit
|
||||
|
|
|
|||
|
|
@ -313,6 +313,16 @@ EditingContext::register_common_actions (Bindings* common_bindings)
|
|||
reg_sens (_common_actions, "editor-cut", _("Cut"), []() { current_editing_context()->cut() ; });
|
||||
reg_sens (_common_actions, "editor-copy", _("Copy"), []() { current_editing_context()->copy() ; });
|
||||
reg_sens (_common_actions, "editor-paste", _("Paste"), []() { current_editing_context()->keyboard_paste() ; });
|
||||
|
||||
RadioAction::Group mouse_mode_group;
|
||||
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-object", _("Grab (Object Tool)"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseObject); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseRange); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseDraw); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseTimeFX); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-grid", _("Grid Tool"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseGrid); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-content", _("Internal Edit (Content Tool)"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseContent); });
|
||||
ActionManager::register_radio_action (_common_actions, mouse_mode_group, "set-mouse-mode-cut", _("Cut Tool"), []() { current_editing_context()->mouse_mode_toggled (Editing::MouseCut); });
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -2157,46 +2167,25 @@ EditingContext::pack_snap_box ()
|
|||
Glib::RefPtr<Action>
|
||||
EditingContext::get_mouse_mode_action (MouseMode m) const
|
||||
{
|
||||
char const * group_name = _name.c_str(); /* use char* to force correct ::get_action variant */
|
||||
|
||||
switch (m) {
|
||||
case MouseRange:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-range"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-range"));
|
||||
case MouseObject:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-object"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-object"));
|
||||
case MouseCut:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-cut"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-cut"));
|
||||
case MouseDraw:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-draw"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-draw"));
|
||||
case MouseTimeFX:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-timefx"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-timefx"));
|
||||
case MouseGrid:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-grid"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-grid"));
|
||||
case MouseContent:
|
||||
return ActionManager::get_action (group_name, X_("set-mouse-mode-content"));
|
||||
return ActionManager::get_action (X_("Editing"), X_("set-mouse-mode-content"));
|
||||
}
|
||||
return Glib::RefPtr<Action>();
|
||||
}
|
||||
|
||||
void
|
||||
EditingContext::register_mouse_mode_actions ()
|
||||
{
|
||||
RefPtr<Action> act;
|
||||
std::string group_name = _name;
|
||||
Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionManager::create_action_group (bindings, group_name);
|
||||
RadioAction::Group mouse_mode_group;
|
||||
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Grab (Object Tool)"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseObject));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseRange));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseDraw));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseTimeFX));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-grid", _("Grid Tool"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseGrid));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Internal Edit (Content Tool)"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseContent));
|
||||
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-cut", _("Cut Tool"), std::bind (&EditingContext::mouse_mode_toggled, this, Editing::MouseCut));
|
||||
|
||||
add_mouse_mode_actions (mouse_mode_actions);
|
||||
}
|
||||
|
||||
void
|
||||
EditingContext::bind_mouse_mode_buttons ()
|
||||
{
|
||||
|
|
@ -3275,4 +3264,25 @@ EditingContext::copy ()
|
|||
cut_copy (Copy);
|
||||
}
|
||||
|
||||
void
|
||||
EditingContext::load_shared_bindings ()
|
||||
{
|
||||
/* This set of bindings may expand in the future to include things
|
||||
* other than MIDI editing, but for now this is all we've got as far as
|
||||
* bindings that need to be distinct from the Editors (because some of
|
||||
* the keys may overlap.
|
||||
*/
|
||||
|
||||
Bindings* midi_bindings = Bindings::get_bindings (X_("MIDI"));
|
||||
register_midi_actions (midi_bindings);
|
||||
|
||||
Bindings* shared_bindings = Bindings::get_bindings (X_("Editing"));
|
||||
register_common_actions (shared_bindings);
|
||||
|
||||
/* Give this editing context the chance to add more mode mode actions */
|
||||
add_mouse_mode_actions (_common_actions);
|
||||
|
||||
/* Attach bindings to the canvas for this editing context */
|
||||
get_canvas()->set_data ("ardour-bindings", midi_bindings);
|
||||
get_canvas_viewport()->set_data ("ardour-bindings", shared_bindings);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -481,6 +481,8 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
|
|||
static Glib::RefPtr<Gtk::ActionGroup> _midi_actions;
|
||||
static Glib::RefPtr<Gtk::ActionGroup> _common_actions;
|
||||
|
||||
void load_shared_bindings ();
|
||||
|
||||
Editing::GridType pre_internal_grid_type;
|
||||
Editing::SnapMode pre_internal_snap_mode;
|
||||
Editing::GridType internal_grid_type;
|
||||
|
|
@ -679,7 +681,6 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
|
|||
void register_grid_actions ();
|
||||
|
||||
Glib::RefPtr<Gtk::Action> get_mouse_mode_action (Editing::MouseMode m) const;
|
||||
void register_mouse_mode_actions ();
|
||||
void bind_mouse_mode_buttons ();
|
||||
virtual void add_mouse_mode_actions (Glib::RefPtr<Gtk::ActionGroup>) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -554,7 +554,6 @@ Editor::register_actions ()
|
|||
act->set_sensitive (false);
|
||||
}
|
||||
|
||||
register_mouse_mode_actions ();
|
||||
bind_mouse_mode_buttons ();
|
||||
|
||||
ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true));
|
||||
|
|
@ -765,20 +764,7 @@ Editor::load_bindings ()
|
|||
bindings = Bindings::get_bindings (editor_name());
|
||||
contents().set_data ("ardour-bindings", bindings);
|
||||
|
||||
/* This set of bindings may expand in the future to include things
|
||||
* other than MIDI editing, but for now this is all we've got as far as
|
||||
* bindings that need to be distinct from the Editors (because some of
|
||||
* the keys may overlap.
|
||||
*/
|
||||
|
||||
Bindings* midi_bindings = Bindings::get_bindings (X_("MIDI"));
|
||||
register_midi_actions (midi_bindings);
|
||||
|
||||
Bindings* shared_bindings = Bindings::get_bindings (X_("Editing"));
|
||||
register_common_actions (shared_bindings);
|
||||
|
||||
_track_canvas_viewport->canvas()->set_data ("ardour-bindings", midi_bindings);
|
||||
_track_canvas_viewport->set_data ("ardour-bindings", shared_bindings);
|
||||
EditingContext::load_shared_bindings ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1341,11 +1327,11 @@ Editor::register_region_actions ()
|
|||
}
|
||||
|
||||
void
|
||||
Editor::add_mouse_mode_actions (Glib::RefPtr<ActionGroup> mouse_mode_actions)
|
||||
Editor::add_mouse_mode_actions (Glib::RefPtr<ActionGroup> action_group)
|
||||
{
|
||||
RefPtr<Action> act;
|
||||
|
||||
act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
|
||||
act = ActionManager::register_toggle_action (action_group, "set-mouse-mode-object-range", _("Smart Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
|
||||
smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
|
||||
smart_mode_button.set_related_action (smart_mode_action);
|
||||
smart_mode_button.set_text (_("Smart"));
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<Bindings name="Pianoroll">
|
||||
<Press>
|
||||
<Binding key="d" action="Pianoroll/set-mouse-mode-draw" group="pianoroll"/>
|
||||
<Binding key="e" action="Pianoroll/set-mouse-mode-content" group="pianoroll"/>
|
||||
<Binding key="equal" action="Pianoroll/zoom-in" group="pianoroll"/>
|
||||
<Binding key="minus" action="Pianoroll/zoom-in" group="pianoroll"/>
|
||||
</Press>
|
||||
</Bindings>
|
||||
|
|
@ -70,10 +70,6 @@ Pianoroll::Pianoroll (std::string const & name)
|
|||
mouse_mode = Editing::MouseContent;
|
||||
autoscroll_vertical_allowed = false;
|
||||
|
||||
bindings = Bindings::get_bindings (editor_name());
|
||||
|
||||
register_actions ();
|
||||
|
||||
build_grid_type_menu ();
|
||||
build_draw_midi_menus();
|
||||
|
||||
|
|
@ -81,7 +77,14 @@ Pianoroll::Pianoroll (std::string const & name)
|
|||
build_canvas ();
|
||||
build_lower_toolbar ();
|
||||
|
||||
load_bindings ();
|
||||
register_actions ();
|
||||
|
||||
/* this is weird because it will use an action that uses current_editing_context */
|
||||
EditingContext* ec = current_editing_context ();
|
||||
switch_editing_context (this);
|
||||
set_mouse_mode (Editing::MouseContent, true);
|
||||
switch_editing_context (ec);
|
||||
}
|
||||
|
||||
Pianoroll::~Pianoroll ()
|
||||
|
|
@ -89,11 +92,18 @@ Pianoroll::~Pianoroll ()
|
|||
delete bindings;
|
||||
}
|
||||
|
||||
void
|
||||
Pianoroll::load_bindings ()
|
||||
{
|
||||
bindings = Bindings::get_bindings (editor_name());
|
||||
load_shared_bindings ();
|
||||
}
|
||||
|
||||
void
|
||||
Pianoroll::register_actions ()
|
||||
{
|
||||
editor_actions = ActionManager::create_action_group (bindings, editor_name());
|
||||
register_mouse_mode_actions ();
|
||||
|
||||
bind_mouse_mode_buttons ();
|
||||
register_grid_actions ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ class Pianoroll : public CueEditor
|
|||
void cut_copy (Editing::CutCopyOp);
|
||||
|
||||
protected:
|
||||
void load_bindings ();
|
||||
void register_actions ();
|
||||
|
||||
Temporal::timepos_t snap_to_grid (Temporal::timepos_t const & start,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue