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