!import
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1 <?xml version="1.0"?>
2
3 <bindings id="treeEditBindings"
4 xmlns="http://www.mozilla.org/xbl"
5 xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
6
7 <binding id="edittree" extends="chrome://global/content/bindings/tree.xml#tree">
8 <content>
9 <children includes="treecols"/>
10 <xul:stack flex="1">
11 <xul:treerows class="tree-rows" flex="1">
12 <children/>
13 </xul:treerows>
14 <xul:textbox ileattr="text" left="0" top="0" hidden="true"/>
15 </xul:stack>
16 </content>
17 <implementation>
field__editOriginalValue
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
18 <field name="_editOriginalValue">0</field>
field__editRow
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
19 <field name="_editRow">-1</field>
field__editCol
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
20 <field name="_editCol">null</field>
field_onAccept
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
21 <field name="onAccept">null</field>
22 <method name="setEditMode">
23 <parameter name="x"/>
24 <parameter name="y"/>
25 <parameter name="val"/>
setEditMode
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
26 <body>
27 <![CDATA[
28 var txt = document.getAnonymousElementByAttribute(this, "ileattr", "text");
29 if (val){
30 if (x < 0) return;
31
32 var originalValue = this.view.getCellText(x,y);
33 var cellnode = this.getCellNodeAt(x,y);
34 if (!(cellnode || this.view.isEditable(x,y))) return;
35
36 if (this._editRow >= 0) this._assignValueToCell(txt.value,true);
37
38 if (cellnode && cellnode.getAttribute("readonly")) return;
39 txt.removeAttribute("hidden");
40
41 var treeBox = this.treeBoxObject;
42 var outx = {}, outy = {}, outwidth = {}, outheight = {};
43 var coords = treeBox.getCoordsForCellItem(x,y,"cell",outx,outy,outwidth,outheight);
44
45 this._editRow = x;
46 this._editCol = y;
47
48 txt.setAttribute("left",outx.value-3);
49 txt.setAttribute("top",outy.value-3);
50 txt.setAttribute("height",outheight.value);
51
52 txt.setAttribute("width",outwidth.value - outy.value);
53
54 this._editOriginalValue = originalValue;
55 if (cellnode) cellnode.setAttribute("label","");
56 this.view.setCellText(x,y,"");
57
58 txt.value = originalValue;
59 txt.select();
60 this.setAttribute("editing","true");
61
62 txt.addEventListener("keypress", this.fieldKeyDown, false);
63 txt.addEventListener("blur", this.fieldChange, true);
64 }
65 else {
66 this.removeAttribute("editing");
67
68 txt.setAttribute("hidden","true");
69 txt.removeEventListener("keypress", this.fieldKeyDown, false);
70 txt.removeEventListener("blur", this.fieldChange, true);
71 txt.blur();
72 }
73 ]]>
74 </body>
75 </method>
76 <method name="getCellNodeAt">
77 <parameter name="row"/>
78 <parameter name="col"/>
getCellNodeAt
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
79 <body>
80 var view;
81 try {
82 view = this.contentView;
83 } catch (ex){}
84 if (view){
85 var elem = view.getItemAtIndex(row);
86 if (elem){
87 var pos = ((document.getElementById(col).ordinal - 1) >> 1);
88 return elem.firstChild.childNodes[pos];
89 }
90 }
91 return null;
92 </body>
93 </method>
94 <method name="fieldKeyDown">
95 <parameter name="aEvent"/>
fieldKeyDown
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
96 <body>
97 <![CDATA[
98 var tree = aEvent.target;
99 while (tree && tree.tagName != "tree") tree = tree.parentNode;
100 if (aEvent.keyCode == 13){
101 tree._assignValueToCell(this.value,true);
102 }
103 if (aEvent.keyCode == 27){
104 tree._assignValueToCell(tree._editOriginalValue,false);
105 }
106 aEvent.stopPropagation();
107 ]]>
108 </body>
109 </method>
110 <method name="_assignValueToCell">
111 <parameter name="value"/>
112 <parameter name="acceptMode"/>
_assignValueToCell
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
113 <body>
114 <![CDATA[
115 var rdf = Components
116 .classes["@mozilla.org/rdf/rdf-service;1"]
117 .getService(Components.interfaces.nsIRDFService);
118 if (this._editRow == -1) return;
119 if (acceptMode && this.onAccept &&
120 this.onAccept(this._editRow,this._editCol,this._editOriginalValue,value))
121 return;
122
123 var cellnode = this.getCellNodeAt(this._editRow,this._editCol);
124 if (cellnode) {
125 cellnode.setAttribute("label", value);
126
127 var item = cellnode;
128 while (item && item.tagName != "treeitem")
129 item = item.parentNode;
130
131 if (this._editCol == "subs-name-column") {
132 updateTitle(item.id, value);
133 }
134 else if (this._editCol == "subs-url-column") {
135 updateURL(item.id, value);
136 }
137 }
138
139 this.view.setCellText(this._editRow,this._editCol,value);
140 this.treeBoxObject.invalidateCell(this._editRow,this._editCol);
141 this._editRow = -1;
142 this._editCol = null;
143 this.builder.rebuild();
144
145 this.setEditMode("normal");
146 ]]>
147 </body>
148 </method>
149 <method name="fieldChange">
150 <parameter name="aEvent"/>
fieldChange
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
151 <body>
152 <![CDATA[
153 var tree = aEvent.target;
154 while (tree && tree.tagName != "tree") tree = tree.parentNode;
155 tree._assignValueToCell(this.value,true);
156 ]]>
157 </body>
158 </method>
159 </implementation>
160 <handlers>
onclick
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
161 <handler event="click" clickcount="2" phase="capturing">
162 <![CDATA[
163 var treeBox = this.treeBoxObject;
164 var row = {};
165 var col = {};
166 var obj = {};
167 if(row.value != -1) {
168 event.stopPropagation();
169 treeBox.getCellAt(event.clientX,event.clientY,row,col,obj);
170 this.setEditMode(row.value,col.value,true);
171 }
172 ]]>
173 </handler>
174 </handlers>
175 </binding>
176
177 </bindings>