diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-11-09 17:52:32 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-11-09 17:52:32 +0000 |
commit | d79ff102e8de764b0e0fda86931b9ff5394e6bc3 (patch) | |
tree | d0f4bb172c855a93603525fd6711ac369ac0f6ff /gtk2_ardour/editor_markers.cc | |
parent | 3f774f711f746e29b37421cfe5f23a11d1422c2d (diff) |
fix up botched marker management scheme; add Editor::get_edit_op_range(); make cut ops use get_edit_op_range() when there is no time/region selection. still a little in progress to get the details right
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2614 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_markers.cc')
-rw-r--r-- | gtk2_ardour/editor_markers.cc | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 772e5fd038..3e0868e048 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -223,11 +223,43 @@ Editor::find_location_from_marker (Marker *marker, bool& is_start) const void Editor::refresh_location_display_internal (Locations::LocationList& locations) { - clear_marker_display (); + /* invalidate all */ + + for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) { + i->second->valid = false; + } + /* add new ones */ + for (Locations::LocationList::iterator i = locations.begin(); i != locations.end(); ++i) { + + LocationMarkerMap::iterator x; + + if ((x = location_markers.find (*i)) != location_markers.end()) { + x->second->valid = true; + continue; + } + add_new_location (*i); } + + /* remove dead ones */ + + for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ) { + + LocationMarkerMap::iterator tmp; + + tmp = i; + ++tmp; + + if (!i->second->valid) { + delete i->second; + location_markers.erase (i); + } + + i = tmp; + } + } void |