Project

General

Profile

treeview.p

treeview testing application - Vladimir Tsichevski, 08/31/2021 02:06 PM

Download (21.8 KB)

 
1
SESSION:SYSTEM-ALERT-BOXES = TRUE.
2
/* scope defined pre-processors mapping OXC attributes to FWD versions  */
3
&IF DEFINED(FWD-VERSION) = 0 &THEN /* NOT FWD */
4
  &Scoped-define COMPONENT-HANDLE  COMPONENT-HANDLE
5
  &Scoped-define HIT-TEST    hitTest
6
&ELSE                              /* FWD */
7
  &Scoped-define COMPONENT-HANDLE  HANDLE
8
  &Scoped-define HIT-TEST    hitTestFwd
9
&ENDIF
10

    
11
DEFINE VARIABLE hNode       AS COMPONENT-HANDLE NO-UNDO.
12
DEFINE VARIABLE hNode1      AS COMPONENT-HANDLE NO-UNDO.
13
DEFINE VARIABLE hNode2      AS COMPONENT-HANDLE NO-UNDO.
14
DEFINE VARIABLE hNode3      AS COMPONENT-HANDLE NO-UNDO.
15
DEFINE VARIABLE nodes       AS COMPONENT-HANDLE NO-UNDO.
16

    
17
DEFINE VARIABLE i AS INTEGER.
18
DEFINE VARIABLE j AS INTEGER.
19
DEFINE VARIABLE k AS INTEGER.
20
DEFINE VARIABLE l AS INTEGER.
21

    
22
DEFINE BUTTON bCreateNode        LABEL "Create Selected Node Child".
23
DEFINE BUTTON bCreateNodeByIndex LABEL "Create Node by Index Child".
24

    
25
DEFINE BUTTON bClearAll          LABEL "ClearAll".
26
DEFINE BUTTON bPrintFocused      LABEL "Print focused".
27
DEFINE BUTTON bNodeBold          LABEL "Toggle node bold".
28
DEFINE BUTTON bSetNodeTag        LABEL "Set Node Tag".
29

    
30
/** Change currently focused cell string value */
31
DEFINE BUTTON bNodeText          LABEL "Node Text".
32
DEFINE BUTTON bReloadNodes       LABEL "Reload nodes".
33
DEFINE BUTTON bSetFont           LABEL "Set Font".
34
DEFINE BUTTON bCollapseNodeByIndex LABEL "Collapse Node With Absolute Index".
35
DEFINE BUTTON bEnsureNodeVisible LABEL "Ensure node visible".
36
DEFINE BUTTON bDeleteNode        LABEL "Delete selected node".
37
DEFINE BUTTON bDeleteNodeByIndex LABEL "Delete node by node index".
38
DEFINE BUTTON bDeleteNodeByKey   LABEL "Delete node by node key".
39
DEFINE BUTTON bExpandSubtree     LABEL "Expand subtree".
40
DEFINE BUTTON bCollapseSubtree   LABEL "Collapse subtree".
41

    
42
DEFINE VARIABLE fillIn AS CHARACTER NO-UNDO VIEW-AS FILL-IN.
43

    
44
DEFINE FRAME f
45
   bCreateNode AT COLUMN 1 ROW 16
46
   bCreateNodeByIndex
47
   bClearAll
48
   bPrintFocused
49
   bNodeText
50
   bNodeBold
51
   SKIP
52
   bSetNodeTag
53
   fillIn NO-LABEL
54
   bReloadNodes
55
   bSetFont
56
   bEnsureNodeVisible
57
   bDeleteNode
58
   bDeleteNodeByIndex
59
   SKIP 
60
   bDeleteNodeByKey
61
   bCollapseNodeByIndex
62
   bExpandSubtree
63
   bCollapseSubtree
64
   WITH SIZE 140 BY 40 TITLE "TreeView Demo".
65

    
66
DEFINE VARIABLE TreeView   AS WIDGET-HANDLE NO-UNDO.
67
DEFINE VARIABLE chTreeView AS COMPONENT-HANDLE NO-UNDO.
68

    
69
DEFINE VARIABLE Image       AS WIDGET-HANDLE NO-UNDO.
70
DEFINE VARIABLE chImage     AS COMPONENT-HANDLE NO-UNDO.
71

    
72
DEFINE VARIABLE treeView1    AS COMPONENT-HANDLE NO-UNDO.
73

    
74
CREATE CONTROL-FRAME TreeView ASSIGN
75
   FRAME           = FRAME f:HANDLE
