-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmenus.asm
1505 lines (1265 loc) · 55.5 KB
/
menus.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
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
MenusInit PROTO :DWORD ; Initialize Main Menu and Right Click (RC) shortcut menu and submenus
MenusReset PROTO :DWORD ; Reset all menu items on Main Menu and Right Click (RC) shortcut menu back to default state
MenusUpdate PROTO :DWORD, :DWORD ; Update Main Menu and Right Click (RC) shortcute menu and submenus
MenuMainInit PROTO :DWORD ; Initialize main menu, load bitmaps, set initial state
MenuMainUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update menus based on edit state, selected item, selected branch etc
MenuRCInit PROTO :DWORD ; Initialize Right Click (RC) shortcut menu (called from MenusInit)
MenuRCUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update Right Click (RC) shortcut menu (called from MenusUpdate)
MenuRCAddInit PROTO :DWORD ; Initialize 'RC->Add Item' submenu (called from MenuRCInit)
MenuRCAddUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update 'RC->Add Item' submenu (called from MenuRCUpdate)
MenuRCCopyInit PROTO :DWORD ; Initialize 'RC->Copy' submenu (called from MenuRCInit)
MenuRCCopyUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update 'RC->Copy' submenu (called from MenuRCUpdate)
MenuRCPasteInit PROTO :DWORD ; Initialize 'RC->Paste' submenu (called from MenuRCInit)
MenuRCPasteUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update 'RC->Paste' submenu (called from MenuRCUpdate)
MenuRCExportInit PROTO :DWORD ; Initialize 'RC->Export' submenu (called from MenuRCInit)
MenuRCExportUpdate PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD ; Update 'RC->Export' submenu (called from MenuRCUpdate)
MenuOptionsUpdate PROTO :DWORD ; Update 'File->Otions' menu items
MenuSaveEnable PROTO :DWORD, :DWORD ; Enable/Disable 'File->Save' menu item
MenuSaveAsEnable PROTO :DWORD, :DWORD ; Enable/Disable 'File->Save As' menu item
MenuRCShow PROTO :DWORD ; Show Right Click (RC) shortcut menu
MenuRCAddShow PROTO :DWORD ; Show 'RC->Add Item' submenu. Just the 'Add Item' submenu
IniMRULoadListToMenu PROTO :DWORD ; Loads Most Recently Used (MRU) file list to the Main Menu under the File menu
IniMRUReloadListToMenu PROTO :DWORD ; Reloads the MRU list and updates the list under the File menu
IniMRUEntrySaveFilename PROTO :DWORD, :DWORD ; Saves a new MRU entry name (full filepath to file)
IniMRUEntryDeleteFilename PROTO :DWORD, :DWORD ; Deletes a new MRU entry name (full filepath to file)
IniMRUEntryOpenFile PROTO :DWORD, :DWORD ; Opens a file (if it exists) based on the MRU entry name (full filepath to file)
.CONST
BMP_ABOUT_LETTHELIGHTIN EQU 101
; Main menu bitmaps: File
BMP_FILE_MRU EQU 200
BMP_FILE_OPEN EQU 201
BMP_FILE_CLOSE EQU 202
BMP_FILE_NEW EQU 203
BMP_FILE_SAVE EQU 204
BMP_FILE_SAVEAS EQU 205
BMP_FILE_EXPORT EQU 206
BMP_FILE_EXPORT_CLIP EQU 207
BMP_FILE_EXPORT_DISK EQU 208
BMP_FILE_EXIT EQU 209
; Main menu bitmaps: Edit
BMP_EDIT_COPY_TEXT EQU 221
BMP_EDIT_COPY_VALUE EQU 222
BMP_EDIT_COPY_ITEM EQU 223
BMP_EDIT_COPY_BRANCH EQU 224
BMP_EDIT_PASTE_TEXT EQU 225
BMP_EDIT_PASTE_ITEM EQU 226
BMP_EDIT_PASTE_BRANCH EQU 227
BMP_EDIT_PASTE_JSON EQU 228
BMP_EDIT_CUT_ITEM EQU 0
BMP_EDIT_CUT_BRANCH EQU 0
BMP_EDIT_FIND EQU 229
; Right click menu bitmaps:
BMP_CMD_EDIT_ITEM EQU 250
BMP_CMD_ADD_ITEM EQU 251
BMP_CMD_DEL_ITEM EQU 252
BMP_CMD_COPY EQU 253
BMP_CMD_PASTE EQU 254
BMP_CMD_EXPAND_BRANCH EQU 255
BMP_CMD_EXPAND_ALL EQU 256
BMP_CMD_COLLAPSE_BRANCH EQU 257
BMP_CMD_COLLAPSE_ALL EQU 258
BMP_CMD_EXPORT EQU 259
BMP_CMD_FIND EQU BMP_EDIT_FIND
; Right click 'Add' submenu bitmaps:
BMP_CMD_ADD_ITEM_STRING EQU 270
BMP_CMD_ADD_ITEM_NUMBER EQU 271
BMP_CMD_ADD_ITEM_TRUE EQU 272
BMP_CMD_ADD_ITEM_FALSE EQU 273
BMP_CMD_ADD_ITEM_ARRAY EQU 274
BMP_CMD_ADD_ITEM_OBJECT EQU 275
; Right click 'Copy' submenu bitmaps:
BMP_CMD_COPY_TEXT EQU BMP_EDIT_COPY_TEXT
BMP_CMD_COPY_VALUE EQU BMP_EDIT_COPY_VALUE
BMP_CMD_COPY_ITEM EQU BMP_EDIT_COPY_ITEM
BMP_CMD_COPY_BRANCH EQU BMP_EDIT_COPY_BRANCH
BMP_CMD_CUT_ITEM EQU BMP_EDIT_CUT_ITEM
BMP_CMD_CUT_BRANCH EQU BMP_EDIT_CUT_BRANCH
; Right click 'Paste' submenu bitmaps:
BMP_CMD_PASTE_JSON EQU BMP_EDIT_PASTE_JSON
BMP_CMD_PASTE_ITEM EQU BMP_EDIT_PASTE_ITEM
BMP_CMD_PASTE_BRANCH EQU BMP_EDIT_PASTE_BRANCH
; Right click 'Export' submenu bitmaps:
BMP_CMD_EXPORT_TREE_CLIP EQU 290
BMP_CMD_EXPORT_BRANCH_CLIP EQU BMP_CMD_EXPORT_TREE_CLIP
BMP_CMD_EXPORT_TREE_FILE EQU 291
BMP_CMD_EXPORT_BRANCH_FILE EQU BMP_CMD_EXPORT_TREE_FILE
; Main Menu IDs:
IDM_MENU EQU 10000
IDM_FILE_EXIT EQU 10001
IDM_FILE_OPEN EQU 10002
IDM_FILE_CLOSE EQU 10003
IDM_FILE_NEW EQU 10004
IDM_FILE_SAVE EQU 10005
IDM_FILE_SAVEAS EQU 10006
IDM_EDIT_COPY_TEXT EQU 10201
IDM_EDIT_COPY_VALUE EQU 10202
IDM_EDIT_CUT_ITEM EQU 10203
IDM_EDIT_CUT_BRANCH EQU 10204
IDM_EDIT_COPY_ITEM EQU 10205
IDM_EDIT_COPY_BRANCH EQU 10206
IDM_EDIT_PASTE_ITEM EQU 10207
IDM_EDIT_PASTE_BRANCH EQU 10208
IDM_EDIT_PASTE_JSON EQU 10209
IDM_EDIT_FIND EQU 10210
IDM_OPTIONS_EXPANDALL EQU 10301
IDM_OPTIONS_CASESEARCH EQU 10302
IDM_HELP_ABOUT EQU 10101
; Main Menu MRU files:
IDM_MRU_1 EQU 19991 ; Menu MRU File 1
IDM_MRU_2 EQU 19992 ; Menu MRU File 2
IDM_MRU_3 EQU 19993 ; Menu MRU File 3
IDM_MRU_4 EQU 19994 ; Menu MRU File 4
IDM_MRU_5 EQU 19995 ; Menu MRU File 5
IDM_MRU_6 EQU 19996 ; Menu MRU File 6
IDM_MRU_7 EQU 19997 ; Menu MRU File 7
IDM_MRU_8 EQU 19998 ; Menu MRU File 8
IDM_MRU_9 EQU 19999 ; Menu MRU File 9
IDM_MRU_SEP EQU 19990
; Right click menu IDs:
IDM_CMD_COLLAPSE_BRANCH EQU 11000
IDM_CMD_EXPAND_BRANCH EQU 11001
IDM_CMD_COLLAPSE_ALL EQU 11002
IDM_CMD_EXPAND_ALL EQU 11003
IDM_CMD_ADD_ITEM EQU 11004
IDM_CMD_DEL_ITEM EQU 11005
IDM_CMD_EDIT_ITEM EQU 11006
IDM_CMD_COPY EQU 11007
IDM_CMD_PASTE EQU 11008
IDM_CMD_EXPORT EQU 11009
IDM_CMD_FIND EQU 11010
; Right click 'Add' submenu IDs:
IDM_CMD_ADD_ITEM_STRING EQU 11020
IDM_CMD_ADD_ITEM_NUMBER EQU 11021
IDM_CMD_ADD_ITEM_TRUE EQU 11022
IDM_CMD_ADD_ITEM_FALSE EQU 11023
IDM_CMD_ADD_ITEM_ARRAY EQU 11024
IDM_CMD_ADD_ITEM_OBJECT EQU 11025
; Right click 'Copy' submenu IDs:
IDM_CMD_COPY_TEXT EQU 11030
IDM_CMD_COPY_VALUE EQU 11031
IDM_CMD_CUT_ITEM EQU 11032
IDM_CMD_CUT_BRANCH EQU 11033
IDM_CMD_COPY_ITEM EQU 11034
IDM_CMD_COPY_BRANCH EQU 11035
; Right click 'Paste' submenu IDs:
IDM_CMD_PASTE_ITEM EQU 11040
IDM_CMD_PASTE_BRANCH EQU 11041
IDM_CMD_PASTE_JSON EQU 11042
; Right click 'Export' submenu IDs:
IDM_CMD_EXPORT_ROOT_CLIP EQU 11050
IDM_CMD_EXPORT_BRANCH_CLIP EQU 11051
IDM_CMD_EXPORT_ROOT_FILE EQU 11052
IDM_CMD_EXPORT_BRANCH_FILE EQU 11053
.DATA
; Right click menu strings:
szTVRCMenuCollapseBranch DB 'Collapse Branch',09h,"-",0
szTVRCMenuExpandBranch DB 'Expand Branch',09h,"+",0
szTVRCMenuCollapseAll DB 'Collapse All',09h,"Ctrl+PageUp",0
szTVRCMenuExpandAll DB 'Expand All',09h,"Ctrl+PageDown",0
szTVRCMenuCopy DB 'Copy',0
szTVRCMenuAddItem DB 'Add Item',09h,"Insert",0
szTVRCMenuDelItem DB 'Delete Item',0
szTVRCMenuEditItem DB 'Edit Item',0
szTVRCMenuExport DB 'Export',0
szTVRCMenuPaste DB 'Paste',0
szTVRCMenuFindText DB 'Find...',09h,"Ctrl+F",0
; Right click 'Add' submenu strings:
szTVRCMenuAddItemString DB 'Add String',09h,"Ctrl+1",0
szTVRCMenuAddItemNumber DB 'Add Number',09h,"Ctrl+2",0
szTVRCMenuAddItemTrue DB 'Add True',09h,"Ctrl+3",0
szTVRCMenuAddItemFalse DB 'Add False',09h,"Ctrl+4",0
szTVRCMenuAddItemArray DB 'Add Array',09h,"Ctrl+5",0
szTVRCMenuAddItemObject DB 'Add Object',09h,"Ctrl+6",0
; Right click 'Copy' submenu strings:
szTVRCMenuCopyText DB 'Copy Text',09h,"Ctrl+C",0
szTVRCMenuCopyValue DB 'Copy Value',0
szTVRCMenuCopyItem DB 'Copy Item',09h,"Ctrl+I",0
szTVRCMenuCopyBranch DB 'Copy Branch',09h,"Ctrl+Y",0
; Right click 'Paste' submenu strings:
szTVRCMenuPasteItem DB 'Paste Item',09h,"Ctrl+O",0
szTVRCMenuPasteBranch DB 'Paste Branch',09h,"Ctrl+P",0
szTVRCMenuPasteJSON DB 'Paste JSON',09h,"Ctrl+V",0
szTVRCMenuPasteInsert DB 'Paste JSON (Insert)',0
; Right click 'Export' submenu strings:
szTVRCMenuExportTreeClip DB 'Export tree to clipboard',09h,"Ctrl+Shift+V",0
szTVRCMenuExportBranchClip DB 'Export branch to clipboard',09h,"Ctrl+Shift+X",0
szTVRCMenuExportTreeFile DB 'Export tree to file',09h,"Ctrl+Shift+S",0
szTVRCMenuExportBranchFile DB 'Export branch to file',09h,"Ctrl+Shift+A",0
; Options
szOptionsCaseSensitive DB '&Case Sensitive Search',0
szOptionsCaseInsensitive DB '&Case Insensitive Search',0
hBmpFileMRU DD 0
szMRUErrorFileNotExist DB "File does not exist: ",0
szMRUErrorMessage DB 512 dup (0)
.DATA
hTVMenu DD ? ; Right click menu
hTVAddMenu DD ? ; 'Add' submenu
; Menu add shortcut key to text add tab \t - &New\tCtrl+N - right align them you use \a instead of \t &New\aCtrl+N
.CODE
;-------------------------------------------------------------------------------------
; MenusInit - Initialize menus
;-------------------------------------------------------------------------------------
MenusInit PROC hWin:DWORD
Invoke MenuMainInit, hWin
Invoke MenuRCInit, hWin
ret
MenusInit ENDP
;-------------------------------------------------------------------------------------
; MenuMainInit - Initialize main program menu
;-------------------------------------------------------------------------------------
MenuMainInit PROC hWin:DWORD
LOCAL hMainMenu:DWORD
LOCAL hBitmap:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_GRAYED
Invoke GetMenu, hWin
mov hMainMenu, eax
; Load bitmaps for main menu: File
Invoke LoadBitmap, hInstance, BMP_FILE_OPEN
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_OPEN, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_FILE_CLOSE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_CLOSE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_FILE_NEW
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_NEW, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_FILE_SAVE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_SAVE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_FILE_SAVEAS
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_SAVEAS, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_FILE_EXIT
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_FILE_EXIT, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_ABOUT_LETTHELIGHTIN
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_HELP_ABOUT, MF_BYCOMMAND, hBitmap, 0
; Load bitmaps for main menu: Edit
Invoke LoadBitmap, hInstance, BMP_EDIT_COPY_TEXT
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_COPY_TEXT, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_COPY_VALUE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_COPY_VALUE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_COPY_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_COPY_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_COPY_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_COPY_BRANCH, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_PASTE_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_PASTE_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_PASTE_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_PASTE_BRANCH, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_PASTE_JSON
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_PASTE_JSON, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_EDIT_FIND
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hMainMenu, IDM_EDIT_FIND, MF_BYCOMMAND, hBitmap, 0
; Set initial state of some of the menu items
mov mi.fState, MFS_ENABLED
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_NEW, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_OPEN, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_CLOSE, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_EXIT, FALSE, Addr mi
mov mi.fState, MFS_GRAYED
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_SAVE, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_SAVEAS, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_TEXT, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_VALUE, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_BRANCH, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_BRANCH, FALSE, Addr mi
Invoke IsClipboardFormatAvailable, CF_TEXT
.IF eax == TRUE
mov mi.fState, MFS_ENABLED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_JSON, FALSE, Addr mi
;mov mi.fMask, MIIM_CHECKMARKS
;mov mi.fState, MFS_CHECKED ; MFS_UNCHECKED
.IF g_ExpandAllOnLoad == TRUE
;mov mi.fState, MFS_CHECKED
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_EXPANDALL, MF_BYCOMMAND or MF_CHECKED
.ELSE
;mov mi.fState, MFS_UNCHECKED
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_EXPANDALL, MF_BYCOMMAND or MF_UNCHECKED
.ENDIF
;Invoke SetMenuItemInfo, hMainMenu, IDM_OPTIONS_EXPANDALL, FALSE, Addr mi
.IF g_CaseSensitiveSearch == TRUE
;mov mi.fState, MFS_CHECKED
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_CASESEARCH, MF_BYCOMMAND or MF_CHECKED
.ELSE
;mov mi.fState, MFS_UNCHECKED
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_CASESEARCH, MF_BYCOMMAND or MF_UNCHECKED
.ENDIF
;Invoke SetMenuItemInfo, hMainMenu, IDM_OPTIONS_CASESEARCH, FALSE, Addr mi
;Invoke DrawMenuBar, hWin
xor eax, eax
ret
MenuMainInit ENDP
;-------------------------------------------------------------------------------------
; MenuRCInit - Initialize treeview right click menu
;-------------------------------------------------------------------------------------
MenuRCInit PROC hWin:DWORD
LOCAL hBitmap:DWORD
LOCAL hSubMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_GRAYED
; Create right click treeview menu
Invoke CreatePopupMenu
mov hTVMenu, eax
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_EDIT_ITEM, Addr szTVRCMenuEditItem
; Add submenu 'Add' to rght click menu
Invoke MenuRCAddInit, hWin
mov hSubMenu, eax
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_SUBMENU + MIIM_STRING + MIIM_ID
mov mi.wID, IDM_CMD_ADD_ITEM
mov eax, hSubMenu
mov mi.hSubMenu, eax
lea eax, szTVRCMenuAddItem
mov mi.dwTypeData, eax
Invoke InsertMenuItem, hTVMenu, IDM_CMD_ADD_ITEM, FALSE, Addr mi
mov mi.fMask, MIIM_STATE
mov mi.wID, 0
mov mi.hSubMenu, 0
mov mi.dwTypeData, 0
; Strings for right click menu
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_DEL_ITEM, Addr szTVRCMenuDelItem
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
; Add submenu 'Copy' to right click menu
Invoke MenuRCCopyInit, hWin
mov hSubMenu, eax
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_SUBMENU + MIIM_STRING + MIIM_ID
mov mi.wID, IDM_CMD_COPY
mov eax, hSubMenu
mov mi.hSubMenu, eax
lea eax, szTVRCMenuCopy
mov mi.dwTypeData, eax
Invoke InsertMenuItem, hTVMenu, IDM_CMD_COPY, FALSE, Addr mi
mov mi.fMask, MIIM_STATE
mov mi.wID, 0
mov mi.hSubMenu, 0
mov mi.dwTypeData, 0
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
; Add submenu 'Paste' to right click menu
Invoke MenuRCPasteInit, hWin
mov hSubMenu, eax
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_SUBMENU + MIIM_STRING + MIIM_ID
mov mi.wID, IDM_CMD_PASTE
mov eax, hSubMenu
mov mi.hSubMenu, eax
lea eax, szTVRCMenuPaste
mov mi.dwTypeData, eax
Invoke InsertMenuItem, hTVMenu, IDM_CMD_PASTE, FALSE, Addr mi
mov mi.fMask, MIIM_STATE
mov mi.wID, 0
mov mi.hSubMenu, 0
mov mi.dwTypeData, 0
; Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_COPY_TEXT, Addr szTVRCMenuCopyText
; Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_COPY_VALUE, Addr szTVRCMenuCopyValue
; Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_COPY_BRANCH, Addr szTVRCMenuCopyBranch
;Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
;Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_PASTE_JSON, Addr szTVRCMenuPasteJSON
; Add submenu 'Export' to rght click menu
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
Invoke MenuRCExportInit, hWin
mov hSubMenu, eax
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_SUBMENU + MIIM_STRING + MIIM_ID
mov mi.wID, IDM_CMD_EXPORT
mov eax, hSubMenu
mov mi.hSubMenu, eax
lea eax, szTVRCMenuExport
mov mi.dwTypeData, eax
Invoke InsertMenuItem, hTVMenu, IDM_CMD_EXPORT, FALSE, Addr mi
mov mi.fMask, MIIM_STATE
mov mi.wID, 0
mov mi.hSubMenu, 0
mov mi.dwTypeData, 0
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_FIND, Addr szTVRCMenuFindText
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_COLLAPSE_BRANCH, Addr szTVRCMenuCollapseBranch
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_EXPAND_BRANCH, Addr szTVRCMenuExpandBranch
Invoke AppendMenu, hTVMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_COLLAPSE_ALL, Addr szTVRCMenuCollapseAll
Invoke AppendMenu, hTVMenu, MF_STRING, IDM_CMD_EXPAND_ALL, Addr szTVRCMenuExpandAll
; Load bitmaps for right click menu
Invoke LoadBitmap, hInstance, BMP_CMD_FIND
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_FIND, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COLLAPSE_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_COLLAPSE_BRANCH, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPAND_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_EXPAND_BRANCH, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COLLAPSE_ALL
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_COLLAPSE_ALL, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPAND_ALL
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_EXPAND_ALL, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COPY
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_COPY, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_PASTE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_PASTE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_ADD_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EDIT_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_EDIT_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_DEL_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_DEL_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPORT
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hTVMenu, IDM_CMD_EXPORT, MF_BYCOMMAND, hBitmap, 0
; Set inital state for some menu items
mov mi.fState, MFS_GRAYED
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_TEXT, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_VALUE, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_BRANCH, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_PASTE, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EDIT_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_DEL_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COLLAPSE_BRANCH, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EXPAND_BRANCH, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COLLAPSE_ALL, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EXPAND_ALL, FALSE, Addr mi
ret
MenuRCInit ENDP
;-------------------------------------------------------------------------------------
; MenuRCAddInit - Initialize treeview right click 'Add' submenu
;-------------------------------------------------------------------------------------
MenuRCAddInit PROC hWin:DWORD
LOCAL hBitmap:DWORD
LOCAL hSubMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_ENABLED
; Create 'Add Item' submenu items
Invoke CreatePopupMenu
mov hSubMenu, eax
mov hTVAddMenu, eax
; Strings for 'Add' submenu
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_STRING, Addr szTVRCMenuAddItemString
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_NUMBER, Addr szTVRCMenuAddItemNumber
Invoke AppendMenu, hSubMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_TRUE, Addr szTVRCMenuAddItemTrue
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_FALSE, Addr szTVRCMenuAddItemFalse
Invoke AppendMenu, hSubMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_ARRAY, Addr szTVRCMenuAddItemArray
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_ADD_ITEM_OBJECT, Addr szTVRCMenuAddItemObject
; Load bitmaps for 'Add Item' submenu
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_STRING
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_STRING, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_NUMBER
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_NUMBER, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_TRUE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_TRUE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_FALSE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_FALSE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_ARRAY
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_ARRAY, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_ADD_ITEM_OBJECT
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_ADD_ITEM_OBJECT, MF_BYCOMMAND, hBitmap, 0
mov eax, hSubMenu ; return handle to submenu
ret
MenuRCAddInit ENDP
;-------------------------------------------------------------------------------------
; MenuRCCopyInit - Initialize treeview right click 'Copy' submenu
;-------------------------------------------------------------------------------------
MenuRCCopyInit PROC hWin:DWORD
LOCAL hBitmap:DWORD
LOCAL hSubMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_GRAYED ;MFS_ENABLED
; Create 'Copy' submenu items
Invoke CreatePopupMenu
mov hSubMenu, eax
; Strings for 'Copy' submenu
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_COPY_TEXT, Addr szTVRCMenuCopyText
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_COPY_VALUE, Addr szTVRCMenuCopyValue
Invoke AppendMenu, hSubMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_COPY_ITEM, Addr szTVRCMenuCopyItem
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_COPY_BRANCH, Addr szTVRCMenuCopyBranch
; Load bitmaps for 'Copy' submenu
Invoke LoadBitmap, hInstance, BMP_CMD_COPY_TEXT
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_COPY_TEXT, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COPY_VALUE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_COPY_VALUE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COPY_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_COPY_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_COPY_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_COPY_BRANCH, MF_BYCOMMAND, hBitmap, 0
mov eax, hSubMenu ; return handle to submenu
ret
MenuRCCopyInit ENDP
;-------------------------------------------------------------------------------------
; MenuRCPasteInit - Initialize treeview right click 'Paste' submenu
;-------------------------------------------------------------------------------------
MenuRCPasteInit PROC hWin:DWORD
LOCAL hBitmap:DWORD
LOCAL hSubMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_GRAYED ;MFS_ENABLED
; Create 'Paste' submenu items
Invoke CreatePopupMenu
mov hSubMenu, eax
; Strings for 'Paste' submenu
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_PASTE_ITEM, Addr szTVRCMenuPasteItem
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_PASTE_BRANCH, Addr szTVRCMenuPasteBranch
;Invoke AppendMenu, hSubMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_PASTE_JSON, Addr szTVRCMenuPasteJSON
; Load bitmaps for 'Paste' submenu
Invoke LoadBitmap, hInstance, BMP_CMD_PASTE_ITEM
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_PASTE_ITEM, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_PASTE_BRANCH
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_PASTE_BRANCH, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_PASTE_JSON ; BMP_EDIT_PASTE_JSON
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_PASTE_JSON, MF_BYCOMMAND, hBitmap, 0
; Set inital state for some menu items
mov mi.fState, MFS_GRAYED
Invoke SetMenuItemInfo, hSubMenu, IDM_CMD_PASTE_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hSubMenu, IDM_CMD_PASTE_BRANCH, FALSE, Addr mi
Invoke IsClipboardFormatAvailable, CF_TEXT
.IF eax == TRUE
mov mi.fState, MFS_ENABLED
.ENDIF
Invoke SetMenuItemInfo, hSubMenu, IDM_CMD_PASTE_JSON, FALSE, Addr mi
mov eax, hSubMenu ; return handle to submenu
ret
MenuRCPasteInit ENDP
;-------------------------------------------------------------------------------------
; MenuRCExportInit - Initialize treeview right click 'Export' submenu
;-------------------------------------------------------------------------------------
MenuRCExportInit PROC hWin:DWORD
LOCAL hBitmap:DWORD
LOCAL hSubMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
mov mi.fState, MFS_GRAYED ;MFS_ENABLED
; Create 'Export' submenu items
Invoke CreatePopupMenu
mov hSubMenu, eax
; Strings for 'Export' submenu
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_EXPORT_ROOT_CLIP, Addr szTVRCMenuExportTreeClip
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_EXPORT_BRANCH_CLIP, Addr szTVRCMenuExportBranchClip
Invoke AppendMenu, hSubMenu, MF_SEPARATOR, 0, 0
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_EXPORT_ROOT_FILE, Addr szTVRCMenuExportTreeFile
Invoke AppendMenu, hSubMenu, MF_STRING, IDM_CMD_EXPORT_BRANCH_FILE, Addr szTVRCMenuExportBranchFile
; Load bitmaps for 'Export' submenu
Invoke LoadBitmap, hInstance, BMP_CMD_EXPORT_TREE_CLIP
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_EXPORT_ROOT_CLIP, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPORT_BRANCH_CLIP
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_EXPORT_BRANCH_CLIP, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPORT_TREE_FILE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_EXPORT_ROOT_FILE, MF_BYCOMMAND, hBitmap, 0
Invoke LoadBitmap, hInstance, BMP_CMD_EXPORT_BRANCH_FILE
mov hBitmap, eax
Invoke SetMenuItemBitmaps, hSubMenu, IDM_CMD_EXPORT_BRANCH_FILE, MF_BYCOMMAND, hBitmap, 0
mov eax, hSubMenu ; return handle to submenu
ret
MenuRCExportInit ENDP
;-------------------------------------------------------------------------------------
; MenusUpdate - Initialize menus
;-------------------------------------------------------------------------------------
MenusUpdate PROC USES EBX hWin:DWORD, hItem:DWORD
LOCAL tvhi:TV_HITTESTINFO
LOCAL hCurrentItem:DWORD
LOCAL bInTV:DWORD
LOCAL bHasChildren:DWORD
LOCAL bObjectOrArray:DWORD
LOCAL bRoot:DWORD
mov bInTV, FALSE
mov bHasChildren, FALSE
mov bObjectOrArray, FALSE
mov bRoot, FALSE
.IF hItem == NULL
Invoke GetCursorPos, Addr tvhi.pt
Invoke ScreenToClient, hTV, addr tvhi.pt
Invoke SendMessage, hTV, TVM_HITTEST, 0, Addr tvhi
.IF tvhi.flags == TVHT_ONITEMLABEL
mov bInTV, TRUE
.ENDIF
Invoke SendMessage, hTV, TVM_SELECTITEM, TVGN_CARET, tvhi.hItem
mov eax, tvhi.hItem
.ELSE
mov bInTV, TRUE
mov eax, hItem
.ENDIF
mov hCurrentItem, eax
.IF eax != 0 ;&& tvhi.flags == TVHT_ONITEMLABEL
Invoke TreeViewItemHasChildren, hTV, hCurrentItem
mov bHasChildren, eax
Invoke TreeViewGetItemParam, hTV, hCurrentItem
.IF eax != NULL ; eax = hJSON
mov ebx, eax
mov eax, [ebx].cJSON.itemtype
.IF eax == cJSON_Object || eax == cJSON_Array
mov bObjectOrArray, TRUE
.ENDIF
.ENDIF
.ENDIF
; check node is not root
mov eax, hCurrentItem
.IF eax == hTVRoot && eax != 0
mov bRoot, TRUE
.ENDIF
Invoke MenuMainUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
Invoke MenuRCUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
Invoke MenuSaveEnable, hWin, g_Edit
Invoke MenuSaveAsEnable, hWin, g_Edit
ret
MenusUpdate ENDP
;-------------------------------------------------------------------------------------
; Update main menu
;-------------------------------------------------------------------------------------
MenuMainUpdate PROC hWin:DWORD, bInTV:DWORD, bHasChildren:DWORD, bObjectOrArray:DWORD, bRoot:DWORD
LOCAL hMainMenu:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
Invoke GetMenu, hWin
mov hMainMenu, eax
; Save / SaveAs menu items
.IF g_Edit == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_SAVE, FALSE, Addr mi
;Invoke SetMenuItemInfo, hMainMenu, IDM_FILE_SAVEAS, FALSE, Addr mi
.IF bInTV == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_TEXT, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_VALUE, FALSE, Addr mi
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_ITEM, FALSE, Addr mi
.IF g_hCutCopyNode != NULL && (bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE))
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_ITEM, FALSE, Addr mi
.IF bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE)
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_COPY_BRANCH, FALSE, Addr mi
.IF g_hCutCopyBranchNode != NULL && (bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE))
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_BRANCH, FALSE, Addr mi
; Enabled if clipload has data and format text is available
Invoke IsClipboardFormatAvailable, CF_TEXT
.IF eax == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hMainMenu, IDM_EDIT_PASTE_JSON, FALSE, Addr mi
ret
MenuMainUpdate ENDP
;-------------------------------------------------------------------------------------
; Update options menu
;-------------------------------------------------------------------------------------
MenuOptionsUpdate PROC hWin:DWORD
LOCAL hMainMenu:DWORD
Invoke GetMenu, hWin
mov hMainMenu, eax
.IF g_ExpandAllOnLoad == TRUE
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_EXPANDALL, MF_BYCOMMAND or MF_CHECKED
.ELSE
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_EXPANDALL, MF_BYCOMMAND or MF_UNCHECKED
.ENDIF
.IF g_CaseSensitiveSearch == TRUE
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_CASESEARCH, MF_BYCOMMAND or MF_CHECKED
.ELSE
Invoke CheckMenuItem, hMainMenu, IDM_OPTIONS_CASESEARCH, MF_BYCOMMAND or MF_UNCHECKED
.ENDIF
Invoke DrawMenuBar, hWin
ret
MenuOptionsUpdate ENDP
;-------------------------------------------------------------------------------------
; Update right click menu
;-------------------------------------------------------------------------------------
MenuRCUpdate PROC USES EBX hWin:DWORD, bInTV:DWORD, bHasChildren:DWORD, bObjectOrArray:DWORD, bRoot:DWORD
LOCAL hItem:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
Invoke TreeViewCountItems, hTV
.IF sdword ptr eax > 0
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COLLAPSE_ALL, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EXPAND_ALL, FALSE, Addr mi
; Prevent edit if root and/or an object
.IF bInTV == TRUE
Invoke TreeViewGetSelectedItem, hTV
mov hItem, eax
.IF eax == hTVRoot
mov mi.fState, MFS_GRAYED
.ELSE
.IF bObjectOrArray == TRUE
Invoke TreeViewGetItemParam, hTV, hItem
.IF eax != NULL ; eax = hJSON
mov ebx, eax
mov eax, [ebx].cJSON.itemtype
.IF eax == cJSON_Object
mov mi.fState, MFS_GRAYED
.ENDIF
.ELSE
mov mi.fState, MFS_ENABLED
.ENDIF
.ELSE
mov mi.fState, MFS_ENABLED
.ENDIF
.ENDIF
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EDIT_ITEM, FALSE, Addr mi
.IF bInTV == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_DEL_ITEM, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_PASTE, FALSE, Addr mi
.IF bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE)
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COLLAPSE_BRANCH, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_EXPAND_BRANCH, FALSE, Addr mi
.IF bInTV == TRUE && bObjectOrArray == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM, FALSE, Addr mi
Invoke MenuRCAddUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
Invoke MenuRCCopyUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
Invoke MenuRCPasteUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
Invoke MenuRCExportUpdate, hWin, bInTV, bHasChildren, bObjectOrArray, bRoot
ret
MenuRCUpdate ENDP
;-------------------------------------------------------------------------------------
; Update right click menu 'Add' submenu
;-------------------------------------------------------------------------------------
MenuRCAddUpdate PROC hWin:DWORD, bInTV:DWORD, bHasChildren:DWORD, bObjectOrArray:DWORD, bRoot:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
.IF bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE)
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_STRING, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_NUMBER, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_TRUE, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_FALSE, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_ARRAY, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_ADD_ITEM_OBJECT, FALSE, Addr mi
ret
MenuRCAddUpdate ENDP
;-------------------------------------------------------------------------------------
; Update right click menu 'Copy' submenu
;-------------------------------------------------------------------------------------
MenuRCCopyUpdate PROC hWin:DWORD, bInTV:DWORD, bHasChildren:DWORD, bObjectOrArray:DWORD, bRoot:DWORD
LOCAL mi:MENUITEMINFO
mov mi.cbSize, SIZEOF MENUITEMINFO
mov mi.fMask, MIIM_STATE
.IF bInTV == TRUE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_TEXT, FALSE, Addr mi
.IF bInTV == TRUE && bRoot == FALSE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_VALUE, FALSE, Addr mi
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_ITEM, FALSE, Addr mi
.IF bInTV == TRUE && (bHasChildren == TRUE || bObjectOrArray == TRUE) && bRoot == FALSE
mov mi.fState, MFS_ENABLED
.ELSE
mov mi.fState, MFS_GRAYED
.ENDIF
Invoke SetMenuItemInfo, hTVMenu, IDM_CMD_COPY_BRANCH, FALSE, Addr mi