mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
TreeView scrolls to selected path when move-down or move-up are triggered
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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", ->
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user