Project drawer state is restored upon refresh

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-05-02 16:08:02 -07:00
parent 5864fa5145
commit bb689574d0
3 changed files with 52 additions and 8 deletions

View File

@@ -9,14 +9,31 @@ _ = require 'underscore'
module.exports =
class TreeView extends View
@activate: (rootView) ->
@activate: (rootView, state) ->
requireStylesheet 'tree-view.css'
rootView.horizontal.prepend(new TreeView(rootView))
if state
@treeView = TreeView.deserialize(state, rootView)
else
@treeView = new TreeView(rootView)
rootView.horizontal.prepend(@treeView)
@content: (rootView) ->
@div class: 'tree-view', tabindex: -1, =>
@subview 'root', new DirectoryView(directory: rootView.project.getRootDirectory(), isExpanded: true)
@deserialize: (state, rootView) ->
treeView = new TreeView(rootView)
treeView.root.deserializeEntryExpansionStates(state.directoryExpansionStates)
treeView.selectEntryForPath(state.selectedPath)
treeView
@serialize: ->
@treeView.serialize()
root: null
initialize: (@rootView) ->
@on 'click', '.entry', (e) =>
entry = $(e.currentTarget).view()
@@ -37,15 +54,23 @@ class TreeView extends View
@on 'tree-view:unfocus', => @rootView.activeEditor()?.focus()
@rootView.on 'tree-view:focus', => this.focus()
serialize: ->
directoryExpansionStates: @root.serializeEntryExpansionStates()
selectedPath: @selectedEntry()?.getPath()
deactivate: ->
@root.unwatchEntries()
selectActiveFile: ->
activeFilePath = @rootView.activeEditor()?.buffer.path
for element in @find(".file")
fileView = $(element).view()
if fileView.getPath() == activeFilePath
@selectEntry(fileView)
@selectEntryForPath(activeFilePath)
selectEntryForPath: (path) ->
for element in @find(".entry")
view = $(element).view()
if view.getPath() == path
@selectEntry(view)
return
moveDown: ->
selectedEntry = @selectedEntry()