tweak Editor remove-marker APIs to set state for removing region cue markers

This commit is contained in:
Paul Davis 2021-05-18 16:50:55 -06:00
parent baee1a2f01
commit bd2d8b8c87
4 changed files with 41 additions and 20 deletions

View File

@ -684,8 +684,10 @@ private:
void add_new_location (ARDOUR::Location*);
ArdourCanvas::Container* add_new_location_internal (ARDOUR::Location*);
void location_gone (ARDOUR::Location*);
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
gint really_remove_marker (ARDOUR::Location* loc);
void remove_marker (ArdourCanvas::Item&);
void remove_marker (ArdourMarker*);
gint really_remove_global_marker (ARDOUR::Location* loc);
gint really_remove_region_marker (ArdourMarker*);
void goto_nth_marker (int nth);
void trigger_script (int nth);
void trigger_script_by_name (const std::string script_name);

View File

@ -738,29 +738,45 @@ Editor::mouse_add_new_range (samplepos_t where)
}
void
Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*)
Editor::remove_marker (ArdourCanvas::Item& item)
{
ArdourMarker* marker;
bool is_start;
if (!_session) {
return;
}
if ((marker = static_cast<ArdourMarker*> (item.get_data ("marker"))) == 0) {
fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
abort(); /*NOTREACHED*/
}
if (entered_marker == marker) {
entered_marker = NULL;
remove_marker (marker);
}
void
Editor::remove_marker (ArdourMarker* marker)
{
if (!_session) {
return;
}
Location* loc = find_location_from_marker (marker, is_start);
if (marker->type() == ArdourMarker::RegionCue) {
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_region_marker), marker));
} else {
if (_session && loc) {
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc));
bool is_start;
Location* loc = find_location_from_marker (marker, is_start);
if (loc) {
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_global_marker), loc));
}
}
}
gint
Editor::really_remove_marker (Location* loc)
Editor::really_remove_global_marker (Location* loc)
{
begin_reversible_command (_("remove marker"));
XMLNode &before = _session->locations()->get_state();
@ -771,6 +787,15 @@ Editor::really_remove_marker (Location* loc)
return FALSE;
}
gint
Editor::really_remove_region_marker (ArdourMarker* marker)
{
begin_reversible_command (_("remove region marker"));
cerr << "would remove this region marker\n";
commit_reversible_command ();
return FALSE;
}
void
Editor::location_gone (Location *location)
{
@ -1429,7 +1454,7 @@ Editor::marker_menu_remove ()
} else if (tm) {
remove_tempo_marker (marker_menu_item);
} else {
remove_marker (*marker_menu_item, (GdkEvent*) 0);
remove_marker (*marker_menu_item);
}
}

View File

@ -1669,7 +1669,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
case MarkerItem:
remove_marker (*item, event);
remove_marker (*item);
break;
case RegionItem:

View File

@ -4308,14 +4308,8 @@ Editor::cut_copy (CutCopyOp op)
/* cut/delete op while pointing at a marker */
bool ignored;
Location* loc = find_location_from_marker (entered_marker, ignored);
if (_session && loc) {
entered_marker = NULL;
Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc));
}
remove_marker (entered_marker);
entered_marker = NULL;
_drags->abort ();
return;
}