<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>The source code</title> <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="../resources/prettify/prettify.js"></script> <style type="text/css"> .highlight { display: block; background-color: #ddd; } </style> <script type="text/javascript"> function highlight() { document.getElementById(location.hash.replace(/#/, "")).className = "highlight"; } </script> </head> <body onload="prettyPrint(); highlight();"> <pre class="prettyprint lang-js"><span id='Ext-selection-TreeModel'>/** </span> * Adds custom behavior for left/right keyboard navigation for use with a tree. * Depends on the view having an expand and collapse method which accepts a * record. * * @private */ Ext.define('Ext.selection.TreeModel', { extend: 'Ext.selection.RowModel', alias: 'selection.treemodel', // typically selection models prune records from the selection // model when they are removed, because the TreeView constantly // adds/removes records as they are expanded/collapsed pruneRemoved: false, onKeyRight: function(e, t) { var focused = this.getLastFocused(), view = this.view; if (focused) { // tree node is already expanded, go down instead // this handles both the case where we navigate to firstChild and if // there are no children to the nextSibling if (focused.isExpanded()) { this.onKeyDown(e, t); // if its not a leaf node, expand it } else if (focused.isExpandable()) { view.expand(focused); } } }, onKeyLeft: function(e, t) { var focused = this.getLastFocused(), view = this.view, viewSm = view.getSelectionModel(), parentNode, parentRecord; if (focused) { parentNode = focused.parentNode; // if focused node is already expanded, collapse it if (focused.isExpanded()) { view.collapse(focused); // has a parentNode and its not root // TODO: this needs to cover the case where the root isVisible } else if (parentNode && !parentNode.isRoot()) { // Select a range of records when doing multiple selection. if (e.shiftKey) { viewSm.selectRange(parentNode, focused, e.ctrlKey, 'up'); viewSm.setLastFocused(parentNode); // just move focus, not selection } else if (e.ctrlKey) { viewSm.setLastFocused(parentNode); // select it } else { viewSm.select(parentNode); } } } }, onKeySpace: function(e, t) { this.toggleCheck(e); }, onKeyEnter: function(e, t) { this.toggleCheck(e); }, toggleCheck: function(e){ e.stopEvent(); var selected = this.getLastSelected(); if (selected) { this.view.onCheckChange(selected); } } }); </pre> </body> </html>