author | Radek Brich <radek.brich@devl.cz> |
Wed, 20 Aug 2014 15:06:52 +0200 | |
changeset 102 | 29a8a26a721f |
parent 77 | fc1989059e19 |
permissions | -rw-r--r-- |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
1 |
# -*- coding: utf-8 -*- |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
2 |
|
43
369c8ef5070a
Rename emitter module to events.
Radek Brich <radek.brich@devl.cz>
parents:
41
diff
changeset
|
3 |
from tuikit.events import Event, Emitter |
18
e6c3a5ee91aa
Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents:
11
diff
changeset
|
4 |
from tuikit.widget import Widget |
e6c3a5ee91aa
Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents:
11
diff
changeset
|
5 |
|
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
6 |
|
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
7 |
class TreeEvent(Event): |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
8 |
def __init__(self, node): |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
9 |
Event.__init__(self) |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
10 |
self.node = node |
34
e3beacd5e536
Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents:
33
diff
changeset
|
11 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
12 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
13 |
class TreeIter: |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
14 |
"""Iterates nodes under root in depth-first order. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
15 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
16 |
This is useful for displaying the tree. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
17 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
18 |
""" |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
19 |
|
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
20 |
def __init__(self, root, collapsed_nodes=[]): |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
21 |
self._node = root |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
22 |
self._index = 0 |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
23 |
self._stack = [] |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
24 |
self._collapsed_nodes = collapsed_nodes |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
25 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
26 |
def __next__(self): |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
27 |
node = None |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
28 |
while node is None: |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
29 |
try: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
30 |
if self._node in self._collapsed_nodes: |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
31 |
raise IndexError() |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
32 |
node = self._node.children[self._index] |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
33 |
if node is None: |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
34 |
raise Exception('Bad node: None') |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
35 |
except IndexError: |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
36 |
if len(self._stack): |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
37 |
self._node, self._index = self._stack.pop() |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
38 |
else: |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
39 |
raise StopIteration |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
40 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
41 |
level = len(self._stack) + 1 |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
42 |
index = self._index + 1 |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
43 |
count = len(self._node.children) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
44 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
45 |
self._index += 1 |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
46 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
47 |
self._stack.append((self._node, self._index)) |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
48 |
self._node = node |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
49 |
self._index = 0 |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
50 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
51 |
return (level, index, count, node) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
52 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
53 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
54 |
class TreeNode: |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
55 |
"""Node of tree. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
56 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
57 |
Maintains its parent and children. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
58 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
59 |
Attributes: |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
60 |
* name - used for searching |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
61 |
* title - this is displayed on screen |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
62 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
63 |
""" |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
64 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
65 |
def __init__(self, name, title=None, parent=None, model=None): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
66 |
self.model = model |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
67 |
self.children = [] |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
68 |
self.parent = parent |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
69 |
self.name = name |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
70 |
self.title = title or name |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
71 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
72 |
def __iter__(self): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
73 |
return iter(self.children) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
74 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
75 |
def __str__(self): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
76 |
return self.title |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
77 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
78 |
def __repr__(self): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
79 |
return 'TreeNode(%r)' % self.name |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
80 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
81 |
@property |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
82 |
def path(self): |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
83 |
"""Path of this node in model.""" |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
84 |
if self.parent: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
85 |
return self.parent.path + '/' + self.name |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
86 |
else: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
87 |
return self.name |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
88 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
89 |
def add(self, node): |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
90 |
"""Add child and connect it to self.""" |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
91 |
node.parent = self |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
92 |
node.model = self.model |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
93 |
self.children.append(node) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
94 |
self.model.emit('node_added', node) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
95 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
96 |
|
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
97 |
class TreeModel(Emitter): |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
98 |
"""Tree data model. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
99 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
100 |
Tree model stores all nodes of tree but knows nothing about displaying them. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
101 |
Same model can be used in many views. |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
102 |
|
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
103 |
""" |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
104 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
105 |
def __init__(self): |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
106 |
self.add_events('node_added', TreeEvent) |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
107 |
self.root = TreeNode('', model=self) |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
108 |
|
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
109 |
def __iter__(self): |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
110 |
return TreeIter(self.root) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
111 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
112 |
def find(self, path): |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
113 |
"""Find node by path. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
114 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
115 |
Supports two variants of path: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
116 |
'/name1/name2/name3' |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
117 |
[0,2,1] |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
118 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
119 |
Numeric variant uses index of node on each level. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
120 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
121 |
Raises ValueError for unknown component in str variant, |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
122 |
IndexError for bad index in numeric variant. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
123 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
124 |
""" |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
125 |
if isinstance(path, str): |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
126 |
path = path.split('/') |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
127 |
# strip empty strings from both ends |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
128 |
while path and path[0] == '': |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
129 |
del path[0] |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
130 |
while path and path[-1] == '': |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
131 |
del path[-1] |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
132 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
133 |
node = self.root |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
134 |
for component in path: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
135 |
if isinstance(component, int): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
136 |
node = node.children[component] |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
137 |
else: |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
138 |
found = False |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
139 |
for subnode in node: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
140 |
if subnode.name == component: |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
141 |
node = subnode |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
142 |
found = True |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
143 |
break |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
144 |
if not found: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
145 |
raise ValueError('Node not found at component %r of path %r' % (component, path)) |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
146 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
147 |
return node |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
148 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
149 |
def add(self, path, nodes): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
150 |
"""Add node(s) to model at path. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
151 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
152 |
There are four variants for nodes parameter: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
153 |
add('/', 'name') |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
154 |
add('/', TreeNode('name')) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
155 |
add('/', ['name1', 'name2']) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
156 |
add('/', [TreeNode('name1'), TreeNode('name2')]) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
157 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
158 |
First two will add one node to root, next two adds two nodes. |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
159 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
160 |
First and third variant uses strings. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
161 |
It does exactly the same as second and fourth variant. |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
162 |
|
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
163 |
""" |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
164 |
parent_node = self.find(path) |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
165 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
166 |
if isinstance(nodes, str) or isinstance(nodes, TreeNode): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
167 |
nodes = [nodes] |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
168 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
169 |
for node in nodes: |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
170 |
if isinstance(node, str): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
171 |
node = TreeNode(node) |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
172 |
parent_node.add(node) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
173 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
174 |
|
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
175 |
class TreeView(Widget): |
38
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
176 |
"""Tree view displays data from tree model.""" |
c6e170452c7f
Documentation, fix names of focus methods.
Radek Brich <radek.brich@devl.cz>
parents:
37
diff
changeset
|
177 |
|
62
2f61931520c9
Rework layouts: Layout is now normal Container which places its children upon resize event.
Radek Brich <radek.brich@devl.cz>
parents:
45
diff
changeset
|
178 |
def __init__(self, model=None): |
2f61931520c9
Rework layouts: Layout is now normal Container which places its children upon resize event.
Radek Brich <radek.brich@devl.cz>
parents:
45
diff
changeset
|
179 |
Widget.__init__(self) |
2f61931520c9
Rework layouts: Layout is now normal Container which places its children upon resize event.
Radek Brich <radek.brich@devl.cz>
parents:
45
diff
changeset
|
180 |
self._default_size.update(20, 20) |
2f61931520c9
Rework layouts: Layout is now normal Container which places its children upon resize event.
Radek Brich <radek.brich@devl.cz>
parents:
45
diff
changeset
|
181 |
|
34
e3beacd5e536
Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents:
33
diff
changeset
|
182 |
self.allow_focus = True |
e3beacd5e536
Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents:
33
diff
changeset
|
183 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
184 |
# model |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
185 |
self._model = None |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
186 |
|
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
187 |
# cursor |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
188 |
self._cursor_node = None |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
189 |
|
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
190 |
self.collapsed_nodes = [] |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
191 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
192 |
self.add_events( |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
193 |
'expand', TreeEvent, # node expanded, event carries the affected node |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
194 |
'collapse', TreeEvent) # node collapsed, event carries the affected node |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
195 |
|
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
196 |
if model: |
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
197 |
self.model = model |
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
198 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
199 |
def __iter__(self): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
200 |
return TreeIter(self._model.root, self.collapsed_nodes) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
201 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
202 |
@property |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
203 |
def model(self): |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
204 |
"""TreeModel in use by this TreeView.""" |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
205 |
return self._model |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
206 |
|
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
207 |
@model.setter |
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
208 |
def model(self, value): |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
209 |
if self._model: |
45
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
210 |
self._model.remove_handler('node_added', self.on_model_node_added) |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
211 |
self._model = value |
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
212 |
if self._model: |
45
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
213 |
self._model.add_handler('node_added', self.on_model_node_added) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
214 |
try: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
215 |
self.cursor_node = self._model.root.children[0] |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
216 |
except IndexError: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
217 |
pass |
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
218 |
self._update_sizereq() |
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
219 |
|
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
220 |
def on_model_node_added(self, ev): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
221 |
if self.cursor_node is None: |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
222 |
self.cursor_node = ev.node |
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
223 |
self._update_sizereq() |
30
05500124d7fb
Add setup script. Add Checkbox widget + demo. Updates.
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
224 |
self.redraw() |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
225 |
|
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
226 |
@property |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
227 |
def cursor_node(self): |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
228 |
return self._cursor_node |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
229 |
|
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
230 |
@cursor_node.setter |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
231 |
def cursor_node(self, value): |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
232 |
self._cursor_node = value |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
233 |
self._update_spot() |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
234 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
235 |
def collapse(self, path, collapse=True): |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
236 |
node = self._model.find(path) |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
237 |
self.collapse_node(node, collapse) |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
238 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
239 |
def collapse_node(self, node, collapse=True): |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
240 |
if collapse: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
241 |
if not node in self.collapsed_nodes and len(node.children) > 0: |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
242 |
self.collapsed_nodes.append(node) |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
243 |
self.emit('collapse', node) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
244 |
else: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
245 |
try: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
246 |
self.collapsed_nodes.remove(node) |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
247 |
self.emit('expand', node) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
248 |
except ValueError: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
249 |
pass |
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
250 |
self._update_sizereq() |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
251 |
|
45
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
252 |
def on_draw(self, ev): |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
253 |
ev.driver.pushcolor('normal') |
77
fc1989059e19
Propagate "quit" event, do not just terminate application. Resize: flag widgets to be resized, do resizes only once before draw. Draw: flag widgets to be redrawn, do not draw everything on any event.
Radek Brich <radek.brich@devl.cz>
parents:
74
diff
changeset
|
254 |
ev.driver.fill_clip() |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
255 |
|
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
256 |
lines = 0 # bit array, bit 0 - draw vertical line on first column, etc. |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
257 |
y = ev.y |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
258 |
for level, index, count, node in self: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
259 |
# prepare string with vertical lines where they should be |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
260 |
head = [] |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
261 |
for l in range(level-1): |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
262 |
if lines & (1 << l): |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
263 |
head.append(ev.driver.unigraph.VLINE + ' ') |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
264 |
else: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
265 |
head.append(' ') |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
266 |
# add vertical line if needed |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
267 |
if index < count: |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
268 |
head.append(ev.driver.unigraph.LTEE) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
269 |
lines |= 1 << level-1 |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
270 |
else: |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
271 |
head.append(ev.driver.unigraph.LLCORNER) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
272 |
lines &= ~(1 << level-1) |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
273 |
# draw lines and titles |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
274 |
head = ''.join(head) |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
275 |
if node in self.collapsed_nodes: |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
276 |
sep = '+' |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
277 |
else: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
278 |
sep = ' ' |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
279 |
ev.driver.puts(ev.x, y, head + sep + str(node)) |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
280 |
if node is self.cursor_node: |
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
281 |
ev.driver.pushcolor('active') |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
282 |
ev.driver.puts(ev.x + len(head), y, sep + str(node) + ' ') |
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
283 |
ev.driver.popcolor() |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
284 |
y += 1 |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
285 |
|
41
37b7dfc3eae6
Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents:
40
diff
changeset
|
286 |
ev.driver.popcolor() |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
287 |
|
45
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
288 |
def on_keypress(self, ev): |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
289 |
key_map = { |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
290 |
'up': self.move_up, |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
291 |
'down': self.move_down, |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
292 |
'left': self.move_left, |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
293 |
'right': self.move_right} |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
294 |
if ev.keyname in key_map: |
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
295 |
key_map[ev.keyname]() |
77
fc1989059e19
Propagate "quit" event, do not just terminate application. Resize: flag widgets to be resized, do resizes only once before draw. Draw: flag widgets to be redrawn, do not draw everything on any event.
Radek Brich <radek.brich@devl.cz>
parents:
74
diff
changeset
|
296 |
self.redraw() |
45
43b2279b06e1
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).
Radek Brich <radek.brich@devl.cz>
parents:
44
diff
changeset
|
297 |
return True |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
298 |
|
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
299 |
def prev_node(self, node): |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
300 |
# previous sibling |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
301 |
parent = node.parent |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
302 |
i = parent.children.index(node) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
303 |
if i > 0: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
304 |
node = parent.children[i-1] |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
305 |
while node not in self.collapsed_nodes and len(node.children) > 0: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
306 |
node = node.children[-1] |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
307 |
return node |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
308 |
else: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
309 |
if parent.parent is None: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
310 |
return None |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
311 |
return parent |
9
7175ed629a76
Added ComboBox, HorizontalLayout, TreeNode, TreeModel, TreeView. Widget is now descendant of EventSource. Improved color management (color prefixes).
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
312 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
313 |
def next_node(self, node): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
314 |
if node in self.collapsed_nodes or len(node.children) == 0: |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
315 |
# next sibling |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
316 |
parent = node.parent |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
317 |
while parent is not None: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
318 |
i = parent.children.index(node) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
319 |
try: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
320 |
return parent.children[i+1] |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
321 |
except IndexError: |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
322 |
node = parent |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
323 |
parent = node.parent |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
324 |
return None |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
325 |
else: |
37
54dd866b8951
Clean up and update TreeView.
Radek Brich <radek.brich@devl.cz>
parents:
34
diff
changeset
|
326 |
return node.children[0] |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
327 |
|
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
328 |
def move_up(self): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
329 |
prev = self.prev_node(self.cursor_node) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
330 |
if prev is not None: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
331 |
self.cursor_node = prev |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
332 |
return True |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
333 |
return False |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
334 |
|
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
335 |
def move_down(self): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
336 |
node = self.next_node(self.cursor_node) |
24
b248ef500557
Add DriverPygame (incomplete). Move unicode graphics constants to UnicodeGraphics class. Move shared parts of drivers to Driver base class.
Radek Brich <radek.brich@devl.cz>
parents:
18
diff
changeset
|
337 |
if node is not None: |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
338 |
self.cursor_node = node |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
339 |
return True |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
340 |
return False |
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
341 |
|
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
342 |
def move_left(self): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
343 |
self.collapse_node(self.cursor_node, True) |
32
088b92ffb119
Clean up, refactoring. Rename EventSource to Emitter, begin merging emit() method with handle().
Radek Brich <radek.brich@devl.cz>
parents:
30
diff
changeset
|
344 |
|
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
345 |
def move_right(self): |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
346 |
self.collapse_node(self.cursor_node, False) |
11
762513aacc87
TreeView: Add cursor, node collapse, reworked draw.
Radek Brich <radek.brich@devl.cz>
parents:
9
diff
changeset
|
347 |
|
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
348 |
def _update_sizereq(self): |
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
349 |
height = 0 |
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
350 |
for num, _ in enumerate(self, start=1): |
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
351 |
height = num |
102
29a8a26a721f
Update TreeView (old uncommitted work).
Radek Brich <radek.brich@devl.cz>
parents:
77
diff
changeset
|
352 |
self.sizereq.update(h = height) |
40
5faa38c10b67
Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents:
38
diff
changeset
|
353 |
|
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
354 |
def _update_spot(self): |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
355 |
"""Update spot to current position of cursor node.""" |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
356 |
for num, (_level, _index, _count, node) in enumerate(self): |
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
357 |
if node is self.cursor_node: |
102
29a8a26a721f
Update TreeView (old uncommitted work).
Radek Brich <radek.brich@devl.cz>
parents:
77
diff
changeset
|
358 |
self._spot.update(_level * 2, num) |
44
d77f1ae3786c
Add Widget.spot property. TreeView: move spot with cursor node. ScrollView: scroll when spot moves.
Radek Brich <radek.brich@devl.cz>
parents:
43
diff
changeset
|
359 |