From 8774740e72740b71c3629e01ef4cf0b0a2ada6e2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 25 May 2021 13:56:42 -0600 Subject: [PATCH] add action to "promote" region cue markers to global marks --- gtk2_ardour/ardour.menus.in | 2 ++ gtk2_ardour/ardour_ui.cc | 2 ++ gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_actions.cc | 1 + gtk2_ardour/editor_ops.cc | 36 +++++++++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+) diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 5a92987435..a39b8cc368 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -363,6 +363,8 @@ + + diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 4a3e793c84..c03204e9be 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -2958,6 +2958,8 @@ what you would like to do.\n"), PROGRAM_NAME)); image->show(); hbox->show(); + Splash::instance()->hide (); + switch (dialog.run ()) { case RESPONSE_ACCEPT: return 1; diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 26019cbedc..0b322335ec 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -588,6 +588,7 @@ public: void add_region_marker (); void clear_region_markers (); void remove_region_marker (ARDOUR::CueMarker&); + void make_region_markers_global (); protected: void map_transport_state (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 4b1633a465..cd70385acd 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1654,6 +1654,7 @@ Editor::register_region_actions () /* PART 3: actions that operate on the selection and also require the edit point location */ + register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EditPointRegions), "make-region-markers-global", _("Convert Region Cue Markers to Global Markers"), sigc::mem_fun (*this, &Editor::make_region_markers_global)); register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EditPointRegions), "add-region-cue-marker", _("Add Region Cue Marker"), sigc::mem_fun (*this, &Editor::add_region_marker)); register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EditPointRegions), "clear-region-cue-markers", _("Clear Region Cue Markers"), sigc::mem_fun (*this, &Editor::clear_region_markers)); register_region_action (_region_actions, RegionActionTarget (SelectedRegions|EditPointRegions), "set-region-sync-position", _("Set Sync Position"), sigc::mem_fun (*this, &Editor::set_region_sync_position)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index b45cb244e9..9cfbd97f7d 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -8838,3 +8838,39 @@ Editor::clear_region_markers () } } +void +Editor::make_region_markers_global () +{ + RegionSelection rs = get_regions_from_selection_and_edit_point (); + XMLNode& before (_session->locations()->get_state()); + bool in_command = false; + + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { + CueMarkers cues; + + (*r)->region()->get_cue_markers (cues, true); + + if (!cues.empty()) { + if (!in_command) { + in_command = true; + } + + for (CueMarkers::iterator cm = cues.begin(); cm != cues.end(); ++cm) { + /* marker position is absolute within source */ + const samplepos_t absolute_pos = (cm->position() - (*r)->region()->start()) + (*r)->region()->position(); + Location* loc = new Location (*_session, absolute_pos, absolute_pos, cm->text(), Location::IsMark); + _session->locations()->add (loc, false); + } + } + + cues.clear (); + } + + if (in_command) { + XMLNode& after (_session->locations()->get_state()); + begin_reversible_command (_("region markers -> global markers")); + _session->add_command (new MementoCommand (*(_session->locations()), &before, &after)); + commit_reversible_command (); + } +} +