mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
Add DisplayBufferMarker::onDidChange and ::onDidDestroy
This commit is contained in:
parent
651eb78315
commit
1131b33a83
@ -722,7 +722,7 @@ describe "DisplayBuffer", ->
|
|||||||
|
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
marker = displayBuffer.markScreenRange([[5, 4], [5, 10]])
|
marker = displayBuffer.markScreenRange([[5, 4], [5, 10]])
|
||||||
marker.on 'changed', markerChangedHandler = jasmine.createSpy("markerChangedHandler")
|
marker.onDidChange markerChangedHandler = jasmine.createSpy("markerChangedHandler")
|
||||||
|
|
||||||
it "triggers the 'changed' event whenever the markers head's screen position changes in the buffer or on screen", ->
|
it "triggers the 'changed' event whenever the markers head's screen position changes in the buffer or on screen", ->
|
||||||
marker.setHeadScreenPosition([8, 20])
|
marker.setHeadScreenPosition([8, 20])
|
||||||
@ -859,7 +859,7 @@ describe "DisplayBuffer", ->
|
|||||||
|
|
||||||
it "updates markers before emitting buffer change events, but does not notify their observers until the change event", ->
|
it "updates markers before emitting buffer change events, but does not notify their observers until the change event", ->
|
||||||
marker2 = displayBuffer.markBufferRange([[8, 1], [8, 1]])
|
marker2 = displayBuffer.markBufferRange([[8, 1], [8, 1]])
|
||||||
marker2.on 'changed', marker2ChangedHandler = jasmine.createSpy("marker2ChangedHandler")
|
marker2.onDidChange marker2ChangedHandler = jasmine.createSpy("marker2ChangedHandler")
|
||||||
displayBuffer.on 'changed', changeHandler = jasmine.createSpy("changeHandler").andCallFake -> onDisplayBufferChange()
|
displayBuffer.on 'changed', changeHandler = jasmine.createSpy("changeHandler").andCallFake -> onDisplayBufferChange()
|
||||||
|
|
||||||
# New change ----
|
# New change ----
|
||||||
@ -886,7 +886,7 @@ describe "DisplayBuffer", ->
|
|||||||
marker2ChangedHandler.reset()
|
marker2ChangedHandler.reset()
|
||||||
|
|
||||||
marker3 = displayBuffer.markBufferRange([[8, 1], [8, 2]])
|
marker3 = displayBuffer.markBufferRange([[8, 1], [8, 2]])
|
||||||
marker3.on 'changed', marker3ChangedHandler = jasmine.createSpy("marker3ChangedHandler")
|
marker3.onDidChange marker3ChangedHandler = jasmine.createSpy("marker3ChangedHandler")
|
||||||
|
|
||||||
onDisplayBufferChange = ->
|
onDisplayBufferChange = ->
|
||||||
# calls change handler first
|
# calls change handler first
|
||||||
|
@ -44,7 +44,7 @@ class Cursor extends Model
|
|||||||
constructor: ({@editor, @marker, id}) ->
|
constructor: ({@editor, @marker, id}) ->
|
||||||
@assignId(id)
|
@assignId(id)
|
||||||
@updateVisibility()
|
@updateVisibility()
|
||||||
@marker.on 'changed', (e) =>
|
@marker.onDidChange (e) =>
|
||||||
@updateVisibility()
|
@updateVisibility()
|
||||||
{oldHeadScreenPosition, newHeadScreenPosition} = e
|
{oldHeadScreenPosition, newHeadScreenPosition} = e
|
||||||
{oldHeadBufferPosition, newHeadBufferPosition} = e
|
{oldHeadBufferPosition, newHeadBufferPosition} = e
|
||||||
@ -66,7 +66,7 @@ class Cursor extends Model
|
|||||||
|
|
||||||
@emit 'moved', movedEvent
|
@emit 'moved', movedEvent
|
||||||
@editor.cursorMoved(this, movedEvent)
|
@editor.cursorMoved(this, movedEvent)
|
||||||
@marker.on 'destroyed', =>
|
@marker.onDidDestroy =>
|
||||||
@destroyed = true
|
@destroyed = true
|
||||||
@editor.removeCursor(this)
|
@editor.removeCursor(this)
|
||||||
@emit 'destroyed'
|
@emit 'destroyed'
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
{Range} = require 'text-buffer'
|
{Range} = require 'text-buffer'
|
||||||
_ = require 'underscore-plus'
|
_ = require 'underscore-plus'
|
||||||
{Emitter, Subscriber} = require 'emissary'
|
{Subscriber} = require 'emissary'
|
||||||
|
EmitterMixin = require('emissary').Emitter
|
||||||
|
{Emitter} = require 'event-kit'
|
||||||
|
|
||||||
module.exports =
|
module.exports =
|
||||||
class DisplayBufferMarker
|
class DisplayBufferMarker
|
||||||
Emitter.includeInto(this)
|
EmitterMixin.includeInto(this)
|
||||||
Subscriber.includeInto(this)
|
Subscriber.includeInto(this)
|
||||||
|
|
||||||
bufferMarkerSubscription: null
|
bufferMarkerSubscription: null
|
||||||
@ -15,6 +17,7 @@ class DisplayBufferMarker
|
|||||||
wasValid: true
|
wasValid: true
|
||||||
|
|
||||||
constructor: ({@bufferMarker, @displayBuffer}) ->
|
constructor: ({@bufferMarker, @displayBuffer}) ->
|
||||||
|
@emitter = new Emitter
|
||||||
@id = @bufferMarker.id
|
@id = @bufferMarker.id
|
||||||
@oldHeadBufferPosition = @getHeadBufferPosition()
|
@oldHeadBufferPosition = @getHeadBufferPosition()
|
||||||
@oldHeadScreenPosition = @getHeadScreenPosition()
|
@oldHeadScreenPosition = @getHeadScreenPosition()
|
||||||
@ -25,6 +28,12 @@ class DisplayBufferMarker
|
|||||||
@subscribe @bufferMarker.onDidDestroy => @destroyed()
|
@subscribe @bufferMarker.onDidDestroy => @destroyed()
|
||||||
@subscribe @bufferMarker.onDidChange (event) => @notifyObservers(event)
|
@subscribe @bufferMarker.onDidChange (event) => @notifyObservers(event)
|
||||||
|
|
||||||
|
onDidChange: (callback) ->
|
||||||
|
@emitter.on 'did-change', callback
|
||||||
|
|
||||||
|
onDidDestroy: (callback) ->
|
||||||
|
@emitter.on 'did-destroy', callback
|
||||||
|
|
||||||
copy: (attributes) ->
|
copy: (attributes) ->
|
||||||
@displayBuffer.getMarker(@bufferMarker.copy(attributes).id)
|
@displayBuffer.getMarker(@bufferMarker.copy(attributes).id)
|
||||||
|
|
||||||
@ -199,6 +208,8 @@ class DisplayBufferMarker
|
|||||||
destroyed: ->
|
destroyed: ->
|
||||||
delete @displayBuffer.markers[@id]
|
delete @displayBuffer.markers[@id]
|
||||||
@emit 'destroyed'
|
@emit 'destroyed'
|
||||||
|
@emitter.emit 'did-destroy'
|
||||||
|
@emitter.dispose()
|
||||||
|
|
||||||
notifyObservers: ({textChanged}) ->
|
notifyObservers: ({textChanged}) ->
|
||||||
textChanged ?= false
|
textChanged ?= false
|
||||||
@ -215,7 +226,7 @@ class DisplayBufferMarker
|
|||||||
_.isEqual(newTailBufferPosition, @oldTailBufferPosition) and
|
_.isEqual(newTailBufferPosition, @oldTailBufferPosition) and
|
||||||
_.isEqual(newTailScreenPosition, @oldTailScreenPosition)
|
_.isEqual(newTailScreenPosition, @oldTailScreenPosition)
|
||||||
|
|
||||||
@emit 'changed', {
|
changeEvent = {
|
||||||
@oldHeadScreenPosition, newHeadScreenPosition,
|
@oldHeadScreenPosition, newHeadScreenPosition,
|
||||||
@oldTailScreenPosition, newTailScreenPosition,
|
@oldTailScreenPosition, newTailScreenPosition,
|
||||||
@oldHeadBufferPosition, newHeadBufferPosition,
|
@oldHeadBufferPosition, newHeadBufferPosition,
|
||||||
@ -223,6 +234,8 @@ class DisplayBufferMarker
|
|||||||
textChanged,
|
textChanged,
|
||||||
isValid
|
isValid
|
||||||
}
|
}
|
||||||
|
@emit 'changed', changeEvent
|
||||||
|
@emitter.emit 'did-change', changeEvent
|
||||||
|
|
||||||
@oldHeadBufferPosition = newHeadBufferPosition
|
@oldHeadBufferPosition = newHeadBufferPosition
|
||||||
@oldHeadScreenPosition = newHeadScreenPosition
|
@oldHeadScreenPosition = newHeadScreenPosition
|
||||||
|
@ -30,8 +30,8 @@ class Selection extends Model
|
|||||||
@cursor.selection = this
|
@cursor.selection = this
|
||||||
@decoration = @editor.decorateMarker(@marker, type: 'highlight', class: 'selection')
|
@decoration = @editor.decorateMarker(@marker, type: 'highlight', class: 'selection')
|
||||||
|
|
||||||
@marker.on 'changed', => @screenRangeChanged()
|
@marker.onDidChange => @screenRangeChanged()
|
||||||
@marker.on 'destroyed', =>
|
@marker.onDidDestroy =>
|
||||||
@destroyed = true
|
@destroyed = true
|
||||||
@editor.removeSelection(this)
|
@editor.removeSelection(this)
|
||||||
@emit 'destroyed' unless @editor.isDestroyed()
|
@emit 'destroyed' unless @editor.isDestroyed()
|
||||||
|
Loading…
Reference in New Issue
Block a user