76
   HEIGHT          = 15
77
   WIDTH           = 135
78
   ROW             = 1
79
   COLUMN          = 1
80
   WIDGET-ID       = 2
81
   HIDDEN          = NO
82
   SENSITIVE       = YES.
83

    
84
TreeView:NAME = "TreeView".
85

    
86
CREATE CONTROL-FRAME Image ASSIGN
87
   FRAME           = FRAME f:HANDLE
88
   HEIGHT          = 1
89
   WIDTH           = 1
90
   ROW             = 30 // Make it invisible this way
91
   COLUMN          = 4
92
   WIDGET-ID       = 4
93
   TAB-STOP        = YES
94
   HIDDEN          = YES
95
   SENSITIVE       = NO.
96

    
97
Image:NAME = "Image".
98

    
99
DEFINE VARIABLE OCXFile  AS CHARACTER FORMAT "x(128)" NO-UNDO.
100
OCXFile = SEARCH( "Z:/Projects/test3820/abl/treeview.wrx":U ).
101
//OCXFile = SEARCH( "U:\\treeview.wrx" ).
102
ASSIGN
103
   chTreeView = TreeView:COMPONENT-HANDLE.
104
   chImage    = Image:COM-HANDLE.
105
   
106
chImage:LoadControls(OCXFile, "Image").
107
chTreeView:LoadControls(OCXFile, "TreeView").
108

    
109
&IF DEFINED(FWD-VERSION) &THEN  /* FWD */
110
  ASSIGN
111
    treeView1 = chTreeView:TreeView
112
    //treeView1:FONT:SIZE = MLiniGetFontSize() /* Default font size */
113
    treeView1:ImageList  = chImage:ImageList
114
    .
115
      
116
  treeView1:OLEDragMode = 1.
117
  treeView1:OLEDropMode = 1.
118

    
119
&ELSE /* OE */
120
  
121
  ASSIGN
122
    treeView1                  = chTreeView:Controls:Item(1)
123
    treeView1:Style            = 7. // It is the default value
124
    treeView1:Indentation      = 0. // Default IS 38?
125
    // treeView1:FONT:SIZE     = MLiniGetFontSize() /* Default font size */
126
    // chTreeView:POPUP-MENU = MENU mnPopUp:HANDLE
127
    treeView1:ImageList        = chImage:Controls:Item(1)
128
    .
129
    
130
  // RUN GetDC(INPUT treeView1:HWND, OUTPUT giDevice). 
131
  // RUN GetDeviceCaps(OUTPUT giXpix, giDevice, {&LOGPIXELSX} ).
132
  // RUN GetDeviceCaps(OUTPUT giYpix, giDevice, {&LOGPIXELSY} ).
133
  // RUN ReleaseDC(INPUT treeView1:HWND, INPUT giDevice).
134

    
135
  /* Compute conversion factor pixels to twips
136
   ** Hittest LIKES twips (=1/1440 inch) */
137
  // ASSIGN 
138
  //   gdeXscale = 1440.0 / DECIMAL(giXpix)
139
  //   gdeYscale = 1440.0 / DECIMAL(giYpix).
140
&ENDIF
141

    
142
DEFAULT-WINDOW:WIDTH = 160.
143
DEFAULT-WINDOW:HEIGHT = 30.
144

    
145
ENABLE ALL WITH FRAME f.
146

    
147
DEFINE VARIABLE img1 AS INTEGER.
148
DEFINE VARIABLE img2 AS INTEGER.
149
DEFINE VARIABLE img3 AS INTEGER.
150
DEFINE VARIABLE img4 AS INTEGER.
151
DEFINE VARIABLE img5 AS INTEGER.
152
DEFINE VARIABLE img6 AS INTEGER.
153

    
154
ASSIGN
155
   img1  = 1.
156
   img2  = 2.
157
   img3  = 3.
158
   img4  = 4.
159
   img5  = 5.
160
   img6  = 6.
161

    
162
DEFINE VARIABLE images      AS COMPONENT-HANDLE NO-UNDO.
163
DEFINE VARIABLE listimages  AS COMPONENT-HANDLE NO-UNDO.
164

    
165
ASSIGN
166
&IF DEFINED(FWD-VERSION) &THEN  /* FWD */
167
   images     = chImage:ImageList
168
&ELSE /* OE */
169
   images     = chImage:Controls:Item(1)
170
&ENDIF
171
   listimages = images:ListImages
