Skip to content

Commit faa699e

Browse files
committed
TreeView sample
1 parent 82d70e9 commit faa699e

File tree

1 file changed

+367
-0
lines changed

1 file changed

+367
-0
lines changed

samples/TreeView/treeview_sample.py

Lines changed: 367 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,367 @@
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

Comments
 (0)