provide installation instructions
[extjs.git] / source / widgets / tree / TreeEventModel.js
1 /*\r
2  * Ext JS Library 2.2.1\r
3  * Copyright(c) 2006-2009, Ext JS, LLC.\r
4  * licensing@extjs.com\r
5  * \r
6  * http://extjs.com/license\r
7  */\r
8 \r
9 Ext.tree.TreeEventModel = function(tree){\r
10     this.tree = tree;\r
11     this.tree.on('render', this.initEvents, this);\r
12 }\r
13 \r
14 Ext.tree.TreeEventModel.prototype = {\r
15     initEvents : function(){\r
16         var el = this.tree.getTreeEl();\r
17         el.on('click', this.delegateClick, this);\r
18         if(this.tree.trackMouseOver !== false){\r
19             el.on('mouseover', this.delegateOver, this);\r
20             el.on('mouseout', this.delegateOut, this);\r
21         }\r
22         el.on('dblclick', this.delegateDblClick, this);\r
23         el.on('contextmenu', this.delegateContextMenu, this);\r
24     },\r
25 \r
26     getNode : function(e){\r
27         var t;\r
28         if(t = e.getTarget('.x-tree-node-el', 10)){\r
29             var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');\r
30             if(id){\r
31                 return this.tree.getNodeById(id);\r
32             }\r
33         }\r
34         return null;\r
35     },\r
36 \r
37     getNodeTarget : function(e){\r
38         var t = e.getTarget('.x-tree-node-icon', 1);\r
39         if(!t){\r
40             t = e.getTarget('.x-tree-node-el', 6);\r
41         }\r
42         return t;\r
43     },\r
44 \r
45     delegateOut : function(e, t){\r
46         if(!this.beforeEvent(e)){\r
47             return;\r
48         }\r
49         if(e.getTarget('.x-tree-ec-icon', 1)){\r
50             var n = this.getNode(e);\r
51             this.onIconOut(e, n);\r
52             if(n == this.lastEcOver){\r
53                 delete this.lastEcOver;\r
54             }\r
55         }\r
56         if((t = this.getNodeTarget(e)) && !e.within(t, true)){\r
57             this.onNodeOut(e, this.getNode(e));\r
58         }\r
59     },\r
60 \r
61     delegateOver : function(e, t){\r
62         if(!this.beforeEvent(e)){\r
63             return;\r
64         }\r
65         if(this.lastEcOver){ // prevent hung highlight\r
66             this.onIconOut(e, this.lastEcOver);\r
67             delete this.lastEcOver;\r
68         }\r
69         if(e.getTarget('.x-tree-ec-icon', 1)){\r
70             this.lastEcOver = this.getNode(e);\r
71             this.onIconOver(e, this.lastEcOver);\r
72         }\r
73         if(t = this.getNodeTarget(e)){\r
74             this.onNodeOver(e, this.getNode(e));\r
75         }\r
76     },\r
77 \r
78     delegateClick : function(e, t){\r
79         if(!this.beforeEvent(e)){\r
80             return;\r
81         }\r
82 \r
83         if(e.getTarget('input[type=checkbox]', 1)){\r
84             this.onCheckboxClick(e, this.getNode(e));\r
85         }\r
86         else if(e.getTarget('.x-tree-ec-icon', 1)){\r
87             this.onIconClick(e, this.getNode(e));\r
88         }\r
89         else if(this.getNodeTarget(e)){\r
90             this.onNodeClick(e, this.getNode(e));\r
91         }\r
92     },\r
93 \r
94     delegateDblClick : function(e, t){\r
95         if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
96             this.onNodeDblClick(e, this.getNode(e));\r
97         }\r
98     },\r
99 \r
100     delegateContextMenu : function(e, t){\r
101         if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
102             this.onNodeContextMenu(e, this.getNode(e));\r
103         }\r
104     },\r
105 \r
106     onNodeClick : function(e, node){\r
107         node.ui.onClick(e);\r
108     },\r
109 \r
110     onNodeOver : function(e, node){\r
111         node.ui.onOver(e);\r
112     },\r
113 \r
114     onNodeOut : function(e, node){\r
115         node.ui.onOut(e);\r
116     },\r
117 \r
118     onIconOver : function(e, node){\r
119         node.ui.addClass('x-tree-ec-over');\r
120     },\r
121 \r
122     onIconOut : function(e, node){\r
123         node.ui.removeClass('x-tree-ec-over');\r
124     },\r
125 \r
126     onIconClick : function(e, node){\r
127         node.ui.ecClick(e);\r
128     },\r
129 \r
130     onCheckboxClick : function(e, node){\r
131         node.ui.onCheckChange(e);\r
132     },\r
133 \r
134     onNodeDblClick : function(e, node){\r
135         node.ui.onDblClick(e);\r
136     },\r
137 \r
138     onNodeContextMenu : function(e, node){\r
139         node.ui.onContextMenu(e);\r
140     },\r
141 \r
142     beforeEvent : function(e){\r
143         if(this.disabled){\r
144             e.stopEvent();\r
145             return false;\r
146         }\r
147         return true;\r
148     },\r
149 \r
150     disable: function(){\r
151         this.disabled = true;\r
152     },\r
153 \r
154     enable: function(){\r
155         this.disabled = false;\r
156     }\r
157 };