TreeView scrolls to selected path when move-down or move-up are triggered

This commit is contained in:
Corey Johnson
2012-05-07 10:39:36 -07:00
parent 78d3418c8c
commit 886e2caa52
4 changed files with 40 additions and 5 deletions

View File

@@ -16,7 +16,7 @@ NSString *stringFromCefV8Value(const CefRefPtr<CefV8Value>& value) {
NativeHandler::NativeHandler() : CefV8Handler() {
m_object = CefV8Value::CreateObject(NULL, NULL);
const char *functionNames[] = {"exists", "read", "write", "absolute", "list", "isFile", "isDirectory", "remove", "asyncList", "open", "openDialog", "quit", "writeToPasteboard", "readFromPasteboard", "showDevTools", "newWindow", "saveDialog", "exit", "watchPath", "unwatchPath", "makeDirectory", "move", "moveToTrash"};
const char *functionNames[] = {"exists", "alert", "read", "write", "absolute", "list", "isFile", "isDirectory", "remove", "asyncList", "open", "openDialog", "quit", "writeToPasteboard", "readFromPasteboard", "showDevTools", "newWindow", "saveDialog", "exit", "watchPath", "unwatchPath", "makeDirectory", "move", "moveToTrash"};
NSUInteger arrayLength = sizeof(functionNames) / sizeof(const char *);
for (NSUInteger i = 0; i < arrayLength; i++) {
const char *functionName = functionNames[i];

View File

@@ -1,3 +1,5 @@
$ = require 'jquery'
_ = require 'underscore'
TreeView = require 'tree-view'
RootView = require 'root-view'
Directory = require 'directory'
@@ -232,6 +234,23 @@ describe "TreeView", ->
treeView.trigger 'move-up'
expect(treeView.root).toHaveClass 'selected'
describe "movement outside of viewable region", ->
it "scrolls the tree view to the selected item", ->
treeView.height(100)
treeView.attachToDom()
$(element).view().expand() for element in treeView.find('.directory')
expect(treeView.prop('scrollHeight')).toBeGreaterThan treeView.outerHeight()
treeView.moveDown()
expect(treeView.scrollTop()).toBe 0
entryCount = treeView.find(".entry").length
_.times entryCount, -> treeView.moveDown()
expect(treeView.scrollBottom()).toBe treeView.prop('scrollHeight')
_.times entryCount, -> treeView.moveUp()
expect(treeView.scrollTop()).toBe 0
describe "tree-view:expand-directory", ->
describe "when a directory entry is selected", ->
it "expands the current directory", ->

View File

@@ -7,12 +7,13 @@ module.exports =
class DirectoryView extends View
@content: ({directory, isExpanded}) ->
@li class: 'directory entry', =>
@div class: 'header', =>
@div outlet: 'header', class: 'header', =>
@span '', class: 'disclosure-arrow', outlet: 'disclosureArrow'
@span directory.getName(), class: 'name'
directory: null
entries: null
header: null
initialize: ({@directory, isExpanded}) ->
@expand() if isExpanded

View File

@@ -76,12 +76,15 @@ class TreeView extends View
selectedEntry = @selectedEntry()
if selectedEntry
if selectedEntry.is('.expanded.directory')
return if @selectEntry(selectedEntry.find('.entry:first'))
return if @selectEntry(selectedEntry.next())
return if @selectEntry(selectedEntry.closest('.directory').next())
@selectEntry(selectedEntry.find('.entry:first'))
else
if not @selectEntry(selectedEntry.next())
@selectEntry(selectedEntry.closest('.directory').next())
else
@selectEntry(@root)
@scollToEntry(@selectedEntry())
moveUp: ->
selectedEntry = @selectedEntry()
if selectedEntry
@@ -93,6 +96,8 @@ class TreeView extends View
else
@selectEntry(@find('.entry').last())
@scollToEntry(@selectedEntry())
expandDirectory: ->
selectedEntry = @selectedEntry()
selectedEntry.view().expand() if (selectedEntry instanceof DirectoryView)
@@ -125,3 +130,13 @@ class TreeView extends View
@find('.selected').removeClass('selected')
entry.addClass('selected')
scollToEntry: (entry) ->
displayElement = if (entry instanceof DirectoryView) then entry.header else entry
top = @scrollTop() + displayElement.position().top
bottom = top + displayElement.outerHeight()
if bottom > @scrollBottom()
@scrollBottom(bottom)
if top < @scrollTop()
@scrollTop(top)