Add editing mode to select marker click behavior
So far this only adds actions, not a GUI dropdown or
context menu. See also f9a121ce9c
This commit is contained in:
parent
810da43be6
commit
36f8d48e93
|
@ -182,6 +182,14 @@ const char *notenamedisplaystrs[] = {
|
||||||
#undef NOTENAMEDISPLAY
|
#undef NOTENAMEDISPLAY
|
||||||
#define NOTENAMEDISPLAY(a) /*empty*/
|
#define NOTENAMEDISPLAY(a) /*empty*/
|
||||||
|
|
||||||
|
#undef MARKERCLICKBEHAVIOR
|
||||||
|
#define MARKERCLICKBEHAVIOR(s) N_(#s),
|
||||||
|
const char *markerclickbehaviorstrs[] = {
|
||||||
|
#include "editing_syms.h"
|
||||||
|
0
|
||||||
|
};
|
||||||
|
#undef MARKERCLICKBEHAVIOR
|
||||||
|
#define MARKERCLICKBEHAVIOR(a) /*empty*/
|
||||||
|
|
||||||
} // namespace Editing
|
} // namespace Editing
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#define INSERTTIMEOPT(a) /*empty*/
|
#define INSERTTIMEOPT(a) /*empty*/
|
||||||
#define TEMPOEDITBEHAVIOR(a) /*empty*/
|
#define TEMPOEDITBEHAVIOR(a) /*empty*/
|
||||||
#define NOTENAMEDISPLAY(a) /*empty*/
|
#define NOTENAMEDISPLAY(a) /*empty*/
|
||||||
|
#define MARKERCLICKBEHAVIOR(a) /*empty*/
|
||||||
|
|
||||||
namespace Editing {
|
namespace Editing {
|
||||||
|
|
||||||
|
@ -211,6 +212,18 @@ inline const char* enum2str(NoteNameDisplay m) {return notenamedisplaystrs[m];}
|
||||||
#undef NOTENAMEDISPLAY
|
#undef NOTENAMEDISPLAY
|
||||||
#define NOTENAMEDISPLAY(a) /*empty*/
|
#define NOTENAMEDISPLAY(a) /*empty*/
|
||||||
|
|
||||||
|
#undef MARKERCLICKBEHAVIOR
|
||||||
|
#define MARKERCLICKBEHAVIOR(a) a,
|
||||||
|
enum MarkerClickBehavior {
|
||||||
|
#include "editing_syms.h"
|
||||||
|
};
|
||||||
|
#undef MARKERCLICKBEHAVIOR
|
||||||
|
#define MARKERCLICKBEHAVIOR(a) /*empty*/
|
||||||
|
|
||||||
|
extern const char *markerclickbehaviorstrs[];
|
||||||
|
inline const char* enum2str(MarkerClickBehavior m) {return markerclickbehaviorstrs[m];}
|
||||||
|
MarkerClickBehavior str2markerclickbehavior(const std::string &);
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// These don't need their state saved. yet...
|
// These don't need their state saved. yet...
|
||||||
enum CutCopyOp {
|
enum CutCopyOp {
|
||||||
|
|
|
@ -33,6 +33,7 @@ DEFINE_ENUM_CONVERT(Editing::EditPoint)
|
||||||
DEFINE_ENUM_CONVERT(Editing::RegionListSortType)
|
DEFINE_ENUM_CONVERT(Editing::RegionListSortType)
|
||||||
DEFINE_ENUM_CONVERT(Editing::MouseMode)
|
DEFINE_ENUM_CONVERT(Editing::MouseMode)
|
||||||
DEFINE_ENUM_CONVERT(Editing::NoteNameDisplay)
|
DEFINE_ENUM_CONVERT(Editing::NoteNameDisplay)
|
||||||
|
DEFINE_ENUM_CONVERT(Editing::MarkerClickBehavior)
|
||||||
|
|
||||||
} // namespace PBD
|
} // namespace PBD
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,10 @@ INSERTTIMEOPT(LeaveIntersected)
|
||||||
INSERTTIMEOPT(MoveIntersected)
|
INSERTTIMEOPT(MoveIntersected)
|
||||||
INSERTTIMEOPT(SplitIntersected)
|
INSERTTIMEOPT(SplitIntersected)
|
||||||
|
|
||||||
|
MARKERCLICKBEHAVIOR(MarkerClickSelectOnly)
|
||||||
|
MARKERCLICKBEHAVIOR(MarkerClickLocate)
|
||||||
|
MARKERCLICKBEHAVIOR(MarkerClickLocateWhenStopped)
|
||||||
|
|
||||||
NOTENAMEDISPLAY(Always)
|
NOTENAMEDISPLAY(Always)
|
||||||
NOTENAMEDISPLAY(WithMIDNAM)
|
NOTENAMEDISPLAY(WithMIDNAM)
|
||||||
NOTENAMEDISPLAY(Never)
|
NOTENAMEDISPLAY(Never)
|
||||||
|
|
|
@ -267,6 +267,7 @@ Editor::Editor ()
|
||||||
, pre_internal_snap_mode (SnapOff)
|
, pre_internal_snap_mode (SnapOff)
|
||||||
, internal_grid_type (GridTypeBeat)
|
, internal_grid_type (GridTypeBeat)
|
||||||
, internal_snap_mode (SnapOff)
|
, internal_snap_mode (SnapOff)
|
||||||
|
, marker_click_behavior (MarkerClickSelectOnly)
|
||||||
, _join_object_range_state (JOIN_OBJECT_RANGE_NONE)
|
, _join_object_range_state (JOIN_OBJECT_RANGE_NONE)
|
||||||
, _notebook_shrunk (false)
|
, _notebook_shrunk (false)
|
||||||
, entered_marker (0)
|
, entered_marker (0)
|
||||||
|
@ -2527,6 +2528,9 @@ Editor::set_state (const XMLNode& node, int version)
|
||||||
node.get_property ("zoom-focus", zoom_focus);
|
node.get_property ("zoom-focus", zoom_focus);
|
||||||
zoom_focus_selection_done (zoom_focus);
|
zoom_focus_selection_done (zoom_focus);
|
||||||
|
|
||||||
|
node.get_property ("marker-click-behavior", marker_click_behavior);
|
||||||
|
marker_click_behavior_selection_done (marker_click_behavior);
|
||||||
|
|
||||||
double z;
|
double z;
|
||||||
if (node.get_property ("zoom", z)) {
|
if (node.get_property ("zoom", z)) {
|
||||||
/* older versions of ardour used floating point samples_per_pixel */
|
/* older versions of ardour used floating point samples_per_pixel */
|
||||||
|
@ -2738,6 +2742,7 @@ Editor::get_state () const
|
||||||
node->set_property ("pre-internal-snap-mode", pre_internal_snap_mode);
|
node->set_property ("pre-internal-snap-mode", pre_internal_snap_mode);
|
||||||
node->set_property ("edit-point", _edit_point);
|
node->set_property ("edit-point", _edit_point);
|
||||||
node->set_property ("visible-track-count", _visible_track_count);
|
node->set_property ("visible-track-count", _visible_track_count);
|
||||||
|
node->set_property ("marker-click-behavior", marker_click_behavior);
|
||||||
|
|
||||||
node->set_property ("draw-length", _draw_length);
|
node->set_property ("draw-length", _draw_length);
|
||||||
node->set_property ("draw-velocity", _draw_velocity);
|
node->set_property ("draw-velocity", _draw_velocity);
|
||||||
|
@ -4139,6 +4144,15 @@ Editor::zoom_focus_selection_done (ZoomFocus f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::marker_click_behavior_selection_done (MarkerClickBehavior m)
|
||||||
|
{
|
||||||
|
RefPtr<RadioAction> ract = marker_click_behavior_action (m);
|
||||||
|
if (ract) {
|
||||||
|
ract->set_active ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::build_track_count_menu ()
|
Editor::build_track_count_menu ()
|
||||||
{
|
{
|
||||||
|
@ -4327,6 +4341,31 @@ Editor::cycle_zoom_focus ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::set_marker_click_behavior (MarkerClickBehavior m)
|
||||||
|
{
|
||||||
|
if (marker_click_behavior != m) {
|
||||||
|
marker_click_behavior = m;
|
||||||
|
instant_save ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::cycle_marker_click_behavior ()
|
||||||
|
{
|
||||||
|
switch (marker_click_behavior) {
|
||||||
|
case MarkerClickSelectOnly:
|
||||||
|
set_marker_click_behavior (MarkerClickLocate);
|
||||||
|
break;
|
||||||
|
case MarkerClickLocate:
|
||||||
|
set_marker_click_behavior (MarkerClickLocateWhenStopped);
|
||||||
|
break;
|
||||||
|
case MarkerClickLocateWhenStopped:
|
||||||
|
set_marker_click_behavior (MarkerClickSelectOnly);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::update_grid ()
|
Editor::update_grid ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -353,6 +353,10 @@ public:
|
||||||
void tav_zoom_step (bool coarser);
|
void tav_zoom_step (bool coarser);
|
||||||
void tav_zoom_smooth (bool coarser, bool force_all);
|
void tav_zoom_smooth (bool coarser, bool force_all);
|
||||||
|
|
||||||
|
void cycle_marker_click_behavior ();
|
||||||
|
void set_marker_click_behavior (Editing::MarkerClickBehavior);
|
||||||
|
Editing::MarkerClickBehavior get_marker_click_behavior () const { return marker_click_behavior; }
|
||||||
|
|
||||||
/* stuff that AudioTimeAxisView and related classes use */
|
/* stuff that AudioTimeAxisView and related classes use */
|
||||||
|
|
||||||
void clear_playlist (std::shared_ptr<ARDOUR::Playlist>);
|
void clear_playlist (std::shared_ptr<ARDOUR::Playlist>);
|
||||||
|
@ -685,6 +689,8 @@ private:
|
||||||
Editing::SnapMode internal_snap_mode;
|
Editing::SnapMode internal_snap_mode;
|
||||||
Editing::MouseMode effective_mouse_mode () const;
|
Editing::MouseMode effective_mouse_mode () const;
|
||||||
|
|
||||||
|
Editing::MarkerClickBehavior marker_click_behavior;
|
||||||
|
|
||||||
enum JoinObjectRangeState {
|
enum JoinObjectRangeState {
|
||||||
JOIN_OBJECT_RANGE_NONE,
|
JOIN_OBJECT_RANGE_NONE,
|
||||||
/** `join object/range' mode is active and the mouse is over a place where object mode should happen */
|
/** `join object/range' mode is active and the mouse is over a place where object mode should happen */
|
||||||
|
@ -2055,6 +2061,11 @@ private:
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::RadioAction> zoom_focus_action (Editing::ZoomFocus);
|
Glib::RefPtr<Gtk::RadioAction> zoom_focus_action (Editing::ZoomFocus);
|
||||||
|
|
||||||
|
/* Marker Click Radio */
|
||||||
|
Glib::RefPtr<Gtk::RadioAction> marker_click_behavior_action (Editing::MarkerClickBehavior);
|
||||||
|
void marker_click_behavior_chosen (Editing::MarkerClickBehavior);
|
||||||
|
void marker_click_behavior_selection_done (Editing::MarkerClickBehavior);
|
||||||
|
|
||||||
Gtk::HBox _track_box;
|
Gtk::HBox _track_box;
|
||||||
|
|
||||||
Gtk::HBox _zoom_box;
|
Gtk::HBox _zoom_box;
|
||||||
|
|
|
@ -556,6 +556,14 @@ Editor::register_actions ()
|
||||||
|
|
||||||
ActionManager::register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus));
|
ActionManager::register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus));
|
||||||
|
|
||||||
|
Glib::RefPtr<ActionGroup> marker_click_actions = ActionManager::create_action_group (bindings, X_("MarkerClickBehavior"));
|
||||||
|
RadioAction::Group marker_click_group;
|
||||||
|
|
||||||
|
radio_reg_sens (marker_click_actions, marker_click_group, "marker-click-select-only", _("Marker Click Only Selects"), sigc::bind (sigc::mem_fun(*this, &Editor::marker_click_behavior_chosen), Editing::MarkerClickSelectOnly));
|
||||||
|
radio_reg_sens (marker_click_actions, marker_click_group, "marker-click-locate", _("Locate to Marker on Click"), sigc::bind (sigc::mem_fun(*this, &Editor::marker_click_behavior_chosen), Editing::MarkerClickLocate));
|
||||||
|
radio_reg_sens (marker_click_actions, marker_click_group, "marker-click-locate-when-stopped", _("Locate To Marker When Transport Is Not Rolling "), sigc::bind (sigc::mem_fun(*this, &Editor::marker_click_behavior_chosen), Editing::MarkerClickLocateWhenStopped));
|
||||||
|
ActionManager::register_action (editor_actions, X_("cycle-marker-click-behavior"), _("Next Marker Click Mode"), sigc::mem_fun (*this, &Editor::cycle_marker_click_behavior));
|
||||||
|
|
||||||
Glib::RefPtr<ActionGroup> lua_script_actions = ActionManager::create_action_group (bindings, X_("LuaAction"));
|
Glib::RefPtr<ActionGroup> lua_script_actions = ActionManager::create_action_group (bindings, X_("LuaAction"));
|
||||||
|
|
||||||
for (int i = 1; i <= MAX_LUA_ACTION_SCRIPTS; ++i) {
|
for (int i = 1; i <= MAX_LUA_ACTION_SCRIPTS; ++i) {
|
||||||
|
@ -1638,6 +1646,26 @@ Editor::edit_point_chosen (EditPoint ep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RefPtr<RadioAction>
|
||||||
|
Editor::marker_click_behavior_action (MarkerClickBehavior m)
|
||||||
|
{
|
||||||
|
const char* action = 0;
|
||||||
|
RefPtr<Action> act;
|
||||||
|
|
||||||
|
switch (m) {
|
||||||
|
case MarkerClickSelectOnly:
|
||||||
|
action = X_("marker-click-select-only");
|
||||||
|
break;
|
||||||
|
case MarkerClickLocate:
|
||||||
|
action = X_("marker-click-locate");
|
||||||
|
break;
|
||||||
|
case MarkerClickLocateWhenStopped:
|
||||||
|
action = X_("marker-click-locate-when-stopped");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ActionManager::get_radio_action (X_("MarkerClickBehavior"), action);
|
||||||
|
}
|
||||||
|
|
||||||
RefPtr<RadioAction>
|
RefPtr<RadioAction>
|
||||||
Editor::zoom_focus_action (ZoomFocus focus)
|
Editor::zoom_focus_action (ZoomFocus focus)
|
||||||
|
@ -1697,6 +1725,15 @@ Editor::zoom_focus_chosen (ZoomFocus focus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::marker_click_behavior_chosen (Editing::MarkerClickBehavior m)
|
||||||
|
{
|
||||||
|
RefPtr<RadioAction> ract = marker_click_behavior_action (m);
|
||||||
|
if (ract && ract->get_active()) {
|
||||||
|
set_marker_click_behavior (m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** A Configuration parameter has changed.
|
/** A Configuration parameter has changed.
|
||||||
* @param parameter_name Name of the changed parameter.
|
* @param parameter_name Name of the changed parameter.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4645,7 +4645,19 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
_editor->commit_reversible_selection_op ();
|
_editor->commit_reversible_selection_op ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_editor->session()->config.get_external_sync () && (_editor->edit_point() != Editing::EditAtSelectedMarker)) {
|
bool do_locate;
|
||||||
|
switch (_editor->get_marker_click_behavior ()) {
|
||||||
|
case MarkerClickSelectOnly:
|
||||||
|
do_locate = false;
|
||||||
|
break;
|
||||||
|
case MarkerClickLocate:
|
||||||
|
do_locate = true;
|
||||||
|
break;
|
||||||
|
case MarkerClickLocateWhenStopped:
|
||||||
|
do_locate = !_editor->session()->transport_state_rolling ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_locate && !_editor->session()->config.get_external_sync () && (_editor->edit_point() != Editing::EditAtSelectedMarker)) {
|
||||||
bool is_start;
|
bool is_start;
|
||||||
Location* location = _editor->find_location_from_marker (_marker, is_start);
|
Location* location = _editor->find_location_from_marker (_marker, is_start);
|
||||||
if (location) {
|
if (location) {
|
||||||
|
|
|
@ -61,6 +61,7 @@ setup_gtk_ardour_enums ()
|
||||||
Gtk::ResponseType dialog_response;
|
Gtk::ResponseType dialog_response;
|
||||||
AddRouteDialog::TypeWanted type_wanted;
|
AddRouteDialog::TypeWanted type_wanted;
|
||||||
NoteNameDisplay note_name_display;
|
NoteNameDisplay note_name_display;
|
||||||
|
MarkerClickBehavior marker_click_behavior;
|
||||||
|
|
||||||
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
|
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
|
||||||
#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
|
#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
|
||||||
|
@ -234,6 +235,10 @@ setup_gtk_ardour_enums ()
|
||||||
REGISTER_CLASS_ENUM (AddRouteDialog, FoldbackBus);
|
REGISTER_CLASS_ENUM (AddRouteDialog, FoldbackBus);
|
||||||
REGISTER (type_wanted);
|
REGISTER (type_wanted);
|
||||||
|
|
||||||
|
REGISTER_CLASS_ENUM (Editing, MarkerClickSelectOnly);
|
||||||
|
REGISTER_CLASS_ENUM (Editing, MarkerClickLocate);
|
||||||
|
REGISTER_CLASS_ENUM (Editing, MarkerClickLocateWhenStopped);
|
||||||
|
REGISTER (marker_click_behavior);
|
||||||
|
|
||||||
REGISTER_CLASS_ENUM (Editing, Always);
|
REGISTER_CLASS_ENUM (Editing, Always);
|
||||||
REGISTER_CLASS_ENUM (Editing, WithMIDNAM);
|
REGISTER_CLASS_ENUM (Editing, WithMIDNAM);
|
||||||
|
|
Loading…
Reference in New Issue