@@ -16,10 +16,17 @@ qx.Class.define("qxapp.component.widget.TreeTool", {
16
16
17
17
this . __buildLayout ( ) ;
18
18
this . buildTree ( ) ;
19
+
20
+ this . addListener ( "keypress" , function ( keyEvent ) {
21
+ if ( keyEvent . getKeyIdentifier ( ) === "F2" ) {
22
+ this . __changeLabel ( ) ;
23
+ }
24
+ } , this ) ;
19
25
} ,
20
26
21
27
events : {
22
- "NodeDoubleClicked" : "qx.event.type.Data"
28
+ "NodeDoubleClicked" : "qx.event.type.Data" ,
29
+ "NodeLabelChanged" : "qx.event.type.Data"
23
30
} ,
24
31
25
32
properties : {
@@ -35,7 +42,6 @@ qx.Class.define("qxapp.component.widget.TreeTool", {
35
42
36
43
members : {
37
44
__tree : null ,
38
- __selectedNodeId : null ,
39
45
40
46
__buildLayout : function ( ) {
41
47
let tree = this . __tree = new qx . ui . tree . VirtualTree ( null , "label" , "children" ) . set ( {
@@ -73,6 +79,7 @@ qx.Class.define("qxapp.component.widget.TreeTool", {
73
79
createItem : ( ) => new qxapp . component . widget . NodeTreeItem ( ) ,
74
80
bindItem : ( c , item , id ) => {
75
81
c . bindDefaultProperties ( item , id ) ;
82
+ c . bindProperty ( "label" , "label" , null , item , id ) ;
76
83
c . bindProperty ( "nodeId" , "nodeId" , null , item , id ) ;
77
84
}
78
85
} ) ;
@@ -118,6 +125,86 @@ qx.Class.define("qxapp.component.widget.TreeTool", {
118
125
this . __tree . openNodeAndParents ( nodeInTree ) ;
119
126
this . __tree . setSelection ( new qx . data . Array ( [ nodeInTree ] ) ) ;
120
127
}
128
+ } ,
129
+
130
+ __changeLabel : function ( ) {
131
+ let treeSelection = this . __tree . getSelection ( ) ;
132
+ if ( treeSelection . length < 1 ) {
133
+ return ;
134
+ }
135
+ let selectedItem = treeSelection . toArray ( ) [ 0 ] ;
136
+ const selectedNodeId = selectedItem . getNodeId ( ) ;
137
+ if ( selectedNodeId === "root" ) {
138
+ return ;
139
+ }
140
+
141
+ let nodeLabelEditor = this . __createNodeLabelEditor ( selectedItem ) ;
142
+ const bounds = this . getLayoutParent ( ) . getBounds ( ) ;
143
+ nodeLabelEditor . moveTo ( bounds . left + 100 , bounds . top + 150 ) ;
144
+ nodeLabelEditor . open ( ) ;
145
+ } ,
146
+
147
+ __createNodeLabelEditor : function ( selectedItem ) {
148
+ const oldLabel = selectedItem . getLabel ( ) ;
149
+ const maxWidth = 350 ;
150
+ const minWidth = 100 ;
151
+ const labelWidth = Math . min ( Math . max ( parseInt ( oldLabel . length * 4 ) , minWidth ) , maxWidth ) ;
152
+ let labelEditorWin = new qx . ui . window . Window ( "Rename" ) . set ( {
153
+ appearance : "window-small-cap" ,
154
+ layout : new qx . ui . layout . HBox ( 4 ) ,
155
+ padding : 2 ,
156
+ modal : true ,
157
+ showMaximize : false ,
158
+ showMinimize : false ,
159
+ width : labelWidth
160
+ } ) ;
161
+
162
+ // Create a text field in which to edit the data
163
+ let labelEditor = new qx . ui . form . TextField ( oldLabel ) . set ( {
164
+ allowGrowX : true ,
165
+ minWidth : labelWidth
166
+ } ) ;
167
+ labelEditorWin . add ( labelEditor , {
168
+ flex : 1
169
+ } ) ;
170
+
171
+ labelEditorWin . addListener ( "appear" , e => {
172
+ labelEditor . focus ( ) ;
173
+ labelEditor . setTextSelection ( 0 , labelEditor . getValue ( ) . length ) ;
174
+ } , this ) ;
175
+
176
+ // Create the "Save" button to close the cell editor
177
+ let save = new qx . ui . form . Button ( "Save" ) ;
178
+ save . addListener ( "execute" , function ( e ) {
179
+ const newLabel = labelEditor . getValue ( ) ;
180
+ selectedItem . setLabel ( newLabel ) ;
181
+ const data = {
182
+ nodeId : selectedItem . getNodeId ( ) ,
183
+ newLabel : newLabel
184
+ } ;
185
+ this . fireDataEvent ( "NodeLabelChanged" , data ) ;
186
+
187
+ labelEditorWin . close ( ) ;
188
+ } , this ) ;
189
+ labelEditorWin . add ( save ) ;
190
+
191
+ // Let user press Enter from the cell editor text field to finish.
192
+ let command = new qx . ui . command . Command ( "Enter" ) ;
193
+ command . addListener ( "execute" , e => {
194
+ save . execute ( ) ;
195
+ command . dispose ( ) ;
196
+ command = null ;
197
+ } ) ;
198
+
199
+ // Let user press Enter from the cell editor text field to finish.
200
+ let commandEsc = new qx . ui . command . Command ( "Esc" ) ;
201
+ commandEsc . addListener ( "execute" , e => {
202
+ labelEditorWin . close ( ) ;
203
+ commandEsc . dispose ( ) ;
204
+ commandEsc = null ;
205
+ } ) ;
206
+
207
+ return labelEditorWin ;
121
208
}
122
209
}
123
210
} ) ;
0 commit comments