-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathclipboard.asm
657 lines (536 loc) · 20.5 KB
/
clipboard.asm
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
JSONCutItem PROTO :DWORD ; Cut a json treeview item (wrapper for call to JSONCopyItem)
JSONCopyItem PROTO :DWORD, :DWORD ; Copy (or cut) a json treeview item
JSONPasteItem PROTO :DWORD, :DWORD ; Paste a previously copied or cut json treeview item (from JSONCopyItem)
JSONCopyBranch PROTO :DWORD, :DWORD ; NOT WORKING - WIP TODO - Copy (or cut) a json treeview branch
JSONPasteBranch PROTO :DWORD, :DWORD ; NOT WORKING - WIP TODO - Paste a previously copied or cut json treeview branch (from JSONCopyBranch)
JSONPasteBranchProcessNodes PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD ; NOT WORKING - WIP TODO
PasteJSON PROTO :DWORD ; Paste / Import Json text from clipboard
CopyToClipboard PROTO :DWORD, :DWORD ; Copy to clipboard text or text value of treeview item
CopyBranchToClipboard PROTO :DWORD, :DWORD ; hWin, hItemClip
.DATA
szExportTreeClipSuccess DB 'Copied json tree text to clipboard',0
szExportBranchClipSuccess DB 'Copied json branch text to clipboard',0
szCopyTextSuccess DB 'Copied json item text to clipboard',0
szCopyValueSuccess DB 'Copied json item value to clipboard',0
szCopyTextEmpty DB 'json item text is empty, no text copied to clipboard',0
szCopyValueEmpty DB 'json item value is empty, no text copied to clipboard',0
szCutItemSuccess DB 'Cut: Currently selected json item copied',0
szCutBranchSuccess DB 'Cut: Currently selected json branch item and children copied',0
szCopyItemSuccess DB 'Copy: Currently selected json item copied',0
szCopyBranchSuccess DB 'Copy: Currently selected json branch item and children copied',0
szPasteItemSuccess DB 'Paste: copied json item pasted',0
szPasteBranchSuccess DB 'Paste: copied json branch item and children pasted',0
szJSONLoadedClipData DB 'Loaded JSON data from clipboard',0
szClipboardData DB '[clipboard data]',0
szJSONErrorClipData DB 'Clipboard data does not contain valid JSON data',0
szJSONErrorEmptyClipData DB 'JSON clipboard data is empty',0
szPasteFromClipboardJSON DB 'Do you wish to paste JSON text from the clipboard?',0
szCopyPasteNodeText DB JSON_ITEM_MAX_TEXTLENGTH DUP (0)
hPasteToBranchNode DD 0
.CODE
;-------------------------------------------------------------------------------------
; PasteJSON - paste json from clipboard to create a tree
;-------------------------------------------------------------------------------------
PasteJSON PROC USES EBX hWin:DWORD
LOCAL ptrClipData:DWORD
Invoke IsClipboardFormatAvailable, CF_TEXT
.IF eax == FALSE
ret
.ENDIF
Invoke MessageBox, hWin, Addr szPasteFromClipboardJSON, Addr AppName, MB_YESNO
.IF eax == IDNO
Invoke SetFocus, hTV
ret
.ENDIF
Invoke JSONFileClose, hWin
Invoke OpenClipboard, hWin
Invoke GetClipboardData, CF_TEXT
.IF eax == NULL
Invoke CloseClipboard
xor eax, eax
ret
.ENDIF
mov ptrClipData, eax
Invoke JSONDataProcess, hWin, NULL, ptrClipData
.IF eax == TRUE
mov g_Edit, TRUE
Invoke MenuSaveEnable, hWin, TRUE
Invoke MenuSaveAsEnable, hWin, TRUE
Invoke ToolbarButtonSaveEnable, hWin, TRUE
Invoke ToolbarButtonSaveAsEnable, hWin, TRUE
Invoke MenusUpdate, hWin, NULL
Invoke ToolBarUpdate, hWin, NULL
.ENDIF
Invoke CloseClipboard
mov eax, TRUE
ret
PasteJSON ENDP
;-------------------------------------------------------------------------------------
; Copies selected treeview item text to clipboard. if bValueOnly == TRUE then
; extracts the value from the colon in the text and copies it to clipboard
;-------------------------------------------------------------------------------------
CopyToClipboard PROC USES EBX hWin:DWORD, bValueOnly:DWORD
LOCAL ptrClipboardData:DWORD
LOCAL hClipData:DWORD
LOCAL pClipData:DWORD
LOCAL LenData:DWORD
Invoke OpenClipboard, hWin
.IF eax == 0
ret
.ENDIF
Invoke EmptyClipboard
Invoke GlobalAlloc, GMEM_FIXED + GMEM_ZEROINIT, JSON_ITEM_MAX_TEXTLENGTH ;1024d
mov ptrClipboardData, eax
Invoke TreeViewGetSelectedText, hTV, Addr szSelectedTreeviewText, SIZEOF szSelectedTreeviewText
.IF eax == 0
Invoke StatusBarSetPanelText, 2, Addr szCopyTextEmpty
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
Invoke szLen, Addr szSelectedTreeviewText
mov LenData, eax
.IF bValueOnly == TRUE
Invoke InString, 1, Addr szSelectedTreeviewText, Addr szColon
.IF eax == 0 ; no match
Invoke StatusBarSetPanelText, 2, Addr szCopyValueEmpty
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
mov ebx, eax
mov eax, LenData
sub eax, ebx
.IF sdword ptr eax > 1
dec eax ; skip any space
.ELSE
Invoke StatusBarSetPanelText, 2, Addr szCopyValueEmpty
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
Invoke szRight, Addr szSelectedTreeviewText, ptrClipboardData, eax
Invoke szLen, ptrClipboardData
.IF eax == 0
Invoke StatusBarSetPanelText, 2, Addr szCopyValueEmpty
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
mov LenData, eax
.ELSE
Invoke RtlMoveMemory, ptrClipboardData, Addr szSelectedTreeviewText, LenData
.ENDIF
.IF LenData == 0
.IF bValueOnly == TRUE
Invoke StatusBarSetPanelText, 2, Addr szCopyValueEmpty
.ELSE
Invoke StatusBarSetPanelText, 2, Addr szCopyTextEmpty
.ENDIF
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
mov eax, LenData
inc eax
Invoke GlobalAlloc, GMEM_MOVEABLE, eax ;+GMEM_DDESHARE
.IF eax == NULL
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
mov hClipData, eax
Invoke GlobalLock, hClipData
.IF eax == NULL
Invoke GlobalFree, ptrClipboardData
Invoke GlobalFree, hClipData
Invoke CloseClipboard
ret
.ENDIF
mov pClipData, eax
mov eax, LenData
Invoke RtlMoveMemory, pClipData, ptrClipboardData, eax
Invoke GlobalUnlock, hClipData
invoke SetClipboardData, CF_TEXT, hClipData
Invoke CloseClipboard
Invoke GlobalFree, ptrClipboardData
.IF bValueOnly == TRUE
Invoke StatusBarSetPanelText, 2, Addr szCopyValueSuccess
.ELSE
Invoke StatusBarSetPanelText, 2, Addr szCopyTextSuccess
.ENDIF
ret
CopyToClipboard ENDP
;-------------------------------------------------------------------------------------
; Copies branch and all descendants to json formatted text to clipboard
;-------------------------------------------------------------------------------------
CopyBranchToClipboard PROC hWin:DWORD, hItem:DWORD
LOCAL hItemClip:DWORD
LOCAL LenData:DWORD
LOCAL ptrClipboardData:DWORD
LOCAL hClipData:DWORD
LOCAL pClipData:DWORD
LOCAL hJSON:DWORD
.IF hItem == 0
Invoke SendMessage, hTV, TVM_GETNEXTITEM, TVGN_ROOT, NULL
.IF eax == 0
ret
.ENDIF
.ELSE
mov eax, hItem
.ENDIF
mov hItemClip, eax
Invoke TreeViewGetItemParam, hTV, hItemClip
mov hJSON, eax
.IF hJSON == NULL
xor eax, eax
ret
.ENDIF
mov ebx, hJSON
mov eax, [ebx].cJSON.itemtype
.IF eax == cJSON_Array || eax == cJSON_Object
Invoke cJSON_PrintBuffered, hJSON, 4096d, TRUE
.IF eax != NULL
mov ptrClipboardData, eax
Invoke OpenClipboard, hWin
.IF eax == 0
Invoke cJSON_free, ptrClipboardData
xor eax, eax
ret
.ENDIF
Invoke EmptyClipboard
Invoke szLen, ptrClipboardData
mov LenData, eax
inc eax
Invoke GlobalAlloc, GMEM_MOVEABLE, eax ;+GMEM_DDESHARE
.IF eax == NULL
Invoke GlobalFree, ptrClipboardData
Invoke CloseClipboard
ret
.ENDIF
mov hClipData, eax
Invoke GlobalLock, hClipData
.IF eax == NULL
Invoke GlobalFree, ptrClipboardData
Invoke GlobalFree, hClipData
Invoke CloseClipboard
ret
.ENDIF
mov pClipData, eax
mov eax, LenData
Invoke RtlMoveMemory, pClipData, ptrClipboardData, eax
Invoke GlobalUnlock, hClipData
invoke SetClipboardData, CF_TEXT, hClipData
Invoke CloseClipboard
Invoke cJSON_free, ptrClipboardData
mov eax, hItemClip
.IF eax == hTVRoot
Invoke StatusBarSetPanelText, 2, Addr szExportTreeClipSuccess
.ELSE
Invoke StatusBarSetPanelText, 2, Addr szExportBranchClipSuccess
.ENDIF
mov eax, TRUE
.ELSE
xor eax, eax
.ENDIF
.ELSE
xor eax, eax
.ENDIF
ret
CopyBranchToClipboard ENDP
;-------------------------------------------------------------------------------------
; Cut a node item (calls JSONCopyItem)
;-------------------------------------------------------------------------------------
JSONCutItem PROC hItem:DWORD
Invoke JSONCopyItem, hItem, TRUE
ret
JSONCutItem ENDP
;-------------------------------------------------------------------------------------
; Copy node item
;-------------------------------------------------------------------------------------
JSONCopyItem PROC USES EBX hItem:DWORD, bCut:DWORD
LOCAL tvhi:TV_HITTESTINFO
LOCAL hJSON:DWORD
.IF hItem == NULL
Invoke TreeViewGetSelectedItem, hTV
.IF eax == 0
Invoke GetCursorPos, Addr tvhi.pt
Invoke ScreenToClient, hTV, addr tvhi.pt
Invoke SendMessage, hTV, TVM_HITTEST, 0, Addr tvhi
mov eax, tvhi.hItem
.ENDIF
.ELSE
mov eax, hItem
.ENDIF
mov g_hCutCopyNode, eax
.IF eax != 0
.IF bCut == TRUE
mov g_Cut, TRUE
Invoke TreeViewGetItemParam, hTV, g_hCutCopyNode
mov ebx, eax
mov eax, [ebx].cJSON.itemtype
mov g_CutJsonType, eax
Invoke TreeViewGetItemImage, hTV, g_hCutCopyNode
mov g_CutIcon, eax
Invoke TreeViewGetItemText, hTV, g_hCutCopyNode, Addr g_CutText, SIZEOF g_CutText
Invoke JSONRemoveItem, hTV, g_hCutCopyNode
Invoke StatusBarSetPanelText, 2, Addr szCutItemSuccess
.ELSE
mov g_Cut, FALSE
Invoke StatusBarSetPanelText, 2, Addr szCopyItemSuccess
.ENDIF
.ENDIF
ret
JSONCopyItem ENDP
;-------------------------------------------------------------------------------------
; Paste node item
;-------------------------------------------------------------------------------------
JSONPasteItem PROC USES EBX hWin:DWORD, hItem:DWORD
LOCAL tvhi:TV_HITTESTINFO
LOCAL tvi:TV_ITEM
LOCAL hPasteToNode:DWORD
LOCAL hCopyFromNode:DWORD
LOCAL hNewNode:DWORD
LOCAL hJSONCopyFrom:DWORD
LOCAL hJSONPasteTo:DWORD
LOCAL dwJsonType:DWORD
LOCAL nIcon:DWORD
LOCAL hItemPrev:DWORD
.IF g_hCutCopyNode == 0
ret
.ELSE
mov eax, g_hCutCopyNode
mov hCopyFromNode, eax
.ENDIF
mov eax, hItem
.IF eax == 0
Invoke TreeViewGetSelectedItem, hTV
.IF eax == 0
Invoke GetCursorPos, Addr tvhi.pt
Invoke ScreenToClient, hTV, addr tvhi.pt
Invoke SendMessage, hTV, TVM_HITTEST, 0, Addr tvhi
mov eax, tvhi.hItem
.ENDIF
.ELSE
mov eax, hItem
.ENDIF
mov hPasteToNode, eax
.IF hPasteToNode == 0
ret
.ENDIF
IFDEF DEBUG32
;PrintDec hCopyFromNode
;PrintDec hPasteToNode
ENDIF
.IF g_Cut == FALSE
; got copy and paste nodes
Invoke TreeViewGetItemText, hTV, hCopyFromNode, Addr szCopyPasteNodeText, SIZEOF szCopyPasteNodeText
Invoke TreeViewGetItemImage, hTV, hCopyFromNode
mov nIcon, eax
Invoke TreeViewGetItemParam, hTV, hCopyFromNode
mov hJSONCopyFrom, eax
mov ebx, eax
mov eax, [ebx].cJSON.itemtype
mov dwJsonType, eax
.ELSE
mov eax, g_CutIcon
mov nIcon, eax
mov eax, g_CutJsonType
mov dwJsonType, eax
Invoke szCopy, Addr g_CutText, Addr szCopyPasteNodeText
.ENDIF
Invoke JSONCreateItem, hTV, hPasteToNode, dwJsonType
mov hJSONPasteTo, eax
.IF hJSONPasteTo == 0
;PrintText 'hJSONAdd == 0'
ret
.ENDIF
.IF hJSONPasteTo != 0
Invoke TreeViewItemInsert, hTV, hPasteToNode, Addr szCopyPasteNodeText, g_nTVIndex, TVI_LAST, nIcon, nIcon, hJSONPasteTo
mov hNewNode, eax
inc g_nTVIndex
.IF g_Cut == TRUE
mov g_Cut, FALSE
mov g_hCutCopyNode, NULL
.ENDIF
Invoke StatusBarSetPanelText, 2, Addr szPasteItemSuccess
mov g_Edit, TRUE
Invoke MenuSaveEnable, hWin, TRUE
Invoke MenuSaveAsEnable, hWin, TRUE
Invoke ToolbarButtonSaveEnable, hWin, TRUE
Invoke ToolbarButtonSaveAsEnable, hWin, TRUE
.ENDIF
;Invoke TreeViewSetSelectedItem, hTV, hNewNode, TRUE
;Invoke TreeViewItemExpand, hTV, hNewNode
ret
JSONPasteItem ENDP
;-------------------------------------------------------------------------------------
; Copy node branch and children
;-------------------------------------------------------------------------------------
JSONCopyBranch PROC USES EBX hItem:DWORD, bCut:DWORD
LOCAL tvhi:TV_HITTESTINFO
LOCAL hJSON:DWORD
.IF hItem == NULL
Invoke TreeViewGetSelectedItem, hTV
.IF eax == 0
Invoke GetCursorPos, Addr tvhi.pt
Invoke ScreenToClient, hTV, addr tvhi.pt
Invoke SendMessage, hTV, TVM_HITTEST, 0, Addr tvhi
mov eax, tvhi.hItem
.ENDIF
.ELSE
mov eax, hItem
.ENDIF
mov g_hCutCopyBranchNode, eax
.IF eax != 0
.IF g_CutBranch == TRUE
mov g_CutBranch, TRUE
; Invoke TreeViewGetItemParam, hTV, g_hCutCopyBranchNode
; mov ebx, eax
; mov eax, [ebx].cJSON.itemtype
; mov g_CutJsonType, eax
; Invoke TreeViewGetItemImage, hTV, g_hCutCopyBranchNode
; mov g_CutIcon, eax
; Invoke TreeViewGetItemText, hTV, g_hCutCopyBranchNode, Addr g_CutText, SIZEOF g_CutText
; Invoke JSONRemoveItem, hTV, g_hCutCopyBranchNode
; Invoke StatusBarSetPanelText, 2, Addr szCutItemSuccess
.ELSE
mov g_CutBranch, FALSE
Invoke StatusBarSetPanelText, 2, Addr szCopyBranchSuccess
.ENDIF
.ENDIF
ret
JSONCopyBranch ENDP
;-------------------------------------------------------------------------------------
; Paste node item
;-------------------------------------------------------------------------------------
JSONPasteBranch PROC USES EBX hWin:DWORD, hItem:DWORD
LOCAL tvhi:TV_HITTESTINFO
LOCAL tvi:TV_ITEM
LOCAL hCopyFromNode:DWORD
;LOCAL hNewNode:DWORD
LOCAL hJSONCopyFrom:DWORD
;LOCAL hJSONPasteTo:DWORD
;LOCAL dwJsonType:DWORD
;LOCAL nIcon:DWORD
;LOCAL hItemPrev:DWORD
.IF g_hCutCopyBranchNode == 0
ret
.ELSE
mov eax, g_hCutCopyBranchNode
mov hJSONCopyFrom, eax
.ENDIF
mov eax, hItem
.IF eax == 0
Invoke TreeViewGetSelectedItem, hTV
.IF eax == 0
Invoke GetCursorPos, Addr tvhi.pt
Invoke ScreenToClient, hTV, addr tvhi.pt
Invoke SendMessage, hTV, TVM_HITTEST, 0, Addr tvhi
mov eax, tvhi.hItem
.ENDIF
.ELSE
mov eax, hItem
.ENDIF
mov hPasteToBranchNode, eax
.IF hPasteToBranchNode == 0
ret
.ENDIF
IFDEF DEBUG32
;PrintDec hCopyFromNode
;PrintDec hPasteToNode
ENDIF
Invoke TreeViewWalk, hTV, hJSONCopyFrom, Addr JSONPasteBranchProcessNodes, NULL
.IF eax == TRUE
; .IF g_CutBranch == FALSE
; ; got copy and paste nodes
; Invoke TreeViewGetItemText, hTV, hCopyFromNode, Addr szCopyPasteNodeText, SIZEOF szCopyPasteNodeText
; Invoke TreeViewGetItemImage, hTV, hCopyFromNode
; mov nIcon, eax
; Invoke TreeViewGetItemParam, hTV, hCopyFromNode
; mov hJSONCopyFrom, eax
; mov ebx, eax
; mov eax, [ebx].cJSON.itemtype
; mov dwJsonType, eax
; .ELSE
;; mov eax, g_CutIcon
;; mov nIcon, eax
;; mov eax, g_CutJsonType
;; mov dwJsonType, eax
;; Invoke szCopy, Addr g_CutText, Addr szCopyPasteNodeText
; .ENDIF
; Invoke JSONCreateItem, hTV, hPasteToNode, dwJsonType
; mov hJSONPasteTo, eax
;
; .IF hJSONPasteTo == 0
; PrintText 'hJSONAdd == 0'
; ret
; .ENDIF
;
; .IF hJSONPasteTo != 0
;
; Invoke TreeViewItemInsert, hTV, hPasteToNode, Addr szCopyPasteNodeText, g_nTVIndex, TVI_LAST, nIcon, nIcon, hJSONPasteTo
; mov hNewNode, eax
; inc g_nTVIndex
;
; .IF g_CutBranch == TRUE
; mov g_CutBranch, FALSE
; mov g_hCutCopyBranchNode, NULL
; .ENDIF
Invoke StatusBarSetPanelText, 2, Addr szPasteBranchSuccess
mov g_Edit, TRUE
Invoke MenuSaveEnable, hWin, TRUE
Invoke MenuSaveAsEnable, hWin, TRUE
Invoke ToolbarButtonSaveEnable, hWin, TRUE
Invoke ToolbarButtonSaveAsEnable, hWin, TRUE
.ENDIF
;Invoke TreeViewSetSelectedItem, hTV, hNewNode, TRUE
;Invoke TreeViewItemExpand, hTV, hNewNode
ret
JSONPasteBranch ENDP
;**************************************************************************
; JSONPasteBranchProcessNodes
;**************************************************************************
JSONPasteBranchProcessNodes PROC USES EBX hTreeview:DWORD, hItem:DWORD, dwStatus:DWORD, dwTotalItems:DWORD, dwItemNo:DWORD, dwLevel:DWORD, dwCustomData:DWORD
LOCAL hJSONCopyFrom:DWORD
LOCAL hJSONPasteTo:DWORD
LOCAL hCopyFromNode:DWORD
LOCAL hNewNode:DWORD
LOCAL dwJsonType:DWORD
LOCAL nIcon:DWORD
mov eax, dwStatus
.IF eax == TREEVIEWWALK_ITEM || eax == TREEVIEWWALK_ITEM_START || eax == TREEVIEWWALK_ITEM_FINISH
;-----------------------------------------------------------------------------
.IF eax == TREEVIEWWALK_ITEM || eax == TREEVIEWWALK_ITEM_START
;-----------------------------------------------------------------------------
mov eax, hItem
mov hCopyFromNode, eax
Invoke TreeViewGetItemText, hTreeview, hCopyFromNode, Addr szCopyPasteNodeText, SIZEOF szCopyPasteNodeText
Invoke TreeViewGetItemImage, hTreeview, hCopyFromNode
mov nIcon, eax
Invoke TreeViewGetItemParam, hTreeview, hCopyFromNode
mov hJSONCopyFrom, eax
mov ebx, eax
mov eax, [ebx].cJSON.itemtype
mov dwJsonType, eax
Invoke JSONCreateItem, hTreeview, hPasteToBranchNode, dwJsonType
mov hJSONPasteTo, eax
.IF hJSONPasteTo != 0
Invoke TreeViewItemInsert, hTreeview, hPasteToBranchNode, Addr szCopyPasteNodeText, g_nTVIndex, TVI_LAST, nIcon, nIcon, hJSONPasteTo
mov hNewNode, eax
inc g_nTVIndex
.ENDIF
.ENDIF
;-----------------------------------------------------------------------------
mov eax, dwStatus
.IF eax == TREEVIEWWALK_ITEM_START
push hPasteToBranchNode
mov eax, hNewNode
mov hPasteToBranchNode, eax
.ELSEIF eax == TREEVIEWWALK_ITEM_FINISH
pop hPasteToBranchNode
.ENDIF
.ENDIF
;-----------------------------------------------------------------------------
ret
JSONPasteBranchProcessNodes ENDP