1
+ # ---------------------------------------------------------------------------------
2
+ # Name: treeview_sample.py
3
+ # Purpose: DelphiVCL for Python sample
4
+ #
5
+ # Author: lmbelo, Priyatham
6
+ #
7
+ # Created: 28/08/2023
8
+ # Copyright: 2020-2023 Embarcadero Technologies, Inc.
9
+ # License: https://github.com/Embarcadero/DelphiVCL4Python/blob/main/LICENSE.md
10
+ # ---------------------------------------------------------------------------------
11
+
12
+ from delphivcl import *
13
+
14
+ class TreeViewSample (Form ):
15
+
16
+
17
+ def __init__ (self , owner ):
18
+ self .tree_view = TreeView (self )
19
+ self .panel = Panel (self )
20
+ self .memo = Memo (self )
21
+
22
+ self .tg_checkboxes = CheckBox (self .panel )
23
+ self .check_styles_groupbox = GroupBox (self .panel )
24
+ self .check_styles_cs_partial = CheckBox (self .check_styles_groupbox )
25
+ self .check_styles_cs_dimmed = CheckBox (self .check_styles_groupbox )
26
+ self .check_styles_cs_excluded = CheckBox (self .check_styles_groupbox )
27
+ self .tg_multi_select = CheckBox (self .panel )
28
+ self .tg_show_buttons = CheckBox (self .panel )
29
+ self .multi_select_groupbox = GroupBox (self .panel )
30
+ self .multi_select_ms_control_select = CheckBox (self .multi_select_groupbox )
31
+ self .multi_select_ms_shift_select = CheckBox (self .multi_select_groupbox )
32
+ self .multi_select_ms_visible_only = CheckBox (self .multi_select_groupbox )
33
+ self .multi_select_ms_sibling_only = CheckBox (self .multi_select_groupbox )
34
+ self .tg_show_lines = CheckBox (self .panel )
35
+ self .tg_tv_visibility = CheckBox (self .panel )
36
+
37
+ self .config ()
38
+
39
+ root_node = self .tree_view .Items .Add (None , "TreeView" )
40
+ root_node_child1 = self .tree_view .Items .AddChild (root_node , "Lucas" )
41
+ root_node_child2 = self .tree_view .Items .AddChild (root_node , "Priyatham" )
42
+ root_node .Expand (True )
43
+
44
+
45
+ def log_event (self , log ):
46
+ self .memo .lines .Add ("Event: " + log )
47
+
48
+
49
+ def config (self ):
50
+ self .SetProps (
51
+ Width = 850 ,
52
+ Height = 700
53
+ )
54
+
55
+ self .tree_view .SetProps (
56
+ Parent = self ,
57
+ Width = 605 ,
58
+ Height = 520 ,
59
+ Align = "alClient" ,
60
+ # CheckBoxes = True,
61
+ #events
62
+ OnAddition = self .do_addition ,
63
+ OnAdvancedCustomDraw = self .do_advanced_custom_draw ,
64
+ OnAdvancedCustomDrawItem = self .do_advanced_custom_draw_item ,
65
+ OnCancelEdit = self .do_cancel_edit ,
66
+ OnChange = self .do_change ,
67
+ OnChanging = self .do_changing ,
68
+ OnCheckStateChanged = self .do_check_state_changed ,
69
+ OnCheckStateChanging = self .do_check_state_changing ,
70
+ OnClick = self .do_click ,
71
+ OnCollapsed = self .do_collapsed ,
72
+ OnCollapsing = self .do_collapsing ,
73
+ OnCompare = self .do_compare ,
74
+ OnContextPopup = self .do_context_popup ,
75
+ OnCreateNodeClass = self .do_create_node_class ,
76
+ OnCustomDraw = self .do_custom_draw ,
77
+ OnCustomDrawItem = self .do_custom_draw_item ,
78
+ OnEdited = self .do_edited ,
79
+ OnEditing = self .do_editing ,
80
+ OnExpanding = self .do_expanding ,
81
+ OnExpanded = self .do_expanded ,
82
+ OnHint = self .do_hint
83
+ )
84
+
85
+ self .panel .SetProps (
86
+ Parent = self ,
87
+ Width = 240 ,
88
+ Height = 520 ,
89
+ Align = "alRight"
90
+ )
91
+
92
+ self .memo .SetProps (
93
+ Parent = self ,
94
+ Width = 850 ,
95
+ Height = 140 ,
96
+ Align = "alBottom"
97
+ )
98
+
99
+ self .tg_checkboxes .SetProps (
100
+ Parent = self .panel ,
101
+ Caption = "Toggle checkboxes" ,
102
+ Left = 14 ,
103
+ Top = 48 ,
104
+ Width = 230 ,
105
+ OnClick = self .do_tg_checkboxes_click
106
+ )
107
+
108
+ self .check_styles_groupbox .SetProps (
109
+ Parent = self .panel ,
110
+ Caption = "CheckStyles" ,
111
+ Left = 6 ,
112
+ Top = 98 ,
113
+ Height = 90 ,
114
+ Width = 180
115
+ )
116
+
117
+ self .check_styles_cs_partial .SetProps (
118
+ Parent = self .check_styles_groupbox ,
119
+ Caption = "csPartial" ,
120
+ Align = "alTop" ,
121
+ AlignWithMargins = True ,
122
+ OnClick = self .do_check_styles_change
123
+ )
124
+
125
+ self .check_styles_cs_dimmed .SetProps (
126
+ Parent = self .check_styles_groupbox ,
127
+ Caption = "csDimmed" ,
128
+ Align = "alTop" ,
129
+ AlignWithMargins = True ,
130
+ OnClick = self .do_check_styles_change
131
+ )
132
+
133
+ self .check_styles_cs_excluded .SetProps (
134
+ Parent = self .check_styles_groupbox ,
135
+ Caption = "csExclusion" ,
136
+ Align = "alTop" ,
137
+ AlignWithMargins = True ,
138
+ OnClick = self .do_check_styles_change
139
+ )
140
+
141
+ self .tg_multi_select .SetProps (
142
+ Parent = self .panel ,
143
+ Caption = "Toggle MultiSelect" ,
144
+ Top = 208 ,
145
+ Left = 14 ,
146
+ Width = 160 ,
147
+ OnClick = self .do_tg_multi_select_click
148
+ )
149
+
150
+ self .tg_show_buttons .SetProps (
151
+ Parent = self .panel ,
152
+ Caption = "Toggle Show Buttons" ,
153
+ Left = 14 ,
154
+ Top = 240 ,
155
+ Width = 170 ,
156
+ OnClick = self .do_tg_show_buttons_click
157
+ )
158
+
159
+ self .multi_select_groupbox .SetProps (
160
+ Parent = self .panel ,
161
+ Caption = "MultiSelectStyle" ,
162
+ Left = 6 ,
163
+ Top = 288 ,
164
+ Width = 180 ,
165
+ Height = 124
166
+ )
167
+
168
+ self .multi_select_ms_control_select .SetProps (
169
+ Parent = self .multi_select_groupbox ,
170
+ Caption = "msControlSelect" ,
171
+ Align = "alTop" ,
172
+ AlignWithMargins = True ,
173
+ OnClick = self .do_multi_select_style_change
174
+ )
175
+
176
+ self .multi_select_ms_shift_select .SetProps (
177
+ Parent = self .multi_select_groupbox ,
178
+ Caption = "msShiftSelect" ,
179
+ Align = "alTop" ,
180
+ AlignWithMargins = True ,
181
+ OnClick = self .do_multi_select_style_change
182
+ )
183
+
184
+ self .multi_select_ms_visible_only .SetProps (
185
+ Parent = self .multi_select_groupbox ,
186
+ Caption = "msVisibleOnly" ,
187
+ Align = "alTop" ,
188
+ AlignWithMargins = True ,
189
+ OnClick = self .do_multi_select_style_change
190
+ )
191
+
192
+ self .multi_select_ms_sibling_only .SetProps (
193
+ Parent = self .multi_select_groupbox ,
194
+ Caption = "msSiblingOnly" ,
195
+ Align = "alTop" ,
196
+ AlignWithMargins = True ,
197
+ OnClick = self .do_multi_select_style_change
198
+ )
199
+
200
+ self .tg_show_lines .SetProps (
201
+ Parent = self .panel ,
202
+ Caption = "Toggle Show Lines" ,
203
+ Left = 6 ,
204
+ Top = 425 ,
205
+ Width = 195 ,
206
+ OnClick = self .do_tg_show_lines_click
207
+ )
208
+
209
+ self .tg_tv_visibility .SetProps (
210
+ Parent = self .panel ,
211
+ Caption = "Toggle TreeView Visibility" ,
212
+ Left = 6 ,
213
+ Top = 456 ,
214
+ Width = 195 ,
215
+ OnClick = self .do_tg_tv_visibility_click
216
+ )
217
+
218
+
219
+ def do_tg_checkboxes_click (self , Sender ):
220
+ if not self .tree_view .CheckBoxes :
221
+ self .tree_view .CheckBoxes = True
222
+ else :
223
+ self .tree_view .CheckBoxes = False
224
+
225
+
226
+ def do_check_styles_change (self , Sender ):
227
+ check_styles = self .tree_view .CheckStyles
228
+ if Sender .Caption in self .tree_view .CheckStyles :
229
+ check_styles .remove (Sender .Caption )
230
+ else :
231
+ check_styles .append (Sender .Caption )
232
+ self .tree_view .CheckStyles = check_styles
233
+
234
+
235
+ def do_tg_multi_select_click (self , Sender ):
236
+ if not self .tree_view .MultiSelect :
237
+ self .tree_view .MultiSelect = True
238
+ else :
239
+ self .tree_view .MultiSelect = False
240
+
241
+
242
+ def do_tg_show_buttons_click (self , Sender ):
243
+ if not self .tree_view .ShowButtons :
244
+ self .tree_view .ShowButtons = True
245
+ else :
246
+ self .tree_view .ShowButtons = False
247
+
248
+
249
+ def do_multi_select_style_change (self , Sender ):
250
+ multiselect_style = self .tree_view .MultiSelectStyle
251
+ if Sender .Caption in self .tree_view .MultiSelectStyle :
252
+ multiselect_style .remove (Sender .Caption )
253
+ else :
254
+ multiselect_style .append (Sender .Caption )
255
+ self .tree_view .MultiSelectStyle = multiselect_style
256
+
257
+
258
+ def do_tg_show_lines_click (self , Sender ):
259
+ if not self .tree_view .ShowLines :
260
+ self .tree_view .ShowLines = True
261
+ else :
262
+ self .tree_view .ShowLines = False
263
+
264
+
265
+ def do_tg_tv_visibility_click (self , Sender ):
266
+ if not self .tree_view .Visible :
267
+ self .tree_view .Visible = True
268
+ else :
269
+ self .tree_view .Visible = False
270
+
271
+
272
+ def do_addition (self , Sender , Node ):
273
+ self .log_event ("OnAdittion(Sender, Node))" )
274
+
275
+
276
+ def do_advanced_custom_draw (self , Sender , ARect , Stage , DefaultDraw ):
277
+ self .log_event ("OnAdvancedCustomDraw(Sender, ARect, Stage, var DefaultDraw)" )
278
+
279
+
280
+ def do_advanced_custom_draw_item (self , Sender , Node , State , Stage , PaintImages , DefaultDraw ):
281
+ self .log_event ("OnAdvancedCustomDrawItem(Sender, Node, State, Stage, var PaintImages, var DefaultDraw)" )
282
+
283
+
284
+ def do_cancel_edit (self , Sender , Node ):
285
+ self .log_event ("OnCancelEdit(Sender, Node))" )
286
+
287
+
288
+ def do_change (self , Sender , Node ):
289
+ self .log_event ("OnChange(Sender, Node))" )
290
+
291
+
292
+ def do_changing (self , Sender , Node , AllowChange ):
293
+ self .log_event ("OnChanging(Sender, Node, var AllowChange))" )
294
+
295
+
296
+ def do_check_state_changed (self , Sender , Node , CheckState ):
297
+ self .log_event ("OnCheckStateChanged(Sender, Node, CheckState))" )
298
+
299
+
300
+ def do_check_state_changing (self , Sender , Node , NewCheckState , OldCheckState , AllowChange ):
301
+ self .log_event ("OnCheckStateChanging(Sender, Node, NewCheckState, OldCheckState, var AllowChange))" )
302
+
303
+
304
+ def do_click (self , Sender ):
305
+ self .log_event ("OnClick(Sender)" )
306
+
307
+
308
+ def do_collapsed (self , Sender , Node ):
309
+ self .log_event ("OnCollapsed(Sender, Node)" )
310
+
311
+
312
+ def do_collapsing (self , Sender , Node , AllowCollapse ):
313
+ self .log_event ("OnCollapsing(Sender, Node, var AllowCollapse)" )
314
+
315
+
316
+ def do_compare (self , Sender , Node1 , Node2 , Data , Compare ):
317
+ self .log_event ("OnCompare(Sender, Node1, Node2, Data, Compare)" )
318
+
319
+
320
+ def do_context_popup (self , Sender , MousePos , Handled ):
321
+ self .log_event ("OnContextPopup(Sender, MousePos, var Handled)" )
322
+
323
+
324
+ def do_create_node_class (self , Sender , NodeClass ):
325
+ self .log_event ("OnCreateNodeClass(Sender, var NodeClass)" )
326
+
327
+
328
+ def do_custom_draw (self , Sender , ARect , DefaultDraw ):
329
+ self .log_event ("OnCustomDraw(Sender, ARect, var DefaultDraw)" )
330
+
331
+
332
+ def do_custom_draw_item (self , Sender , Node , State , DefaultDraw ):
333
+ self .log_event ("OnCustomDrawItem(Sender, Node, State, var DefaultDraw)" )
334
+
335
+
336
+ def do_edited (self , Sender , Node , S ):
337
+ self .log_event ("OnEdited(Sender, Node, var S)" )
338
+
339
+
340
+ def do_editing (self , Sender , Node , AllowEdit ):
341
+ self .log_event ("OnEditing(Sender, Node, var AllowEdit)" )
342
+
343
+
344
+ def do_expanding (self , Sender , Node , AllowExpansion ):
345
+ self .log_event ("OnExpanding(Sender, Node, var AllowExpansion)" )
346
+
347
+
348
+ def do_expanded (self , Sender , Node ):
349
+ self .log_event ("OnExpanded(Sender, Node)" )
350
+
351
+
352
+ def do_hint (self , Sender , Node , Hint ):
353
+ self .log_event ("OnHint(Sender, Node, var Hint)" )
354
+
355
+
356
+ def main ():
357
+ Application .Initialize ()
358
+ Application .Title = "TreeView Sample"
359
+ MainForm = TreeViewSample (Application )
360
+ MainForm .Show ()
361
+ FreeConsole ()
362
+ Application .Run ()
363
+ MainForm .Destroy ()
364
+
365
+
366
+ if __name__ == "__main__" :
367
+ main ()
0 commit comments