Simplify marker events

Instead of marker-added and marker-removed events which are emitted
when markers are created/invalidated/revalidated/destroyed, we now
just have marker-created events that are triggered *only* when markers
are created for the first time. The marker itself emits a 'destroyed'
event when it is destroyed. The marker already notifies observers when
its validation status changes, so that's covered.
This commit is contained in:
Nathan Sobo
2013-04-29 19:06:14 -06:00
parent b2d34d93ab
commit 4ca00f7347
6 changed files with 24 additions and 45 deletions

View File

@@ -165,6 +165,7 @@ class BufferMarker
# Destroys the marker
destroy: ->
@buffer.destroyMarker(@id)
@trigger 'destroyed'
# Returns a {Boolean} indicating whether the marker is valid. Markers can be
# invalidated when a region surrounding them in the buffer is changed.

View File

@@ -15,6 +15,7 @@ class DisplayBufferMarker
constructor: ({@bufferMarker, @displayBuffer}) ->
@id = @bufferMarker.id
@bufferMarker.on 'destroyed', => @destroyed()
###
# Public #
@@ -155,6 +156,9 @@ class DisplayBufferMarker
# Internal #
###
destroyed: ->
delete @displayBuffer.markers[@id]
observeBufferMarkerIfNeeded: ->
return if @subscriptionCount()
@getHeadScreenPosition() # memoize current value

View File

@@ -33,12 +33,7 @@ class DisplayBuffer
@tokenizedBuffer.on 'grammar-changed', (grammar) => @trigger 'grammar-changed', grammar
@tokenizedBuffer.on 'changed', @handleTokenizedBufferChange
@buffer.on 'markers-updated', @handleMarkersUpdated
@buffer.on 'marker-added', (marker) =>
@trigger 'marker-added', @getMarker(marker.id)
@buffer.on 'marker-removed', (marker) =>
marker = @getMarker(marker.id)
delete @markers[marker.id]
@trigger 'marker-removed', marker
@buffer.on 'marker-created', (marker) => @trigger 'marker-created', @getMarker(marker.id)
buildLineMap: ->
@lineMap = new LineMap

View File

@@ -476,7 +476,7 @@ class Buffer
attributes
}, options))
@validMarkers[marker.id] = marker
@trigger 'marker-added', marker
@trigger 'marker-created', marker
marker
# Public: Constructs a new marker at a given position.
@@ -650,7 +650,6 @@ class Buffer
if marker = @validMarkers[id] ? @invalidMarkers[id]
delete @validMarkers[id]
delete @invalidMarkers[id]
@trigger 'marker-removed', marker
scheduleModifiedEvents: ->
clearTimeout(@stoppedChangingTimeout) if @stoppedChangingTimeout