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
|
||||
#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
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
#define INSERTTIMEOPT(a) /*empty*/
|
||||
#define TEMPOEDITBEHAVIOR(a) /*empty*/
|
||||
#define NOTENAMEDISPLAY(a) /*empty*/
|
||||
#define MARKERCLICKBEHAVIOR(a) /*empty*/
|
||||
|
||||
namespace Editing {
|
||||
|
||||
@ -211,6 +212,18 @@ inline const char* enum2str(NoteNameDisplay m) {return notenamedisplaystrs[m];}
|
||||
#undef NOTENAMEDISPLAY
|
||||
#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...
|
||||
enum CutCopyOp {
|
||||
|
@ -33,6 +33,7 @@ DEFINE_ENUM_CONVERT(Editing::EditPoint)
|
||||
DEFINE_ENUM_CONVERT(Editing::RegionListSortType)
|
||||
DEFINE_ENUM_CONVERT(Editing::MouseMode)
|
||||
DEFINE_ENUM_CONVERT(Editing::NoteNameDisplay)
|
||||
DEFINE_ENUM_CONVERT(Editing::MarkerClickBehavior)
|
||||
|
||||
} // namespace PBD
|
||||
|
||||
|
@ -109,6 +109,10 @@ INSERTTIMEOPT(LeaveIntersected)
|
||||
INSERTTIMEOPT(MoveIntersected)
|
||||
INSERTTIMEOPT(SplitIntersected)
|
||||
|
||||
MARKERCLICKBEHAVIOR(MarkerClickSelectOnly)
|
||||
MARKERCLICKBEHAVIOR(MarkerClickLocate)
|
||||
MARKERCLICKBEHAVIOR(MarkerClickLocateWhenStopped)
|
||||
|
||||
NOTENAMEDISPLAY(Always)
|
||||
NOTENAMEDISPLAY(WithMIDNAM)
|
||||
NOTENAMEDISPLAY(Never)
|
||||
|
@ -267,6 +267,7 @@ Editor::Editor ()
|
||||
, pre_internal_snap_mode (SnapOff)
|
||||
, internal_grid_type (GridTypeBeat)
|
||||
, internal_snap_mode (SnapOff)
|
||||
, marker_click_behavior (MarkerClickSelectOnly)
|
||||
, _join_object_range_state (JOIN_OBJECT_RANGE_NONE)
|
||||
, _notebook_shrunk (false)
|
||||
, entered_marker (0)
|
||||
@ -2527,6 +2528,9 @@ Editor::set_state (const XMLNode& node, int version)
|
||||
node.get_property ("zoom-focus", 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;
|
||||
if (node.get_property ("zoom", z)) {
|
||||
/* 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 ("edit-point", _edit_point);
|
||||
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-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
|
||||
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
|
||||
Editor::update_grid ()
|
||||
{
|
||||
|
@ -353,6 +353,10 @@ public:
|
||||
void tav_zoom_step (bool coarser);
|
||||
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 */
|
||||
|
||||
void clear_playlist (std::shared_ptr<ARDOUR::Playlist>);
|
||||
@ -685,6 +689,8 @@ private:
|
||||
Editing::SnapMode internal_snap_mode;
|
||||
Editing::MouseMode effective_mouse_mode () const;
|
||||
|
||||
Editing::MarkerClickBehavior marker_click_behavior;
|
||||
|
||||
enum JoinObjectRangeState {
|
||||
JOIN_OBJECT_RANGE_NONE,
|
||||
/** `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);
|
||||
|
||||
/* 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 _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));
|
||||
|
||||
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"));
|
||||
|
||||
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>
|
||||
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.
|
||||
* @param parameter_name Name of the changed parameter.
|
||||
*/
|
||||
|
@ -4645,7 +4645,19 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||
_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;
|
||||
Location* location = _editor->find_location_from_marker (_marker, is_start);
|
||||
if (location) {
|
||||
|
@ -61,6 +61,7 @@ setup_gtk_ardour_enums ()
|
||||
Gtk::ResponseType dialog_response;
|
||||
AddRouteDialog::TypeWanted type_wanted;
|
||||
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_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 (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, WithMIDNAM);
|
||||
|
Loading…
Reference in New Issue
Block a user