summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_markers.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-11-09 17:52:32 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-11-09 17:52:32 +0000
commitd79ff102e8de764b0e0fda86931b9ff5394e6bc3 (patch)
treed0f4bb172c855a93603525fd6711ac369ac0f6ff /gtk2_ardour/editor_markers.cc
parent3f774f711f746e29b37421cfe5f23a11d1422c2d (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.cc34
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