1import unittest
2import sys
3from unittests import wtc
4import wx
5
6import wx.lib.agw.customtreectrl as CT
7
8#---------------------------------------------------------------------------
9
10class lib_agw_customtreectrl_Tests(wtc.WidgetTestCase):
11
12    def test_lib_agw_customtreectrlCtor(self):
13        tree = CT.CustomTreeCtrl(self.frame)
14        self.assertEqual(tree.GetAGWWindowStyleFlag(), CT.TR_DEFAULT_STYLE)
15        self.assertEqual(tree.GetCount(), 0)
16        self.assertEqual(tree.GetRootItem(), None)
17
18    def test_lib_agw_customtreectrlTreeItem(self):
19        tree = CT.CustomTreeCtrl(self.frame)
20        root = tree.AddRoot('root item')
21        self.assertTrue(isinstance(root, CT.GenericTreeItem))
22        self.assertTrue(root.IsOk())
23
24        r = tree.GetRootItem()
25        self.assertTrue(r is root)
26        self.assertTrue(r == root)
27
28        child = tree.AppendItem(root, 'child item')
29        self.assertTrue(child is not root)
30        self.assertTrue(child != root)
31
32    def test_lib_agw_customtreectrlTreeItemData(self):
33        value = 'Some Python Object'
34        tree = CT.CustomTreeCtrl(self.frame)
35        root = tree.AddRoot('root item', data=value)
36        v = tree.GetItemData(root)
37        self.assertTrue(v == value)
38        tree.SetItemData(root, None)
39        self.assertTrue(tree.GetItemData(root) is None)
40
41    def test_lib_agw_customtreectrlTreeItemPyData(self):
42        # ensure that the "Py" versions works as the normal one
43        value = 'Some Python Object'
44        tree = CT.CustomTreeCtrl(self.frame)
45        root = tree.AddRoot('root item')
46        tree.SetItemPyData(root, value)
47
48        v = tree.GetItemPyData(root)
49        self.assertTrue(v == value)
50        tree.SetItemPyData(root, None)
51        self.assertTrue(tree.GetItemPyData(root) is None)
52
53    def test_lib_agw_customtreectrlGetSelections(self):
54        tree = CT.CustomTreeCtrl(self.frame, agwStyle=CT.TR_MULTIPLE)
55        root = tree.AddRoot('root item')
56        c1 = tree.AppendItem(root, 'c1')
57        c2 = tree.AppendItem(root, 'c2')
58        tree.SelectItem(c1)
59        tree.SelectItem(c2)
60        self.assertTrue(tree.IsSelected(c1))
61        self.assertTrue(tree.IsSelected(c2))
62
63        sel = tree.GetSelections()
64        self.assertTrue(isinstance(sel, list))
65        self.assertTrue(len(sel) == 2)
66        self.assertTrue(isinstance(sel[0], CT.GenericTreeItem))
67
68    def test_lib_agw_customtreectrlItemCheck(self):
69
70        tree = CT.CustomTreeCtrl(self.frame)
71        root = tree.AddRoot('root item')
72
73        # Checkboxes, there can be more than one checked at the same level
74        c1 = tree.AppendItem(root, 'c1', ct_type=1)
75        c2 = tree.AppendItem(root, 'c2', ct_type=1)
76
77        tree.CheckItem(c1)
78        tree.CheckItem(c2)
79
80        self.assertTrue(tree.IsItemChecked(c1))
81        self.assertTrue(tree.IsItemChecked(c2))
82
83        # RadioButtons, there can NOT be more than one checked at the same level
84        c1 = tree.AppendItem(root, 'c1', ct_type=2)
85        c2 = tree.AppendItem(root, 'c2', ct_type=2)
86
87        tree.CheckItem(c1)
88        tree.CheckItem(c2)
89
90        self.assertTrue(not tree.IsItemChecked(c1))
91        self.assertTrue(tree.IsItemChecked(c2))
92
93    def test_lib_agw_customtreectrlSetWindow(self):
94        tree = CT.CustomTreeCtrl(self.frame, agwStyle=CT.TR_DEFAULT_STYLE|CT.TR_HAS_VARIABLE_ROW_HEIGHT)
95        root = tree.AddRoot('root item')
96        c1 = tree.AppendItem(root, 'c1')
97        c2 = tree.AppendItem(root, 'c2')
98
99        window = wx.TextCtrl(tree, -1, 'Hello World')
100        tree.SetItemWindow(c2, window)
101
102        other = tree.GetItemWindow(c2)
103        self.assertTrue(window == other)
104
105        tree.DeleteAllItems()
106        self.assertTrue(tree.GetCount() == 0)
107        if sys.platform == 'darwin':
108            # On Mac the scrollbars and the gripper between them on
109            # ScrolledWindows are also wx widgets, so they are in the
110            # children list.
111            self.assertEqual(len(tree.GetChildren()), 3)
112        else:
113            self.assertEqual(len(tree.GetChildren()), 0)
114
115    def test_lib_agw_customtreectrlConstantsExist(self):
116        CT.TR_NO_BUTTONS
117        CT.TR_SINGLE
118        CT.TR_HAS_BUTTONS
119        CT.TR_NO_LINES
120        CT.TR_LINES_AT_ROOT
121        CT.TR_DEFAULT_STYLE
122        CT.TR_TWIST_BUTTONS
123        CT.TR_MULTIPLE
124        CT.TR_EXTENDED
125        CT.TR_HAS_VARIABLE_ROW_HEIGHT
126        CT.TR_EDIT_LABELS
127        CT.TR_ROW_LINES
128        CT.TR_HIDE_ROOT
129        CT.TR_FULL_ROW_HIGHLIGHT
130        CT.TR_AUTO_CHECK_CHILD
131        CT.TR_AUTO_TOGGLE_CHILD
132        CT.TR_AUTO_CHECK_PARENT
133        CT.TR_ALIGN_WINDOWS
134        CT.TR_ALIGN_WINDOWS_RIGHT
135        CT.TR_ELLIPSIZE_LONG_ITEMS
136        CT.TR_TOOLTIP_ON_LONG_ITEMS
137
138        CT.TreeItemIcon_Normal
139        CT.TreeItemIcon_Selected
140        CT.TreeItemIcon_Expanded
141        CT.TreeItemIcon_SelectedExpanded
142
143        CT.TreeItemIcon_Checked
144        CT.TreeItemIcon_NotChecked
145        CT.TreeItemIcon_Undetermined
146        CT.TreeItemIcon_Flagged
147        CT.TreeItemIcon_NotFlagged
148
149        CT.TREE_HITTEST_ABOVE
150        CT.TREE_HITTEST_BELOW
151        CT.TREE_HITTEST_NOWHERE
152        CT.TREE_HITTEST_ONITEMBUTTON
153        CT.TREE_HITTEST_ONITEMICON
154        CT.TREE_HITTEST_ONITEMINDENT
155        CT.TREE_HITTEST_ONITEMLABEL
156        CT.TREE_HITTEST_ONITEM
157        CT.TREE_HITTEST_ONITEMRIGHT
158        CT.TREE_HITTEST_TOLEFT
159        CT.TREE_HITTEST_TORIGHT
160        CT.TREE_HITTEST_ONITEMUPPERPART
161        CT.TREE_HITTEST_ONITEMLOWERPART
162        CT.TREE_HITTEST_ONITEMCHECKICON
163        CT.TREE_HITTEST_ONITEM
164
165    def test_lib_agw_customtreectrlEventsExist(self):
166        CT.wxEVT_TREE_BEGIN_DRAG
167        CT.wxEVT_TREE_BEGIN_RDRAG
168        CT.wxEVT_TREE_BEGIN_LABEL_EDIT
169        CT.wxEVT_TREE_END_LABEL_EDIT
170        CT.wxEVT_TREE_DELETE_ITEM
171        CT.wxEVT_TREE_GET_INFO
172        CT.wxEVT_TREE_SET_INFO
173        CT.wxEVT_TREE_ITEM_EXPANDED
174        CT.wxEVT_TREE_ITEM_EXPANDING
175        CT.wxEVT_TREE_ITEM_COLLAPSED
176        CT.wxEVT_TREE_ITEM_COLLAPSING
177        CT.wxEVT_TREE_SEL_CHANGED
178        CT.wxEVT_TREE_SEL_CHANGING
179        CT.wxEVT_TREE_KEY_DOWN
180        CT.wxEVT_TREE_ITEM_ACTIVATED
181        CT.wxEVT_TREE_ITEM_RIGHT_CLICK
182        CT.wxEVT_TREE_ITEM_MIDDLE_CLICK
183        CT.wxEVT_TREE_END_DRAG
184        CT.wxEVT_TREE_STATE_IMAGE_CLICK
185        CT.wxEVT_TREE_ITEM_GETTOOLTIP
186        CT.wxEVT_TREE_ITEM_MENU
187        CT.wxEVT_TREE_ITEM_CHECKING
188        CT.wxEVT_TREE_ITEM_CHECKED
189        CT.wxEVT_TREE_ITEM_HYPERLINK
190
191        CT.EVT_TREE_BEGIN_DRAG
192        CT.EVT_TREE_BEGIN_LABEL_EDIT
193        CT.EVT_TREE_BEGIN_RDRAG
194        CT.EVT_TREE_DELETE_ITEM
195        CT.EVT_TREE_END_DRAG
196        CT.EVT_TREE_END_LABEL_EDIT
197        CT.EVT_TREE_GET_INFO
198        CT.EVT_TREE_ITEM_ACTIVATED
199        CT.EVT_TREE_ITEM_CHECKED
200        CT.EVT_TREE_ITEM_CHECKING
201        CT.EVT_TREE_ITEM_COLLAPSED
202        CT.EVT_TREE_ITEM_COLLAPSING
203        CT.EVT_TREE_ITEM_EXPANDED
204        CT.EVT_TREE_ITEM_EXPANDING
205        CT.EVT_TREE_ITEM_GETTOOLTIP
206        CT.EVT_TREE_ITEM_HYPERLINK
207        CT.EVT_TREE_ITEM_MENU
208        CT.EVT_TREE_ITEM_MIDDLE_CLICK
209        CT.EVT_TREE_ITEM_RIGHT_CLICK
210        CT.EVT_TREE_KEY_DOWN
211        CT.EVT_TREE_SEL_CHANGED
212        CT.EVT_TREE_SEL_CHANGING
213        CT.EVT_TREE_SET_INFO
214        CT.EVT_TREE_STATE_IMAGE_CLICK
215
216#---------------------------------------------------------------------------
217
218if __name__ == '__main__':
219    unittest.main()
220