Add restoreItem to Pane container

This commit is contained in:
Corey Johnson & Nathan Sobo
2013-03-06 11:57:17 -08:00
committed by probablycorey
parent 96fefe94f0
commit 5ad53bb32c
7 changed files with 117 additions and 30 deletions

View File

@@ -25,6 +25,12 @@ class EditSession
session.setCursorScreenPosition(state.cursorScreenPosition)
session
@identifiedBy: 'path'
@deserializesToSameObject: (state, editSession) ->
state.path
scrollTop: 0
scrollLeft: 0
languageMode: null
@@ -151,6 +157,7 @@ class EditSession
saveAs: (path) -> @buffer.saveAs(path)
getFileExtension: -> @buffer.getExtension()
getPath: -> @buffer.getPath()
getUri: -> @getPath()
isBufferRowBlank: (bufferRow) -> @buffer.isRowBlank(bufferRow)
nextNonBlankBufferRow: (bufferRow) -> @buffer.nextNonBlankRow(bufferRow)
getEofBufferPosition: -> @buffer.getEofPosition()

View File

@@ -1,4 +1,5 @@
{View} = require 'space-pen'
Pane = require 'pane'
$ = require 'jquery'
module.exports =
@@ -13,6 +14,9 @@ class PaneContainer extends View
@content: ->
@div id: 'panes'
initialize: ->
@destroyedItemStates = []
serialize: ->
deserializer: 'PaneContainer'
root: @getRoot()?.serialize()
@@ -33,6 +37,24 @@ class PaneContainer extends View
nextIndex = (currentIndex + 1) % panes.length
panes[nextIndex].makeActive()
restoreItem: ->
if lastItemState = @destroyedItemStates.pop()
if activePane = @getActivePane()
activePane.showItem(deserialize(lastItemState))
true
else
@append(new Pane(deserialize(lastItemState)))
itemDestroyed: (item) ->
state = item.serialize?()
state.uri ?= item.getUri?()
@destroyedItemStates.push(state) if state?
itemAdded: (item) ->
itemUri = item.getUri?()
@destroyedItemStates = @destroyedItemStates.filter (itemState) ->
itemState.uri isnt itemUri
getRoot: ->
@children().first().view()

View File

@@ -111,6 +111,7 @@ class Pane extends View
return if _.include(@items, item)
index = @getActiveItemIndex() + 1
@items.splice(index, 0, item)
@getContainer().itemAdded(item)
@trigger 'pane:item-added', [item, index]
item
@@ -119,8 +120,10 @@ class Pane extends View
false
destroyItem: (item) ->
container = @getContainer()
reallyDestroyItem = =>
@removeItem(item)
container.itemDestroyed(item)
item.destroy?()
@autosaveItem(item)
@@ -137,7 +140,7 @@ class Pane extends View
@destroyItem(item) for item in @getItems() when item isnt @activeItem
promptToSaveItem: (item, nextAction) ->
path = item.getPath()
uri = item.getUri()
atom.confirm(
"'#{item.getTitle()}' has changes, do you want to save them?"
"Your changes will be lost if close this item without saving."
@@ -153,7 +156,7 @@ class Pane extends View
@saveItemAs(@activeItem)
saveItem: (item, nextAction) ->
if item.getPath?()
if item.getUri?()
item.save()
nextAction?()
else
@@ -173,7 +176,7 @@ class Pane extends View
@autosaveItem(@activeItem)
autosaveItem: (item) ->
@saveItem(item) if config.get('core.autosave') and item.getPath?()
@saveItem(item) if config.get('core.autosave') and item.getUri?()
removeItem: (item) ->
index = @items.indexOf(item)
@@ -194,8 +197,8 @@ class Pane extends View
@removeItem(item)
pane.addItem(item, index)
itemForPath: (path) ->
_.detect @items, (item) -> item.getPath?() is path
itemForUri: (uri) ->
_.detect @items, (item) -> item.getUri?() is uri
cleanupItemView: (item) ->
if item instanceof $

View File

@@ -92,7 +92,7 @@ class RootView extends View
changeFocus = options.changeFocus ? true
path = project.resolve(path) if path?
if activePane = @getActivePane()
if editSession = activePane.itemForPath(path)
if editSession = activePane.itemForUri(path)
activePane.showItem(editSession)
else
editSession = project.buildEditSession(path)

View File

@@ -155,7 +155,10 @@ window.unregisterDeserializer = (klass) ->
delete deserializers[klass.name]
window.deserialize = (state) ->
deserializers[state?.deserializer]?.deserialize(state)
getDeserializer(state)?.deserialize(state)
window.getDeserializer = (state) ->
deserializers[state?.deserializer]
window.measure = (description, fn) ->
start = new Date().getTime()