172
   .
173

    
174
&IF DEFINED(FWD-VERSION) &THEN
175
   listimages:Add(img1, "image1", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-angry.png")).
176
   listimages:Add(img2, "image2", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-cool.png")).
177
   listimages:Add(img3, "image3", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-crying.png")).
178
   listimages:Add(img5, "image4", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-glasses.png")).
179
   listimages:Add(img5, "image5", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-laugh.png")).
180
   listimages:Add(img6, "image6", LOAD-PICTURE("/usr/share/icons/Adwaita/16x16/emotes/face-devilish.png")).
181
&ELSE
182
   listimages:Add(img1, "image1", LOAD-PICTURE("C:\\images\\face-angry.bmp")).
183
   listimages:Add(img2, "image2", LOAD-PICTURE("C:\\images\\face-cool.bmp")).
184
   listimages:Add(img3, "image3", LOAD-PICTURE("C:\\images\\face-crying.bmp")).
185
   listimages:Add(img5, "image4", LOAD-PICTURE("C:\\images\\face-glasses.bmp")).
186
   listimages:Add(img5, "image5", LOAD-PICTURE("C:\\images\\face-laugh.bmp")).
187
   listimages:Add(img6, "image6", LOAD-PICTURE("C:\\images\\face-devilish.bmp")).
188
&ENDIF
189

    
190
ASSIGN nodes = treeView1:Nodes.
191

    
192
PROCEDURE reloadNodes .
193
   &IF DEFINED(FWD-VERSION) &THEN
194
      treeView1:BuildingTree = TRUE.
195
   &ENDIF
196

    
197
   nodes:CLEAR.
198
   
199
   DEFINE VARIABLE hRoot  AS COMPONENT-HANDLE NO-UNDO.
200

    
201
   hRoot  = nodes:Add(?, 4, "Root", "Root", img1, img2).
202
   
203
   DO i = 1 TO 5:
204
      DEFINE VARIABLE key AS CHARACTER FORMAT "x(128)" NO-UNDO.
205
      key = ENTRY(i, "quick,brown,fox,jumps,over").
206
      hNode = nodes:Add(hRoot:Index, 4, key, "Node " + key, img1, img2).
207

    
208
      DO j = 1 TO 5:
209
         DEFINE VARIABLE key2 AS CHARACTER FORMAT "x(128)" NO-UNDO.
210
         key2     = key + "." + ENTRY(j, "six,little,boys,playing,with,hive").
211
         hNode2 = nodes:Add(hNode:Index, 4, key2, "Node " + key2, img2, img3).
212

    
213
         DO k = 1 TO 5:
214
            DEFINE VARIABLE key3 AS CHARACTER FORMAT "x(128)" NO-UNDO.
215
            key3 = key2 + "." + ENTRY(k, "moe,and,dogged,him,catch").
216
            hNode3 = nodes:Add(hNode2:Index, 4, key3, "Node " + key3, img3, img4).
217
            
218
            DO l = 1 TO 5:
219
               DEFINE VARIABLE key4 AS CHARACTER FORMAT "x(128)" NO-UNDO.
220
               key4 = key3 + "." + ENTRY(l, "tiger,squeals,snout,knee,if").
221
               nodes:Add(hNode3:Index, 4, key4, "Node " + key4, img5, img6).
222
            END.
223
         END.
224
      END.
225
   END.
226
   &IF DEFINED(FWD-VERSION) &THEN
227
      treeView1:BuildingTree = FALSE.
228
   &ENDIF
229
END PROCEDURE.
230

    
231
RUN reloadNodes.
232

    
233
PROCEDURE TreeView.TreeView.OnActivate .
234
   MESSAGE "OnActivate".
235
END PROCEDURE.
236

    
237
PROCEDURE TreeView.TreeView.OnChangeNode .
238
   DEFINE INPUT PARAMETER p-FromNodeKey AS CHARACTER FORMAT "x(128)" NO-UNDO.
239
   DEFINE INPUT PARAMETER p-FromNodePtr AS INTEGER NO-UNDO.
240
   DEFINE INPUT PARAMETER p-ToNodeKey   AS CHARACTER FORMAT "x(128)" NO-UNDO.
241
   DEFINE INPUT PARAMETER p-ToNodePtr   AS INTEGER NO-UNDO.
242

    
243
   MESSAGE "OnChangeNode" p-FromNodeKey p-FromNodePtr p-ToNodeKey p-ToNodePtr.
244
END PROCEDURE.
245

    
246
PROCEDURE TreeView.TreeView.OnClick .
247
  MESSAGE "OnClick".
248
END PROCEDURE.
249

    
250
PROCEDURE TreeView.TreeView.OnDblClick .
251
  MESSAGE "OnDblClick".
252
END PROCEDURE.
253

    
254
PROCEDURE TreeView.TreeView.OnCreate .
255
   MESSAGE "OnCreate".
256
END PROCEDURE.
257

    
258
PROCEDURE TreeView.TreeView.OnDeactivate .
259
   MESSAGE "OnDeactivate".
260
END PROCEDURE.
261

    
262
PROCEDURE TreeView.TreeView.OnDestroy .
263
   MESSAGE "OnDestroy".
264
END PROCEDURE.
265

    
266
PROCEDURE TreeView.TreeView.OnKeyPress .
267
   DEFINE INPUT PARAMETER p-Key AS INTEGER NO-UNDO.
268
   MESSAGE "OnKeyPress" p-Key.
269
END PROCEDURE.
270

    
271
PROCEDURE TreeView.TreeView.OnDragDrop .
272
   MESSAGE "OnDragDrop".
273
END PROCEDURE.
274

    
275
PROCEDURE TreeView.TreeView.OnDragOver .
276
   MESSAGE "OnDragOver".
277
END PROCEDURE.
278

    
279
PROCEDURE TreeView.TreeView.OnEndDrag .
280
   MESSAGE "OnEndDrag".
281
END PROCEDURE.
282

    
283
PROCEDURE TreeView.TreeView.OnEnter .
284
   MESSAGE "OnEnter".
285
END PROCEDURE.
286

    
287
PROCEDURE TreeView.TreeView.OnExit .
288
   MESSAGE "OnExit".
289
END PROCEDURE.
290

    
291
PROCEDURE TreeView.TreeView.OnExpanding .
292
   DEFINE INPUT PARAMETER p-NodePtr AS INTEGER NO-UNDO.
293
   DEFINE INPUT PARAMETER p-NodeKey AS CHARACTER FORMAT "x(128)" NO-UNDO.
294
   DEFINE INPUT-OUTPUT PARAMETER Allowed AS LOGICAL NO-UNDO.
295

    
296
   MESSAGE "OnExpanding" p-NodePtr p-NodeKey Allowed.
297
   Allowed = TRUE.
298
END PROCEDURE.
299

    
300
PROCEDURE TreeView.TreeView.OnCollapsing .
301
   DEFINE INPUT PARAMETER p-NodePtr AS INTEGER NO-UNDO.
302
   DEFINE INPUT PARAMETER p-NodeKey AS CHARACTER FORMAT "x(128)" NO-UNDO.
303
   DEFINE INPUT-OUTPUT PARAMETER Allowed AS LOGICAL NO-UNDO.
304

    
305
   MESSAGE "OnCollapsing" p-NodePtr p-NodeKey Allowed.
306
   Allowed = TRUE.
307
END PROCEDURE.
308

    
309
PROCEDURE TreeView.TreeView.OnKeyUp .
310
   DEFINE INPUT PARAMETER key AS INTEGER NO-UNDO.
311
   DEFINE INPUT PARAMETER p-ShiftState AS INTEGER NO-UNDO.
312

    
313
   MESSAGE "OnKeyUp" key p-ShiftState.
314
END PROCEDURE.
315

    
316
PROCEDURE menuAction .
317
   MESSAGE "Hello, world!" VIEW-AS ALERT-BOX.
318
END PROCEDURE.
319

    
320
DEFINE VARIABLE ghMenu            AS HANDLE    NO-UNDO.
321

    
322
&IF DEFINED(FWD-VERSION) eq 0 &THEN
323
PROCEDURE SendMessageA EXTERNAL "user32" :
324
  DEFINE INPUT  PARAMETER hwnd        AS LONG.
325
  DEFINE INPUT  PARAMETER umsg        AS LONG.
326
  DEFINE INPUT  PARAMETER wparam      AS LONG.
327
  DEFINE INPUT  PARAMETER lparam      AS LONG.
328
  DEFINE RETURN PARAMETER ReturnValue AS LONG.
329
END PROCEDURE.
330
&ENDIF
331

    
332
/**
333
 * Create popup menu.
334
 */
335
DEFINE VARIABLE hMenuItem          AS HANDLE NO-UNDO.
336

    
337
CREATE MENU ghMenu
338
   ASSIGN POPUP-ONLY = TRUE.
339

    
340
CREATE MENU-ITEM hMenuItem
341
   ASSIGN PARENT = ghMenu
342
          LABEL  = 'Expand subtree'
343
          SENSITIVE = TRUE
344
          TRIGGERS:
345
            ON CHOOSE
346
               PERSISTENT RUN expandSubtree IN THIS-PROCEDURE.
347
          END TRIGGERS.
348

    
349
CREATE MENU-ITEM hMenuItem
350
   ASSIGN PARENT = ghMenu
351
          LABEL  = 'Collapse subtree'
352
          SENSITIVE = TRUE
353
          TRIGGERS:
354
            ON CHOOSE
355
               PERSISTENT RUN collapseSubtree IN THIS-PROCEDURE.
356
          END TRIGGERS.
357

    
358
CREATE MENU-ITEM hMenuItem
359
   ASSIGN PARENT = ghMenu
360
          LABEL  = 'Delete subtree'
361
          SENSITIVE = TRUE
362
          TRIGGERS:
363
            ON CHOOSE
364
               PERSISTENT RUN deleteSubtree IN THIS-PROCEDURE.
365
          END TRIGGERS.
366

    
367
CREATE MENU-ITEM hMenuItem
368
   ASSIGN PARENT = ghMenu
369
          LABEL  = 'Remove node'
370
          SENSITIVE = TRUE
371
          TRIGGERS:
372
            ON CHOOSE
373
               PERSISTENT RUN deleteNode IN THIS-PROCEDURE.
374
          END TRIGGERS.
375

    
376
PROCEDURE TreeView.TreeView.OnMouseRightUp .
377
   DEFINE INPUT PARAMETER p-ShiftState AS INTEGER NO-UNDO.
378
   DEFINE INPUT PARAMETER p-X          AS INTEGER NO-UNDO.
379
   DEFINE INPUT PARAMETER p-Y          AS INTEGER NO-UNDO.
380
   MESSAGE "OnMouseRightUp" p-ShiftState p-X p-Y.
381

    
382
&IF DEFINED(FWD-VERSION) eq 0 &THEN
383
  DEFINE VARIABLE iretval AS INTEGER NO-UNDO.
384
  RUN SendMessageA (INPUT FRAME f:HWND,
385
                    INPUT 516,
386
                    INPUT 2,
387
                    INPUT 0,
388
                    OUTPUT iretval).
389
  RUN SendMessageA (INPUT FRAME f:HWND,
390
                    INPUT 517,
391
                    INPUT 0,
392
                    INPUT 0,
393
                    OUTPUT iretval).
394
&ELSE
395
   ASSIGN FRAME f:POPUP-MENU = ghMenu.
396
   f:OPEN-POPUP().
397
   ASSIGN FRAME f:POPUP-MENU = ?.
398
&ENDIF
399
END PROCEDURE.
400

    
401
PROCEDURE TreeView.TreeView.OnPaint .
402
   MESSAGE "OnPaint".
403
END PROCEDURE.
404

    
405
PROCEDURE TreeView.TreeView.OnStartDrag .
406
   MESSAGE "OnStartDrag".
407
END PROCEDURE.
408

    
409
PROCEDURE TreeView.TreeView.OnChangeNodeDirect .
410
   DEFINE INPUT PARAMETER p-FromNodeKey AS CHARACTER NO-UNDO.
411
   DEFINE INPUT PARAMETER p-FromNodePtr AS INTEGER NO-UNDO.
412
   DEFINE INPUT PARAMETER p-ToNodeKey   AS CHARACTER NO-UNDO.
413
   DEFINE INPUT PARAMETER p-ToNodePtr   AS INTEGER NO-UNDO.
414
   MESSAGE "OnChangeNodeDirect" p-FromNodeKey p-FromNodePtr p-ToNodeKey p-ToNodePtr.
415
END PROCEDURE.
416

    
417
PROCEDURE TreeView.TreeView.OnChangeTopVisibleNode .
418
   DEFINE INPUT PARAMETER p-PreviousId      AS CHARACTER NO-UNDO.
419
   DEFINE INPUT PARAMETER p-CurrentId       AS CHARACTER NO-UNDO.
420
   DEFINE INPUT PARAMETER p-ScrollNodeCount AS INTEGER NO-UNDO.
421
   MESSAGE "OnChangeTopVisibleNode" p-PreviousId p-CurrentId p-ScrollNodeCount.
422
END PROCEDURE.
423
                                    
424
PROCEDURE TreeView.TreeView.OnCollapsed .
425
   DEFINE INPUT PARAMETER p-NodePtr AS INTEGER NO-UNDO.
426
   DEFINE INPUT PARAMETER p-nodeId  AS CHARACTER NO-UNDO.
427
   MESSAGE "OnCollapsed" p-NodePtr p-nodeId.
428
END PROCEDURE.
429

    
430
PROCEDURE TreeView.TreeView.OnExpanded .
431
   DEFINE INPUT PARAMETER p-Key AS CHARACTER NO-UNDO.
432
   MESSAGE "OnExpanded" p-Key.
433
END PROCEDURE.
434

    
435
PROCEDURE TreeView.TreeView.OnKeyDown .
436
   DEFINE INPUT PARAMETER p-key        AS INTEGER NO-UNDO.
437
   DEFINE INPUT PARAMETER p-ShiftState AS INTEGER NO-UNDO.
438
   MESSAGE "OnKeyDown" p-key p-ShiftState.
439
END PROCEDURE.
440

    
441
PROCEDURE TreeView.TreeView.OnMouseLeftDown .
442
   DEFINE INPUT PARAMETER p-ShiftState AS INTEGER NO-UNDO.
443
   DEFINE INPUT PARAMETER p-X          AS INTEGER NO-UNDO.
444
   DEFINE INPUT PARAMETER p-Y          AS INTEGER NO-UNDO.
445
   MESSAGE "OnMouseLeftDown" p-ShiftState p-X p-Y.
446
END PROCEDURE.
447

    
448
PROCEDURE TreeView.TreeView.OnMouseLeftUp .
449
   DEFINE INPUT PARAMETER p-ShiftState AS INTEGER NO-UNDO.
450
   DEFINE INPUT PARAMETER p-X          AS INTEGER NO-UNDO.
451
   DEFINE INPUT PARAMETER p-Y          AS INTEGER NO-UNDO.
452
   MESSAGE "OnMouseLeftUp" p-ShiftState p-X p-Y.
453
END PROCEDURE.
454

    
455
PROCEDURE TreeView.TreeView.OnTreeDragDrop .
456
   DEFINE INPUT PARAMETER p-DraggedNodeId    AS CHARACTER NO-UNDO.
457
   DEFINE INPUT PARAMETER p-NodeIdAtMousePos AS CHARACTER NO-UNDO.
458
   MESSAGE "OnTreeDragDrop" p-DraggedNodeId p-NodeIdAtMousePos.
459
END PROCEDURE.
460

    
461
PROCEDURE TreeView.TreeView.OnTreeDragOver .
462
   DEFINE INPUT        PARAMETER p-DraggedNodeId    AS CHARACTER NO-UNDO.
463
   DEFINE INPUT        PARAMETER p-NodeIdAtMousePos AS CHARACTER NO-UNDO.
464
   DEFINE INPUT-OUTPUT PARAMETER p-Accept           AS LOGICAL NO-UNDO.
465
   MESSAGE "OnTreeDragOver" p-DraggedNodeId p-NodeIdAtMousePos p-Accept.
466
END PROCEDURE.
467

    
468
PROCEDURE TreeView.TreeView.OnTreeDragStart .
469
   DEFINE INPUT PARAMETER p-DraggedNodeId AS CHARACTER NO-UNDO.
470
   MESSAGE "OnTreeDragStart" p-DraggedNodeId.
471
END PROCEDURE.
472

    
473

    
474
ON CHOOSE OF bCreateNode DO:
475
   DEFINE VARIABLE nodeText AS CHARACTER FORMAT "x(128)" NO-UNDO.
476
   hNode = treeView1:SelectedItem.
477
   IF hNode = 0 THEN RETURN.
478
   MESSAGE "Enter node label/key" SET nodeText.
479
   IF nodeText = ? THEN RETURN.
480
   IF LENGTH(TRIM(nodeText)) = 0 THEN RETURN.
481
   nodes:Add(hNode:Index, 4, nodeText, nodeText, img2, img2).
482
END.
483

    
484
ON CHOOSE OF bCreateNodeByIndex DO:
485
   DEFINE VARIABLE nodeText AS CHARACTER FORMAT "x(128)" NO-UNDO.
486
   DEFINE VARIABLE parentIndex AS INTEGER NO-UNDO.
487

    
488
   MESSAGE "Parent Node Index or blank to create a root node" SET parentIndex.
489
   IF parentIndex = 0 THEN parentIndex = ?.
490
   MESSAGE "Enter node label/key" SET nodeText.
491
   IF nodeText = ? THEN RETURN.
492
   IF LENGTH(TRIM(nodeText)) = 0 THEN RETURN.
493
   nodes:Add(parentIndex, 4, nodeText, nodeText, img2, img2).
494
END.
495

    
496
/** If a node is selected, remove it */
497
PROCEDURE deleteNode .
498
   hNode = treeView1:SelectedItem.
499
   IF hNode = 0 THEN RETURN.
500
   nodes:Remove(hNode:INDEX).
501
END.
502

    
503
ON CHOOSE OF bClearAll DO:
504
   nodes:Clear.
505
END.
506

    
507
ON CHOOSE OF bPrintFocused DO:
508
   hNode = treeView1:SelectedItem.
509
   IF hNode = 0 THEN RETURN.
510
   MESSAGE "Node:" hNode
511
      SKIP "FullPath:" hNode:FullPath
512
      SKIP "Tag:" hNode:Tag
513
      SKIP "Text:" hNode:Text
514
      SKIP "Checked:" hNode:Checked
515
      SKIP "Child:" hNode:Child
516
      SKIP "FirstSibling:" hNode:FirstSibling
517
      SKIP "Children:" hNode:Children
518
      SKIP "Index:" hNode:Index
519
      SKIP "LastSibling:" hNode:LastSibling
520
      SKIP "Next:" hNode:Next
521
      SKIP "Parent:" hNode:Parent
522
      SKIP "Previous:" hNode:Previous
523
      SKIP "Root:" hNode:Root
524
      SKIP "ExpandedImage:" hNode:ExpandedImage
525
      SKIP "Image:" hNode:Image
526
      SKIP "SelectedImage:" hNode:SelectedImage
527
      VIEW-AS ALERT-BOX INFORMATION.
528
END.
529

    
530
ON CHOOSE OF bSetNodeTag DO:
531
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
532
   theNode = treeView1:SelectedItem.
533
   IF theNode <> ? THEN
534
   DO:
535
      DEFINE VARIABLE tag AS CHARACTER FORMAT "x(128)" NO-UNDO.
536
      tag = theNode:Tag.
537
      MESSAGE "New Tag:" UPDATE tag.
538
      theNode:Tag = tag.
539
      MESSAGE "New tag" theNode:Tag.
540
   END.
541
END.
542

    
543
ON CHOOSE OF bNodeText DO:
544
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
545
   theNode = treeView1:SelectedItem.
546
   IF theNode <> ? THEN
547
   DO:
548
      DEFINE VARIABLE nodeText AS CHARACTER FORMAT "x(128)" NO-UNDO.
549
      MESSAGE "String Value:" SET nodeText.
550
      theNode:Text = nodeText.
551
  END.
552
END.
553

    
554
ON CHOOSE OF bNodeBold DO:
555
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
556
   theNode = treeView1:SelectedItem.
557
   IF theNode <> ? THEN
558
   DO:
559
      DEFINE VARIABLE nodeBold AS LOGICAL NO-UNDO.
560
      nodeBold = theNode:Bold.
561
      MESSAGE "Node bold" nodeBold.
562
      theNode:Bold = NOT nodeBold.
563
   END.
564
END.
565

    
566
PROCEDURE deleteSubtree.
567
   // TODO: the TreeView does NOT support anything like DeleteChildNodes
568
   // IF treeView1:SelectedItem <> 0 THEN DO:
569
   //    treeView1:DeleteChildNodes(treeView1:SelectedItem).
570
   // END.
571
END.
572

    
573
ON CHOOSE OF bReloadNodes DO:
574
   RUN reloadNodes.
575
END.
576

    
577
/* TODO This currently does not work: need to know how to create Windows-compatible font in 4gl */
578
ON CHOOSE OF bSetFont DO:
579
   DEFINE VARIABLE fontName AS CHARACTER FORMAT "x(128)" NO-UNDO.
580
   fontName = treeView1:Font.
581
   MESSAGE "Font:" UPDATE fontName.
582
   treeView1:Font = fontName.
583
END.
584

    
585
ON CHOOSE OF bCollapseNodeByIndex DO:
586
   DEFINE VARIABLE nodeIndex AS INTEGER NO-UNDO FORMAT ">>>>>>>>>>9".
587
   MESSAGE "Node Index" SET nodeIndex.
588
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
589
   theNode = nodes:Item(nodeIndex).
590
   theNode:Expanded = FALSE.
591
   // FIXME: the following is converted incorrectly
592
   //   nodes:Item(nodeIndex):Expanded = FALSE.
593
END.
594

    
595
ON CHOOSE OF bEnsureNodeVisible DO:
596
   DEFINE VARIABLE nodeIndex AS INTEGER NO-UNDO.
597

    
598
   MESSAGE "Node Index" SET nodeIndex.
599
   IF nodeIndex = 0 THEN RETURN.
600
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
601
   theNode = nodes:Item(nodeIndex).
602
   theNode:EnsureVisible.
603
   // FIXME: the following is converted incorrectly
604
   // nodes:Item(nodeIndex):EnsureVisible.
605
END.
606

    
607
ON CHOOSE OF bDeleteNode DO:
608
   RUN deleteNode.
609
END.
610

    
611
ON CHOOSE OF bDeleteNodeByIndex DO:
612
   DEFINE VARIABLE nodeIndex AS INTEGER NO-UNDO FORMAT ">>>>>>>>>>9".
613
   MESSAGE "Node ID" SET nodeIndex.
614
   nodes:Remove(nodeIndex).
615
END.
616

    
617
ON CHOOSE OF bDeleteNodeByKey DO:
618
   DEFINE VARIABLE nodeKey AS CHARACTER FORMAT "x(128)" NO-UNDO.
619
   MESSAGE "Node Key" SET nodeKey.
620
   nodes:Remove(nodeKey).
621
END.
622

    
623
ON CHOOSE OF bExpandSubtree DO:
624
  RUN expandSubtree.
625
END.
626

    
627
ON CHOOSE OF bCollapseSubtree DO:
628
  RUN collapseSubtree.
629
END.
630

    
631
PROCEDURE expandSubtree.
632
  RUN expandNodeRecursively (treeView1:SelectedItem).
633
END PROCEDURE.
634

    
635
PROCEDURE expandNodeRecursively.
636
   DEFINE INPUT PARAMETER nodeIndex AS INTEGER NO-UNDO.
637
   IF nodeIndex = 0 THEN
638
      RETURN.
639

    
640
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
641
   theNode = nodes:Item(nodeIndex).
642
   theNode:Expanded = TRUE.
643
   // FIXME: the following is converted incorrectly
644
   // nodes:Item(nodeIndex):Expanded = FALSE.
645
   
646
   DEFINE VARIABLE childPtr AS INTEGER NO-UNDO.
647
   DEFINE VARIABLE childKey AS CHARACTER NO-UNDO.
648
   treeView1:GetFirstChildNode(nodeIndex, OUTPUT childPtr, OUTPUT childKey).
649
 
650
   DO WHILE childPtr <> 0:
651
     RUN expandNodeRecursively(childPtr).
652
     treeView1:GetNextSiblingNode(childPtr, OUTPUT childPtr, OUTPUT childKey).
653
   END.
654
END PROCEDURE.
655

    
656
PROCEDURE collapseSubtree.
657
  RUN collapseNodeRecursively (treeView1:SelectedItem).
658
END PROCEDURE.
659

    
660
PROCEDURE collapseNodeRecursively.
661
   DEFINE INPUT PARAMETER nodeIndex AS INTEGER NO-UNDO.
662
   IF nodeIndex = 0 THEN
663
     RETURN.
664
   DEFINE VARIABLE theNode AS COMPONENT-HANDLE NO-UNDO.
665
   theNode = nodes:Item(nodeIndex).
666
   theNode:Expanded = FALSE.
667
   // FIXME: the following is converted incorrectly
668
   // nodes:Item(nodeIndex):Expanded = FALSE.
669
  
670
  DEFINE VARIABLE childPtr AS INTEGER NO-UNDO.
671
  DEFINE VARIABLE childKey AS CHARACTER NO-UNDO.
672
  treeView1:GetFirstChildNode(nodeIndex, OUTPUT childPtr, OUTPUT childKey).
673

    
674
  DO WHILE childPtr <> 0:
675
    RUN collapseNodeRecursively(childPtr).
676
    treeView1:GetNextSiblingNode(childPtr, OUTPUT childPtr, OUTPUT childKey).
677
  END.
678
END PROCEDURE.
679

    
680
WAIT-FOR CLOSE OF THIS-PROCEDURE.