onDidChangeSelectionRange emits object with ranges + selection

This commit is contained in:
Ben Ogle
2014-09-22 16:08:12 -07:00
parent 3134364362
commit c62fb26001
3 changed files with 33 additions and 7 deletions

View File

@@ -901,6 +901,22 @@ describe "Editor", ->
beforeEach ->
selection = editor.getLastSelection()
describe "when the selection range changes", ->
it "emits an event with the old range, new range, and the selection that moved", ->
editor.setSelectedBufferRange([[3, 0], [4, 5]])
editor.onDidChangeSelectionRange rangeChangedHandler = jasmine.createSpy()
editor.selectToBufferPosition([6, 2])
expect(rangeChangedHandler).toHaveBeenCalled()
eventObject = rangeChangedHandler.mostRecentCall.args[0]
expect(eventObject.oldBufferRange).toEqual [[3, 0], [4, 5]]
expect(eventObject.oldScreenRange).toEqual [[3, 0], [4, 5]]
expect(eventObject.newBufferRange).toEqual [[3, 0], [6, 2]]
expect(eventObject.newScreenRange).toEqual [[3, 0], [6, 2]]
expect(eventObject.selection).toBe selection
describe ".selectUp/Down/Left/Right()", ->
it "expands each selection to its cursor's new location", ->
editor.setSelectedBufferRanges([[[0,9], [0,13]], [[3,16], [3,21]]])

View File

@@ -2088,9 +2088,9 @@ class Editor extends Model
false
# Called by the selection
selectionRangeChanged: (selection) ->
@emit 'selection-screen-range-changed', selection
@emitter.emit 'did-change-selection-range', selection
selectionRangeChanged: (event) ->
@emit 'selection-screen-range-changed', event
@emitter.emit 'did-change-selection-range', event
###
Section: Searching and Replacing

View File

@@ -21,7 +21,7 @@ class Selection extends Model
@cursor.selection = this
@decoration = @editor.decorateMarker(@marker, type: 'highlight', class: 'selection')
@marker.onDidChange => @screenRangeChanged()
@marker.onDidChange (e) => @screenRangeChanged(e)
@marker.onDidDestroy =>
unless @editor.isDestroyed()
@destroyed = true
@@ -686,10 +686,20 @@ class Selection extends Model
Section: Private Utilities
###
screenRangeChanged: ->
@emit 'screen-range-changed', @getScreenRange()
screenRangeChanged: (e) ->
{oldHeadBufferPosition, oldTailBufferPosition} = e
{oldHeadScreenPosition, oldTailScreenPosition} = e
eventObject =
oldBufferRange: new Range(oldHeadBufferPosition, oldTailBufferPosition)
oldScreenRange: new Range(oldHeadScreenPosition, oldTailScreenPosition)
newBufferRange: @getBufferRange()
newScreenRange: @getScreenRange()
selection: this
@emit 'screen-range-changed', @getScreenRange() # old event
@emitter.emit 'did-change-range'
@editor.selectionRangeChanged(this)
@editor.selectionRangeChanged(eventObject)
finalize: ->
@initialScreenRange = null unless @initialScreenRange?.isEqual(@getScreenRange())