Make Cursor and Selection create anchors via EditSession.prototype.addAnchor

This commit is contained in:
Nathan Sobo
2012-06-21 17:29:12 -06:00
parent 396857660b
commit 7f1b094ed2
3 changed files with 17 additions and 3 deletions

View File

@@ -12,11 +12,12 @@ class Cursor
wordRegex: /(\w+)|([^\w\s]+)/g
constructor: ({@editSession, screenPosition, bufferPosition}) ->
@anchor = new Anchor(@editSession)
@anchor = @editSession.addAnchor()
@setScreenPosition(screenPosition) if screenPosition
@setBufferPosition(bufferPosition) if bufferPosition
destroy: ->
@editSession.removeAnchor(@anchor)
@editSession.removeCursor(this)
@trigger 'destroy'

View File

@@ -1,5 +1,6 @@
Point = require 'point'
Buffer = require 'buffer'
Anchor = require 'anchor'
DisplayBuffer = require 'display-buffer'
Cursor = require 'cursor'
Selection = require 'selection'
@@ -20,6 +21,7 @@ class EditSession
scrollTop: 0
scrollLeft: 0
displayBuffer: null
anchors: null
cursors: null
selections: null
autoIndent: true
@@ -31,6 +33,7 @@ class EditSession
@softTabs ?= true
@displayBuffer = new DisplayBuffer(@buffer, { @tabText })
@tokenizedBuffer = @displayBuffer.tokenizedBuffer
@anchors = []
@cursors = []
@selections = []
@addCursorAtScreenPosition([0, 0])
@@ -227,6 +230,14 @@ class EditSession
fn(selection) for selection in selections
@buffer.endUndoBatch(@getSelectedBufferRanges())
addAnchor: ->
anchor = new Anchor(this)
@anchors.push(anchor)
anchor
removeAnchor: (anchor) ->
_.remove(@anchors, anchor)
getCursors: -> new Array(@cursors...)
getCursor: (index=0) ->

View File

@@ -68,7 +68,9 @@ class Selection
@editSession.buffer.getTextInRange(@getBufferRange())
clear: ->
@modifyScreenRange => @anchor = null
@modifyScreenRange =>
@editSession.removeAnchor(@anchor)
@anchor = null
selectWord: ->
@setBufferRange(@cursor.getCurrentWordBufferRange())
@@ -229,7 +231,7 @@ class Selection
@trigger 'change-screen-range', newScreenRange unless oldScreenRange.isEqual(newScreenRange)
placeAnchor: ->
@anchor = new Anchor(@editSession)
@anchor = @editSession.addAnchor()
@anchor.setScreenPosition(@cursor.getScreenPosition())
intersectsBufferRange: (bufferRange) ->