TreeView directories can be selected by clicking them. Start on keyboard nav.

This commit is contained in:
Nathan Sobo
2012-04-24 12:51:01 -06:00
parent 34a4bcf224
commit dd736ddf67
3 changed files with 73 additions and 27 deletions

View File

@@ -13,26 +13,41 @@ class TreeView extends View
@subview 'root', new DirectoryView(directory: rootView.project.getRootDirectory(), isExpanded: true)
initialize: (@rootView) ->
@on 'click', '.file', (e) =>
clickedLi = $(e.target)
@rootView.open(clickedLi.attr('path'))
@find('.selected').removeClass('selected')
clickedLi.addClass('selected')
@on 'click', '.entry', (e) =>
entry = $(e.currentTarget)
@rootView.open(entry.attr('path')) if entry.is('.file')
@selectEntry(entry)
false
@on 'move-down', => @moveDown()
@on 'tree-view:expand-directory', => @selectActiveFile()
@rootView.on 'active-editor-path-change', => @selectActiveFile()
selectActiveFile: ->
console.log ""
@find('.selected').removeClass('selected')
activeFilePath = @rootView.activeEditor()?.buffer.path
@find(".file[path='#{activeFilePath}']").addClass('selected')
@selectEntry(@find(".file[path='#{activeFilePath}']"))
moveDown: ->
selectedEntry = @selectedEntry()
if selectedEntry.length
@selectEntry(selectedEntry.next())
else
@selectEntry(@root)
selectedEntry: ->
@find('.selected')
selectEntry: (entry) ->
@find('.selected').removeClass('selected')
entry.addClass('selected')
class DirectoryView extends View
@content: ({directory, isExpanded}) ->
@li class: 'directory', =>
@span '', class: 'disclosure-arrow', outlet: 'disclosureArrow', click: 'toggleExpansion'
@span directory.getName(), class: 'name'
@li class: 'directory entry', =>
@div class: 'header', =>
@span '', class: 'disclosure-arrow', outlet: 'disclosureArrow', click: 'toggleExpansion'
@span directory.getName(), class: 'name'
entries: null
@@ -45,7 +60,7 @@ class DirectoryView extends View
if entry instanceof Directory
@entries.append(new DirectoryView(directory: entry, isExpanded: false))
else
@entries.append $$ -> @li entry.getName(), class: 'file', path: entry.path
@entries.append $$ -> @li entry.getName(), class: 'file entry', path: entry.path
@append(@entries)
toggleExpansion: ->
@@ -59,6 +74,7 @@ class DirectoryView extends View
@deserializeEntries(@entryStates) if @entryStates?
@isExpanded = true
@trigger 'tree-view:expand-directory'
false
collapse: ->
@entryStates = @serializeEntries()
@@ -77,7 +93,7 @@ class DirectoryView extends View
deserializeEntries: (entryStates) ->
for directoryName, childEntryStates of entryStates
@entries.find("> .directory:contains(#{directoryName})").each ->
@entries.find("> .directory:contains('#{directoryName}')").each ->
view = $(this).view()
view.entryStates = childEntryStates
view.expand()