From 54e0b7f2309bb935ddc5698d718c59a37c5842c8 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 24 May 2021 20:22:32 -0600 Subject: [PATCH] renaming cue markers (via dbl-click) --- gtk2_ardour/editor_drag.cc | 29 +++++++++++++++++++++++++++++ gtk2_ardour/region_view.cc | 12 ++++++++++++ gtk2_ardour/region_view.h | 1 + 3 files changed, 42 insertions(+) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index eda2f71686..e3a50f0f6a 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -35,6 +35,8 @@ #include "pbd/basename.h" #include "pbd/stateful_diff_command.h" +#include + #include "gtkmm2ext/utils.h" #include "ardour/audioengine.h" @@ -7195,6 +7197,33 @@ RegionMarkerDrag::finished (GdkEvent *, bool did_move) { if (did_move) { rv->region()->move_cue_marker (model, dragging_model.position()); + } else if (was_double_click()) { + /* edit name */ + + ArdourDialog d (_("Edit Cue Marker Name"), true, false); + Gtk::Entry e; + d.get_vbox()->pack_start (e); + e.set_text (model.text()); + e.select_region (0, -1); + e.show (); + e.set_activates_default (); + + d.add_button (Stock::CANCEL, RESPONSE_CANCEL); + d.add_button (Stock::OK, RESPONSE_OK); + d.set_default_response (RESPONSE_OK); + d.set_position (WIN_POS_MOUSE); + + int result = d.run(); + string str = e.get_text(); + + if (result == RESPONSE_OK && !str.empty()) { + /* explicitly remove the existing (GUI) marker, because + we will not find a match when handing the + CueMarkersChanged signal. + */ + rv->drop_cue_marker (view); + rv->region()->rename_cue_marker (model, str); + } } } diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 0768cc6d1c..eb1ed25cbc 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -1216,3 +1216,15 @@ RegionView::find_model_cue_marker (ArdourMarker* m) return CueMarker (string(), 0); /* empty string signifies invalid */ } + +void +RegionView::drop_cue_marker (ArdourMarker* m) +{ + for (ViewCueMarkers::iterator v = _cue_markers.begin(); v != _cue_markers.end(); ++v) { + if ((*v)->view_marker == m) { + delete m; + _cue_markers.erase (v); + return; + } + } +} diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index c3f42061bd..777c32f370 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -134,6 +134,7 @@ public: void update_visibility (); ARDOUR::CueMarker find_model_cue_marker (ArdourMarker*); + void drop_cue_marker (ArdourMarker*); protected: