TreeModel.html
3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!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>