Mercurial > MadButterfly
annotate pyink/domview.py @ 1532:4a92b639a1cd
Clear selection set when switching current scene.
To clear selection set after switching away from current to another scene.
It avoids Inkscape select on nodes they are not saw after switching.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 30 Sep 2011 12:31:33 +0800 |
parents | 9e7e5f79acc6 |
children |
rev | line source |
---|---|
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1 import random |
1253
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
2 import dom_event |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
3 from tween import TweenObject |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
4 from trait import trait, require, composite |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
5 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
6 |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
7 ## \brief Compare two nodes with ID. |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
8 # |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
9 # \return True if node1 ID equivalent to ndoe2 ID. |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
10 # |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
11 def _id_eq(node1, node2): |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
12 try: |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
13 node1_id = node1.getAttribute('id') |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
14 except: |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
15 return False |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
16 |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
17 try: |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
18 node2_id = node2.getAttribute('id') |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
19 except: |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
20 return False |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
21 return node1_id == node2_id |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
22 |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
23 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
24 class Layer: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
25 def __init__(self, node): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
26 self.scenes = [] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
27 self.group = node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
28 pass |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
29 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
30 def get_name(self): |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
31 layer_name = self.group.getAttribute('inkscape:label') |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
32 return layer_name |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
33 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
34 def set_name(self, layer_name): |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
35 self.group.setAttribute('inkscape:label', layer_name) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
36 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
37 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
38 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
39 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
40 class Timeline(object): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
41 def __init__(self, scenes_node): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
42 self.scenes_node = scenes_node |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
43 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
44 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
45 def name(self): |
1407 | 46 try: |
47 name = self.scenes_node.getAttribute('name') | |
48 except: | |
49 name='default' | |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
50 return name |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
51 |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
52 def rename(self, new_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
53 scenes_node = self.scenes_node |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
54 scenes_node.setAttribute('name', new_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
55 pass |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
56 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
57 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
58 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
59 class Transition(object): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
60 node = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
61 condition = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
62 target = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
63 action = None |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
64 path = None |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
65 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
66 def __init__(self, node=None): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
67 self.node = node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
68 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
69 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
70 def set_condition(self, cond): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
71 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
72 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
73 node.setAttribute('condition', cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
74 self.condition = cond |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
75 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
76 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
77 def set_action(self, action): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
78 self.action = action |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
79 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
80 node.setAttribute('action', action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
81 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
82 |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
83 def set_path(self, path): |
1470 | 84 self.path = path |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
85 node = self.node |
1470 | 86 path_txt = ' '.join([str(c) for c in path]) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
87 node.setAttribute('path', path_txt) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
88 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
89 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
90 def reparse(self): |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
91 node = self.node |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
92 condition = node.getAttribute('condition') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
93 target = node.getAttribute('target') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
94 try: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
95 action = node.getAttribute('action') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
96 except: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
97 action = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
98 pass |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
99 try: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
100 path = node.getAttribute('path').strip().split() |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
101 path = [float(c) for c in path] |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
102 except: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
103 path = None |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
104 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
105 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
106 self.condition = condition |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
107 self.target = target |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
108 self.action = action |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
109 self.path = path |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
110 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
111 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
112 def update_node(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
113 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
114 node.setAttribute('condition', self.condition) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
115 node.setAttribute('target', self.target) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
116 if self.action: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
117 node.setAttribute('action', self.action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
118 pass |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
119 if self.path: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
120 node.setAttribute('path', self.path) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
121 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
122 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
123 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
124 ## \brief Create a node according status of the object. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
125 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
126 # A new node is created for the object, and attributes of the node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
127 # is initialized with information from the object. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
128 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
129 def create_node(self, doc): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
130 node = doc.createElement('ns0:transition') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
131 self.node = node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
132 self.update_node() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
133 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
134 return node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
135 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
136 @staticmethod |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
137 def parse_transition(node): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
138 trn = Transition(node) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
139 trn.reparse() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
140 return trn |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
141 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
142 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
143 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
144 ## \brief A state in a FSM |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
145 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
146 # Every component can have a FSM to describe its behavior. Every |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
147 # state has an entry action and transitions to other states. Every |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
148 # transition can have a transition action. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
149 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
150 # The FSM of a component is defined as a child of ns0:component node. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
151 # \verbatim |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
152 # <ns0:component> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
153 # <ns0:states start_state="UP"> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
154 # <ns0:state name="UP" entry_action="entry action"> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
155 # <ns0:transition target="DOWN" |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
156 # condition="button_down" action="..."/> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
157 # </ns0:state> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
158 # </ns0:states> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
159 # </ns0:/component> |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
160 # \endverbatim |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
161 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
162 class State(object): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
163 name = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
164 entry_action = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
165 transitions = None |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
166 r = None |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
167 x = 0 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
168 y = 0 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
169 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
170 def __init__(self, node=None): |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
171 self.node = node |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
172 self.transitions = {} |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
173 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
174 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
175 def rename(self, name): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
176 self.name = name |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
177 self.node.setAttribute('name', name) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
178 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
179 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
180 def set_entry_action(self, action): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
181 self.entry_action = action |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
182 self.node.setAttribute('entry_action', action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
183 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
184 |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
185 def set_r(self, r): |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
186 self.r = r |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
187 self.node.setAttribute('r', str(r)) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
188 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
189 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
190 def set_xy(self, x, y): |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
191 self.x = x |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
192 self.y = y |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
193 self.node.setAttribute('x', str(x)) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
194 self.node.setAttribute('y', str(y)) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
195 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
196 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
197 def reparse(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
198 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
199 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
200 name = node.getAttribute('name') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
201 try: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
202 entry_action = node.getAttribute('entry_action') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
203 except: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
204 entry_action = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
205 pass |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
206 try: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
207 r = float(node.getAttribute('r')) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
208 except: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
209 r = None |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
210 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
211 try: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
212 x = float(node.getAttribute('x')) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
213 except: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
214 x = 0 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
215 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
216 try: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
217 y = float(node.getAttribute('y')) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
218 except: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
219 y = 0 |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
220 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
221 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
222 all_transitions = [Transition.parse_transition(child) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
223 for child in node.childList() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
224 if child.name() == 'ns0:transition'] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
225 transitions = dict([(trn.condition, trn) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
226 for trn in all_transitions]) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
227 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
228 self.name = name |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
229 self.transitions = transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
230 self.entry_action = entry_action |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
231 self.r = r |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
232 self.x = x |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
233 self.y = y |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
234 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
235 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
236 def update_node(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
237 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
238 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
239 node.setAttribute('name', self.name) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
240 if self.entry_action: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
241 node.setAttribute('entry_action', self.entry_action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
242 pass |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
243 if self.r: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
244 node.setAttribute('r', self.r) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
245 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
246 if self.x: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
247 node.setAttribute('x', self.x) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
248 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
249 if self.y: |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
250 node.setAttribute('y', self.y) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
251 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
252 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
253 transitions = self.transitions |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
254 for trn in transitions: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
255 trn.update_node() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
256 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
257 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
258 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
259 def create_node(self, doc): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
260 node = doc.createElement('ns0:state') |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
261 self.node = node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
262 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
263 self.update_node() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
264 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
265 return node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
266 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
267 @staticmethod |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
268 def parse_state(node): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
269 state = State(node) |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
270 state.reparse() |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
271 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
272 return state |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
273 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
274 def change_transition_cond(self, old_cond, new_cond): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
275 transitions = self.transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
276 trn = transitions[old_cond] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
277 del transitions[old_cond] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
278 transitions[new_cond] = trn |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
279 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
280 trn.set_condition(new_cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
281 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
282 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
283 def add_transition(self, cond, target): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
284 transitions = self.transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
285 assert cond not in transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
286 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
287 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
288 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
289 trn = Transition() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
290 trn.condition = cond |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
291 trn.target = target |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
292 trn_node = trn.create_node(node.document()) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
293 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
294 node.appendChild(trn_node) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
295 transitions[cond] = trn |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
296 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
297 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
298 def rm_transition(self, cond): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
299 transitions = self.transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
300 if cond not in transitions: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
301 raise ValueError, \ |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
302 'There is no transition defined for this condition (%s)' % \ |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
303 (cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
304 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
305 trn = transitions[cond] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
306 trn_node = trn.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
307 node = self.node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
308 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
309 node.removeChild(trn_node) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
310 del transitions[cond] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
311 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
312 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
313 def all_transitions(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
314 return self.transitions.keys() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
315 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
316 def get_transition(self, cond): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
317 transitions = self.transitions |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
318 transition = transitions[cond] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
319 return transition |
1501
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
320 |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
321 def chg_transition_cond(self, cond, new_cond): |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
322 transitions = self.transitions |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
323 |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
324 trn = transitions[cond] |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
325 trn.set_condition(new_cond) |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
326 |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
327 del transitions[cond] |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
328 transitions[new_cond] = trn |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
329 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
330 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
331 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
332 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
333 class Component(object): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
334 # |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
335 # \param comp_node is None for main component. |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
336 # |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
337 def __init__(self, comp_mgr, comp_node): |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
338 self._comp_mgr = comp_mgr |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
339 self.node = comp_node |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
340 self.layers = [] |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
341 self.timelines = [] |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
342 self.fsm_states = {} |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
343 self.fsm_states_node = None |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
344 self.fsm_start_state = None |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
345 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
346 if comp_node: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
347 self._initialize_comp() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
348 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
349 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
350 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
351 def _initialize_comp(self): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
352 comp_node = self.node |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
353 for child in comp_node.childList(): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
354 if child.name() == 'ns0:scenes': |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
355 break |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
356 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
357 else: # no any ns0:scenes |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
358 doc = self._comp_mgr._doc |
1310
85d04ba11146
Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents:
1308
diff
changeset
|
359 scenes_node = doc.createElement('ns0:scenes') |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
360 scenes_node.setAttribute('name', 'default') |
1310
85d04ba11146
Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents:
1308
diff
changeset
|
361 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
362 node_id = self._comp_mgr.new_id() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
363 scenes_node.setAttribute('id', node_id) |
1310
85d04ba11146
Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents:
1308
diff
changeset
|
364 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
365 comp_node.appendChild(scenes_node) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
366 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
367 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
368 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
369 def _get_comp_node(self): |
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
370 return self.node or self._comp_mgr._metadata_node |
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
371 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
372 def name(self): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
373 if self.node: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
374 name = self.node.getAttribute('name') |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
375 else: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
376 name = 'main' |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
377 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
378 return name |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
379 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
380 def all_timeline_names(self): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
381 names = [tl.name() for tl in self.timelines] |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
382 return names |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
383 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
384 def parse_timelines(self): |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
385 self.timelines[:] = [] |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
386 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
387 if self.node: # main component has None value for self.node |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
388 assert self.node.name() == 'ns0:component' |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
389 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
390 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
391 comp_node = self._get_comp_node() |
1310
85d04ba11146
Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents:
1308
diff
changeset
|
392 for child in comp_node.childList(): |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
393 if child.name() == 'ns0:scenes': |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
394 tl = Timeline(child) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
395 self.timelines.append(tl) |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
396 print ' ' + tl.name() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
397 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
398 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
399 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
400 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
401 ## \brief Parse FSM from a ns0:states node. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
402 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
403 def parse_states(self): |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
404 comp_node = self._get_comp_node() |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
405 assert (not comp_node) or comp_node.name() in ('ns0:component', |
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
406 'svg:metadata') |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
407 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
408 states_nodes = [node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
409 for node in comp_node.childList() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
410 if node.name() == 'ns0:states'] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
411 if not states_nodes: |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
412 self.fsm_states = {} |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
413 return |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
414 states_node = states_nodes[0] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
415 |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
416 try: |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
417 self.fsm_start_state = states_node.getAttribute('start_state') |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
418 except: |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
419 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
420 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
421 state_nodes = [child |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
422 for child in states_node.childList() |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
423 if child.name() == 'ns0:state'] |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
424 states = [State.parse_state(state_node) for state_node in state_nodes] |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
425 self.fsm_states = dict([(state.name, state) for state in states]) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
426 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
427 self.fsm_states_node = states_node |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
428 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
429 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
430 def get_timeline(self, name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
431 for tl in self.timelines: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
432 if tl.name() == name: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
433 return tl |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
434 pass |
1525 | 435 raise ValueError, 'invalid timeline name - %s' % (name) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
436 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
437 def has_timeline(self, name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
438 for tl in self.timelines: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
439 if tl.name() == name: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
440 return True |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
441 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
442 return False |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
443 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
444 def add_timeline(self, name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
445 if self.has_timeline(name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
446 raise ValueError, \ |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
447 'try add a timeline with duplicated name - %s' % (name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
448 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
449 doc = self._comp_mgr._doc |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
450 comp_node = self._get_comp_node() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
451 |
1310
85d04ba11146
Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents:
1308
diff
changeset
|
452 scenes_node = doc.createElement('ns0:scenes') |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
453 scenes_node.setAttribute('name', name) |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
454 node_id = self._comp_mgr.new_id() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
455 scenes_node.setAttribute('id', node_id) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
456 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
457 comp_node.appendChild(scenes_node) |
1317
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
458 |
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
459 tl = Timeline(scenes_node) |
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
460 self.timelines.append(tl) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
461 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
462 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
463 ## \brief Add a timeline for an existed scenes node. |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
464 # |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
465 def add_timeline_scenes(self, scenes_node): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
466 tl = Timeline(scenes_node) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
467 name = tl.name() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
468 if self.has_timeline(name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
469 raise ValueError, \ |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
470 'name of scenes node of a timeline is duplicated' |
1317
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
471 |
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
472 self.timeline.append(tl) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
473 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
474 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
475 def rm_timeline(self, name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
476 for i, tl in enumerate(self.timelines): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
477 if tl.name() == name: |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
478 comp_node = self._get_comp_node() |
1317
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
479 comp_node.removeChild(tl.scenes_node) |
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
480 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
481 del self.timelines[i] |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
482 return |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
483 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
484 raise ValueError, 'try to remove a non-existed timeline - %s' % (name) |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
485 |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
486 def rename_timeline(self, timeline_name, new_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
487 for i, tl in enumerate(self.timelines): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
488 if tl.name() == timeline_name: |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
489 tl.rename(new_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
490 return |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
491 pass |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
492 raise ValueError, 'try to remove a non-existed timeline - %s' % (name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
493 |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
494 def rename(self, new_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
495 self.node.setAttribute('name', new_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
496 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
497 |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
498 def _create_states_node(self): |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
499 node = self._get_comp_node() |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
500 doc = self._comp_mgr._doc |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
501 |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
502 states_node = doc.createElement('ns0:states') |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
503 node.appendChild(states_node) |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
504 self.fsm_states_node = states_node |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
505 pass |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
506 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
507 def get_start_state_name(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
508 return self.fsm_start_state |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
509 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
510 def set_start_state(self, state_name): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
511 assert state_name in self.fsm_states |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
512 self.fsm_start_state = state_name |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
513 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
514 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
515 def all_state_names(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
516 return self.fsm_states.keys() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
517 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
518 def get_state(self, name): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
519 return self.fsm_states[name] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
520 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
521 def add_state(self, name): |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
522 if not self.fsm_states_node: |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
523 self._create_states_node() |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
524 pass |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
525 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
526 doc = self._comp_mgr._doc |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
527 |
1468
c586981ecf1a
Avoid duplication in state names
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
528 if name in self.fsm_states: |
c586981ecf1a
Avoid duplication in state names
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
529 raise KeyError, \ |
c586981ecf1a
Avoid duplication in state names
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
530 'Add a state with a name (%s) been used' % (name) |
c586981ecf1a
Avoid duplication in state names
Thinker K.F. Li <thinker@codemud.net>
parents:
1467
diff
changeset
|
531 |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
532 state = State() |
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
533 state.name = name |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
534 self.fsm_states[name] = state |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
535 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
536 state_node = state.create_node(doc) |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
537 states_node = self.fsm_states_node |
1467
6927debad4ee
Fix issue and a simple testcase for FSM
Thinker K.F. Li <thinker@codemud.net>
parents:
1465
diff
changeset
|
538 states_node.appendChild(state_node) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
539 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
540 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
541 def rename_state(self, state_name, new_name): |
1506
f185a9d23a30
_FSM_popup handles edit state
Thinker K.F. Li <thinker@codemud.net>
parents:
1501
diff
changeset
|
542 if new_name in self.fsm_states: |
f185a9d23a30
_FSM_popup handles edit state
Thinker K.F. Li <thinker@codemud.net>
parents:
1501
diff
changeset
|
543 raise ValueError, 'New state name %s is duplicated' % (new_name) |
f185a9d23a30
_FSM_popup handles edit state
Thinker K.F. Li <thinker@codemud.net>
parents:
1501
diff
changeset
|
544 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
545 state = self.fsm_states[state_name] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
546 del self.fsm_states[state_name] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
547 self.fsm_states[new_name] = state |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
548 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
549 state.rename(new_name) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
550 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
551 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
552 def rm_state(self, name): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
553 fsm_states = self.fsm_states |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
554 state = fsm_states[name] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
555 del self.fsm_states[name] |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
556 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
557 state_node = state.node |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
558 states_node = self.fsm_states_node |
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
559 states_node.removeChild(state_node) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
560 pass |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
561 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
562 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
563 |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
564 ## \brief A mix-in for class component_manager for UI updating. |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
565 # |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
566 # This class collects all methods for supporting UI updating. |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
567 # |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
568 class component_manager_ui_update(object): |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
569 ## \brief Update the list of components. |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
570 # |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
571 def reparse_components(self): |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
572 saved_cur_comp = self._cur_comp |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
573 self._components[:] = [self._main_comp] |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
574 self._comp_names.clear() |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
575 self._parse_components() |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
576 |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
577 for comp in self._components: |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
578 if comp.name() == saved_cur_comp.name(): |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
579 self._cur_comp = comp |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
580 break |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
581 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
582 else: |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
583 self._cur_comp = self._main_comp |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
584 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
585 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
586 |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
587 ## \brief Update the list of timelines of current component. |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
588 # |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
589 def reparse_timelines(self): |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
590 comp = self._cur_comp |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
591 saved_cur_timeline = self._cur_timeline |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
592 comp.parse_timelines() |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
593 |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
594 for timeline in comp.timelines: |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
595 if timeline.name() == saved_cur_timeline.name(): |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
596 self._cur_timeline = timeline |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
597 break |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
598 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
599 else: |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
600 self._cur_timeline = comp.timelines[0] |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
601 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
602 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
603 pass |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
604 |
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
605 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
606 ## \brief A trait for class domview for managing components. |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
607 # |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
608 # This class is responsible for manage components and timelines. It |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
609 # is also responsible for switching component and timeline. Switching |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
610 # to a component is actually switching to a timeline in another |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
611 # component. When switch to a timeline, it actuall change |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
612 # domview._scense_node, parent of all scene nodes of a component, and |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
613 # domview._layers_parent, parent of all layer group of a component. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
614 # domview relys on these two variables to operate on right component |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
615 # and timeline. (It should be changed to get more hint with |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
616 # meaningful names.) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
617 # |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
618 # FIXME: The root node is always the 'main' component. It is a |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
619 # special case with slightly different in structure. It should be |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
620 # removed and normalized to normal components. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
621 # |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
622 @trait |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
623 class component_manager(component_manager_ui_update): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
624 _scenes_node = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
625 _metadata_node = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
626 _doc = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
627 _root = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
628 _layers = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
629 _layers_parent = require |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
630 _cur_comp = require |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
631 new_id = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
632 get_node = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
633 reset = require |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
634 |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
635 def __init__(self): |
1342
972d749b9656
Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents:
1340
diff
changeset
|
636 super(component_manager, self).__init__() |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
637 self._components_node = None |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
638 self._components = [] |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
639 self._comp_names = set() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
640 self._main_comp = None |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
641 self._cur_timeline = None |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
642 self._components_group = None |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
643 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
644 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
645 def _set_main_component(self): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
646 comp = Component(self, None) |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
647 comp.layers = self._layers |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
648 scenes_node = self._scenes_node |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
649 timeline = Timeline(scenes_node) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
650 comp.timelines = [timeline] |
1520
8bc2e824f155
Fix various bug of code for parsing finite state machines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1511
diff
changeset
|
651 comp.parse_states() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
652 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
653 self._components.append(comp) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
654 self._comp_names.add('main') |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
655 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
656 self._main_comp = comp |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
657 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
658 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
659 def _parse_components(self): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
660 comp_names = self._comp_names |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
661 components_node = self._components_node |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
662 for child in components_node.childList(): |
1428
43369f3314d8
Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents:
1427
diff
changeset
|
663 child_node_name = child.name() |
43369f3314d8
Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents:
1427
diff
changeset
|
664 if child_node_name != 'ns0:component': |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
665 continue |
1428
43369f3314d8
Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents:
1427
diff
changeset
|
666 |
43369f3314d8
Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents:
1427
diff
changeset
|
667 child_name = child.getAttribute('name') |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
668 if child_name in comp_names: |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
669 raise ValueError, 'duplicate component name %s' % (child_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
670 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
671 comp = Component(self, child) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
672 comp.parse_timelines() |
1465
a3ce8d22d163
Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1463
diff
changeset
|
673 comp.parse_states() |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
674 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
675 self._components.append(comp) |
1428
43369f3314d8
Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents:
1427
diff
changeset
|
676 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
677 comp_names.add(child_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
678 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
679 pass |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
680 |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
681 ## \brief To initialize subtree of metadata. |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
682 # |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
683 # This method is called by domview._init_metadata(). |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
684 # |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
685 def _component_manager_init_metadata(self): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
686 metadata_node = self._metadata_node |
1321
6a014a4ec79e
Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents:
1318
diff
changeset
|
687 |
6a014a4ec79e
Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents:
1318
diff
changeset
|
688 # Make sure ns0:components in metadata |
6a014a4ec79e
Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents:
1318
diff
changeset
|
689 for n in metadata_node.childList(): |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
690 if n.name() == 'ns0:components': |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
691 self._components_node = n |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
692 break |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
693 pass |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
694 else: |
1342
972d749b9656
Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents:
1340
diff
changeset
|
695 components_node = \ |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
696 self._doc.createElement("ns0:components") |
1321
6a014a4ec79e
Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents:
1318
diff
changeset
|
697 metadata_node.appendChild(components_node) |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
698 self._components_node = components_node |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
699 pass |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
700 |
1321
6a014a4ec79e
Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents:
1318
diff
changeset
|
701 # Make sure the group for containing components. |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
702 for n in self._root.childList(): |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
703 if n.name() != 'svg:g': |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
704 continue |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
705 try: |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
706 nlabel = n.getAttribute('inkscape:label') |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
707 except: |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
708 continue |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
709 if nlabel == 'components': |
1427
5b69baa49a8b
Abandon head #6fa411fd9549
Thinker K.F. Li <thinker@codemud.net>
parents:
1419
diff
changeset
|
710 self._components_group = n |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
711 break |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
712 pass |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
713 else: # no components group |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
714 components_group = self._doc.createElement('svg:g') |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
715 components_group.setAttribute('inkscape:label', 'components') |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
716 gid = self.new_id() |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
717 components_group.setAttribute('id', gid) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
718 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
719 self._root.appendChild(components_group) |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
720 self._components_group = components_group |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
721 pass |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
722 pass |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
723 |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
724 def _start_component_manager(self): |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
725 self._component_manager_init_metadata() |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
726 self._set_main_component() |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
727 self._parse_components() |
1316
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
728 |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
729 self._cur_comp = self._main_comp |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
730 tl = self._main_comp.get_timeline('default') |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
731 self._cur_timeline = tl |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
732 self._scenes_node = tl.scenes_node |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
733 pass |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
734 |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
735 ## \brief Create component group |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
736 # |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
737 # A component group is a group with a layers group as child. |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
738 # The layers group is where layer groups is in. |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
739 # |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
740 def _create_component_group(self): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
741 doc = self._doc |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
742 group = doc.createElement('svg:g') |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
743 gid = self.new_id() |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
744 group.setAttribute('id', gid) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
745 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
746 self._components_group.appendChild(group) |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
747 |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
748 # Create layers group |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
749 layers_group = doc.createElement('svg:g') |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
750 gid = self.new_id() |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
751 layers_group.setAttribute('id', gid) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
752 layers_group.setAttribute('inkscape:label', 'layers') |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
753 group.appendChild(layers_group) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
754 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
755 return group |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
756 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
757 ## \brief Create a ns0:component node for a given name. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
758 # |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
759 # \param comp_name is the name of the created component. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
760 # \param comp_group_id is the component group. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
761 # \return a ns0:component node. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
762 # |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
763 def _create_component_node(self, comp_name, comp_group_id): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
764 comp_node = self._doc.createElement('ns0:component') |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
765 comp_id = self.new_id() |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
766 comp_node.setAttribute('id', comp_id) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
767 comp_node.setAttribute('name', comp_name) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
768 comp_node.setAttribute('ref', comp_group_id) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
769 self._components_node.appendChild(comp_node) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
770 return comp_node |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
771 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
772 ## \brief Get Component object associated with the given name. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
773 # |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
774 def _get_component(self, comp_name): |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
775 if comp_name in self._comp_names: |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
776 for comp in self._components: |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
777 if comp.name() == comp_name: |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
778 return comp |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
779 pass |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
780 pass |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
781 raise ValueError, 'can not find component node - %s' % (comp_name) |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
782 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
783 ## \brief Create a layer group for give layer of a component. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
784 # |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
785 def _create_comp_layer_group(self, layers_group, layer_name): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
786 doc = self._doc |
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
787 gid = self.new_id() |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
788 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
789 layer_group = doc.createElement('svg:g') |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
790 layer_group.setAttribute('id', gid) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
791 layer_group.setAttribute('inkscape:label', layer_name) |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
792 layer_group.setAttribute('inkscape:groupmode', 'layer') |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
793 layers_group.appendChild(layer_group) |
1326
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
794 |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
795 return layer_group |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
796 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
797 ## \brief Return group of specified layer in a component. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
798 # |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
799 # This is here for getting layer group without switch current |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
800 # component. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
801 # |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
802 def _get_group_of_component_layer(self, comp_name, layer_idx): |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
803 comp = self._get_component(comp_name) |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
804 layer = comp.layers[layer_idx] |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
805 return layer.group |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
806 |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
807 def _get_layers_group_of_component(self, comp_name): |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
808 if comp_name == 'main': |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
809 return self._root |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
810 |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
811 comp_group = self.get_component_group(comp_name) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
812 layers_group = comp_group.firstChild() |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
813 assert layers_group.getAttribute('inkscape:label') == 'layers' |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
814 |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
815 return layers_group |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
816 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
817 def all_comp_names(self): |
1317
e2ad9eb7f7a4
Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
1316
diff
changeset
|
818 return [comp.name() for comp in self._components] |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
819 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
820 def has_component(self, name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
821 return name in self._comp_names |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
822 |
1326
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
823 def hide_component(self, comp_name): |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
824 if comp_name == 'main': |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
825 comp = self._get_component(comp_name) |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
826 for layer in comp.layers: |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
827 group = layer.group |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
828 group.setAttribute('style', 'display: none') |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
829 pass |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
830 return |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
831 |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
832 comp_group = self.get_component_group(comp_name) |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
833 comp_group.setAttribute('style', 'display: none') |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
834 pass |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
835 |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
836 def show_component(self, comp_name): |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
837 if comp_name == 'main': |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
838 comp = self._get_component(comp_name) |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
839 for layer in comp.layers: |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
840 group = layer.group |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
841 group.setAttribute('style', '') |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
842 pass |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
843 return |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
844 |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
845 comp_group = self.get_component_group(comp_name) |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
846 comp_group.setAttribute('style', '') |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
847 pass |
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
848 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
849 def switch_component(self, comp_name): |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
850 old_comp = self._cur_comp |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
851 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
852 comp = self._get_component(comp_name) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
853 self._cur_comp = comp |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
854 self._layers = comp.layers |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
855 comp_name = self._cur_comp.name() |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
856 # for domview |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
857 self._layers_parent = \ |
1342
972d749b9656
Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents:
1340
diff
changeset
|
858 self._get_layers_group_of_component(comp_name) |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
859 |
1430
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
860 self.make_sure_timeline() |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
861 |
1419
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
862 try: |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
863 comp_grp = self.get_component_group(old_comp.name()) |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
864 old_comp_existed = True |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
865 except ValueError: |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
866 old_comp_existed = False |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
867 pass |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
868 |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
869 if old_comp_existed: |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
870 self.hide_component(old_comp.name()) |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
871 pass |
3519f43da037
Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents:
1418
diff
changeset
|
872 |
1326
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
873 self.show_component(comp.name()) |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
874 pass |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
875 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
876 def add_component(self, comp_name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
877 if self.has_component(comp_name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
878 raise ValueError, \ |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
879 'try add a component with existed name %s' % (comp_name) |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
880 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
881 comp_group = self._create_component_group() |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
882 comp_group_id = comp_group.getAttribute('id') |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
883 comp_node = self._create_component_node(comp_name, comp_group_id) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
884 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
885 comp = Component(self, comp_node) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
886 comp.parse_timelines() |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
887 |
1327
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
888 self._components.append(comp) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
889 self._comp_names.add(comp_name) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
890 |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
891 # Create Layer1 (at least one layer for a component) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
892 layers_group = self._get_layers_group_of_component(comp_name) |
ab281ec3eeec
Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents:
1326
diff
changeset
|
893 layer_group = self._create_comp_layer_group(layers_group, 'Layer1') |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
894 layer = Layer(layer_group) |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
895 comp.layers.append(layer) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
896 |
1326
0a2034f490e5
Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1323
diff
changeset
|
897 self.hide_component(comp_name) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
898 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
899 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
900 def add_component_node(self, comp_node): |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
901 comp = Component(self, comp_node) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
902 comp_name = comp.name() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
903 if self.has_component(comp_name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
904 raise ValueError, \ |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
905 'the name of a ns0:component is duplicated' |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
906 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
907 self._components.append(comp) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
908 self._comp_names.add(comp_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
909 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
910 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
911 def rm_component(self, comp_name): |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
912 comp = self._get_component(comp_name) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
913 comp_name = comp.name() |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
914 comp_node = comp.node |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
915 comp_group = self.get_component_group(comp_name) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
916 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
917 self._components.remove(comp) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
918 self._comp_names.remove(comp_name) |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
919 self._components_node.removeChild(comp_node) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
920 self._components_group.removeChild(comp_group) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
921 pass |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
922 |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
923 def rename_component(self, comp_name, new_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
924 comp = self._get_component(comp_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
925 comp.rename(new_name) |
1459
8eecaca2a125
Fix bug when renaming component
Thinker K.F. Li <thinker@codemud.net>
parents:
1432
diff
changeset
|
926 self._comp_names.remove(comp_name) |
8eecaca2a125
Fix bug when renaming component
Thinker K.F. Li <thinker@codemud.net>
parents:
1432
diff
changeset
|
927 self._comp_names.add(new_name) |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
928 pass |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
929 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
930 def get_component_group(self, comp_name): |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
931 comp = self._get_component(comp_name) |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
932 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
933 comp_name = comp.name() |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
934 if comp_name == 'main': |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
935 return self._root |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
936 |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
937 comp_node = comp.node |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
938 gid = comp_node.getAttribute('ref') |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
939 comp_group = self.get_node(gid) |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
940 return comp_group |
1316
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
941 |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
942 def get_current_component(self): |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
943 return self._cur_comp.name() |
1344
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
944 |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
945 ## \brief Hide scene groups of current timeline. |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
946 # |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
947 # This method all scene groups of current timeline invisible. |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
948 # |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
949 def _hide_current_timeline(self): |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
950 tl = self._cur_timeline |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
951 scenes_node = tl.scenes_node |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
952 for child in scenes_node.childList(): |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
953 if child.name() != 'ns0:scene': |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
954 continue |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
955 gid = child.getAttribute('ref') |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
956 group = self.get_node(gid) |
1344
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
957 group.setAttribute('style', 'display: none') |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
958 pass |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
959 pass |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
960 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
961 def switch_timeline(self, timeline_name): |
1344
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
962 if self._cur_timeline: |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
963 self._hide_current_timeline() |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
964 pass |
8f1f8ef5c9ea
Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1343
diff
changeset
|
965 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
966 tl = self._cur_comp.get_timeline(timeline_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
967 self._cur_timeline = tl |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
968 self._scenes_node = tl.scenes_node # of class domview |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
969 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
970 # Make domview to rescan layers and scenes. |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
971 self.reset() # from domview |
1430
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
972 |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
973 cur_comp_name = self.get_current_component() |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
974 cur_comp_node = self.get_component_group(cur_comp_name) |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
975 cur_comp_node.setAttribute("cur_timeline", timeline_name) |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
976 pass |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
977 |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
978 def make_sure_timeline(self): |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
979 cur_comp_name = self.get_current_component() |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
980 cur_comp_node = self.get_component_group(cur_comp_name) |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
981 try: |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
982 timeline_name = cur_comp_node.getAttribute("cur_timeline") |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
983 except KeyError: |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
984 timeline_name = self.all_timeline_names()[0] |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
985 pass |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
986 self._cur_timeline = None |
bf405cb2d7cb
Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1429
diff
changeset
|
987 self.switch_timeline(timeline_name) |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
988 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
989 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
990 def add_timeline(self, timeline_name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
991 self._cur_comp.add_timeline(timeline_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
992 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
993 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
994 def rm_timeline(self, timeline_name): |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
995 self._cur_comp.rm_timeline(timeline_name) |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
996 pass |
1306
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
997 |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
998 def rename_timeline_of_component(self, timeline_name, new_name, comp_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
999 comp = self._get_component(comp_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1000 comp.rename_timeline(timeline_name, new_name) |
1527
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1001 |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1002 comp_node = self.get_component_group(comp_name) |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1003 try: |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1004 cur_timeline_name = comp_node.getAttribute("cur_timeline") |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1005 except KeyError: |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1006 return |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1007 if timeline_name == cur_timeline_name: |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1008 comp_node.setAttribute('cur_timeline', new_name) |
d42951ebfc6f
Update "cur_timeline" attribute for renaming timeline
Thinker K.F. Li <thinker@codemud.net>
parents:
1525
diff
changeset
|
1009 pass |
1331
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1010 pass |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1011 |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1012 def rename_timeline(self, timeline_name, new_name): |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1013 comp_name = self._cur_comp.name() |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1014 self.rename_timeline_of_component(timeline_name, new_name, comp_name) |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1015 pass |
5da64f67d00d
Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents:
1328
diff
changeset
|
1016 |
1306
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1017 def all_timeline_names(self): |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1018 r = self._cur_comp.all_timeline_names() |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1019 return r |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1020 |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1021 def has_timeline(self, name): |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1022 r = self._cur_comp.has_timeline(name) |
8c0a4684c1f7
Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1302
diff
changeset
|
1023 return r |
1316
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
1024 |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
1025 def get_current_timeline(self): |
9ab8d50dcf7e
Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents:
1315
diff
changeset
|
1026 return self._cur_timeline.name() |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1027 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1028 ## \brief Add a new component from a group node. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1029 # |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1030 # The group node is reparented to the group of first layer of |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1031 # specified component. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1032 # |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1033 def mv_group_to_component(self, group, comp_name): |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1034 group_parent = group.parent() |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1035 if group_parent: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1036 group_parent.removeChild(group) |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1037 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1038 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1039 layer_group = self._get_group_of_component_layer(comp_name, 0) |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1040 layer_group.appendChild(group) |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1041 pass |
1328
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1042 |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1043 ## \brief Create a link to a component. |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1044 # |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1045 # \param parent_group is where the link will be pliaced in. |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1046 # \return link node. |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1047 # |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1048 def link_to_component(self, comp_name, parent_group): |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1049 layers_group = self._get_layers_group_of_component(comp_name) |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1050 |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1051 use_node = self._doc.createElement('svg:use') |
1328
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1052 layers_group_id = layers_group.getAttribute('id') |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1053 use_node.setAttribute('xlink:href', '#' + layers_group_id) |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1054 use_node_id = self.new_id() |
1328
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1055 use_node.setAttribute('id', use_node_id) |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1056 use_node.setAttribute('use_component', 'true') |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1057 |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1058 parent_group.appendChild(use_node) |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1059 |
407f321f0d7c
Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents:
1327
diff
changeset
|
1060 return use_node |
1431
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1061 |
1432 | 1062 ## \brief Remember current frame and layer on the scenes node. |
1063 # | |
1431
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1064 def remember_current_frame(self, layer_idx, frame_idx): |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1065 if not isinstance(layer_idx, int): |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1066 raise TypeError, 'layer index should be a integer' |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1067 if not isinstance(frame_idx, int): |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1068 raise TypeError, 'frame index should be a integer' |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1069 |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1070 timeline_name = self.get_current_timeline() |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1071 timeline = self._cur_comp.get_timeline(timeline_name) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1072 timeline_scenes = timeline.scenes_node |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1073 timeline_scenes.setAttribute('cur_layer', str(layer_idx)) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1074 timeline_scenes.setAttribute('cur_frame', str(frame_idx)) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1075 pass |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1076 |
1432 | 1077 ## \brief Get current frame and layer from the scenes node. |
1078 # | |
1431
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1079 def get_current_frame(self): |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1080 timeline_name = self.get_current_timeline() |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1081 timeline = self._cur_comp.get_timeline(timeline_name) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1082 timeline_scenes = timeline.scenes_node |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1083 try: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1084 cur_layer = timeline_scenes.getAttribute('cur_layer') |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1085 except KeyError: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1086 cur_layer_idx = 0 |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1087 else: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1088 cur_layer_idx = int(cur_layer) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1089 pass |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1090 try: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1091 cur_frame = timeline_scenes.getAttribute('cur_frame') |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1092 except KeyError: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1093 cur_frame_idx = 0 |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1094 else: |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1095 cur_frame_idx = int(cur_frame) |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1096 pass |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1097 |
60f2c9a24cdb
Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1430
diff
changeset
|
1098 return cur_layer_idx, cur_frame_idx |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1099 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1100 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1101 |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1102 ## \brief A trait for management FSM associated with current component. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1103 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1104 @trait |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1105 class FSM_manager(object): |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1106 _get_component = require |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1107 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1108 def __init__(self): |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1109 super(FSM_manager, self).__init__() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1110 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1111 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1112 def all_state_names(self, comp_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1113 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1114 return comp.all_state_names() |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1115 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1116 def get_start_state_name(self, comp_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1117 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1118 return comp.get_start_state_name() |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1119 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1120 ## \brief To return state object for the given name. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1121 # |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1122 # This method should only be used by component_manager internally. |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1123 # |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1124 def _get_state(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1125 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1126 return comp.get_state(state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1127 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1128 def rm_state(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1129 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1130 comp.rm_state(state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1131 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1132 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1133 def add_state(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1134 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1135 comp.add_state(state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1136 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1137 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1138 def rename_state(self, comp_name, state_name, new_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1139 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1140 comp.rename_state(state_name, new_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1141 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1142 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1143 def set_start_state(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1144 comp = self._get_component(comp_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1145 comp.set_start_state(state_name) |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1146 pass |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1147 |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1148 def set_state_entry_action(self, comp_name, state_name, entry_action): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1149 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1150 state.set_entry_action(entry_action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1151 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1152 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1153 def set_state_r(self, comp_name, state_name, r): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1154 state = self._get_state(comp_name, state_name) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1155 state.set_r(r) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1156 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1157 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1158 def set_state_xy(self, comp_name, state_name, x, y): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1159 state = self._get_state(comp_name, state_name) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1160 state.set_xy(x, y) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1161 pass |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1162 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1163 def get_state_entry_action(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1164 state = self._get_state(comp_name, state_name) |
1506
f185a9d23a30
_FSM_popup handles edit state
Thinker K.F. Li <thinker@codemud.net>
parents:
1501
diff
changeset
|
1165 action = state.entry_action |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1166 return action |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1167 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1168 def get_state_r(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1169 state = self._get_state(comp_name, state_name) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1170 r = state.r |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1171 return r |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1172 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1173 def get_state_xy(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1174 state = self._get_state(comp_name, state_name) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1175 xy = state.x, state.y |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1176 return xy |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1177 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1178 def all_transitions(self, comp_name, state_name): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1179 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1180 trn_names = state.all_transitions() |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1181 return trn_names |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1182 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1183 def add_transition(self, comp_name, state_name, cond, target): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1184 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1185 state.add_transition(cond, target) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1186 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1187 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1188 def rm_transition(self, comp_name, state_name, cond): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1189 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1190 state.rm_transition(cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1191 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1192 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1193 def change_transition_cond(self, comp_name, state_name, |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1194 old_cond, new_cond): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1195 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1196 state.change_transition_cond(old_cond, new_cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1197 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1198 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1199 def get_transition(self, comp_name, state_name, cond): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1200 state = self._get_state(comp_name, state_name) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1201 trn = state.get_transition(cond) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1202 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1203 cond = trn.condition |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1204 target = trn.target |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1205 action = trn.action |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1206 path = trn.path |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1207 |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1208 return cond, target, action, path |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1209 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1210 def set_transition_action(self, comp_name, state_name, cond, action): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1211 state = self._get_state(comp_name, state_name) |
1470 | 1212 trn = state.get_transition(cond) |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1213 trn.set_action(action) |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1214 pass |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1215 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1216 def set_transition_path(self, comp_name, state_name, cond, path): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1217 state = self._get_state(comp_name, state_name) |
1470 | 1218 trn = state.get_transition(cond) |
1469
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1219 trn.set_path(path) |
c1e70540541c
Drawing functions for states and transitions
Thinker K.F. Li <thinker@codemud.net>
parents:
1468
diff
changeset
|
1220 pass |
1501
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
1221 |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1222 def chg_transition_cond(self, comp_name, state_name, cond, new_cond): |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1223 state = self._get_state(comp_name, state_name) |
1501
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
1224 state.chg_transition_cond(cond, new_cond) |
4a57650bb926
Apply changes returned from transition editor
Thinker K.F. Li <thinker@codemud.net>
parents:
1470
diff
changeset
|
1225 pass |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1226 pass |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1227 |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1228 |
1350
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1229 ## \brief Parser for scenes nodes. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1230 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1231 # This class parses scenes nodes and collect ID of all nodes. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1232 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1233 @trait |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1234 class scenes_parser(object): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1235 _root = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1236 _scenes_node = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1237 _id2node = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1238 _group2scene = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1239 current = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1240 _maxframe = require |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1241 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1242 def _find_maxframe(self, scenes_node): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1243 maxframe = 0 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1244 for child in scenes_node.childList(): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1245 if child.name() != 'ns0:scene': |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1246 continue |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1247 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1248 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1249 start = child.getAttribute('start') |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1250 maxframe = max(int(start), maxframe) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1251 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1252 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1253 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1254 end = child.getAttribute('end') |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1255 maxframe = max(int(end), maxframe) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1256 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1257 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1258 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1259 return maxframe |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1260 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1261 ## \brief Collect ID of nodes in the document. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1262 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1263 # It is used to implement a fast mapping from an ID to the respective node. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1264 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1265 def _collect_node_ids(self): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1266 self._id2node = {} |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1267 root = self._root |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1268 for n in root.childList(): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1269 self._collect_node_ids_recursive(n) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1270 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1271 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1272 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1273 def _collect_node_ids_recursive(self, node): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1274 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1275 node_id = node.getAttribute('id') |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1276 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1277 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1278 else: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1279 self._id2node[node_id] = node |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1280 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1281 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1282 for n in node.childList(): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1283 self._collect_node_ids_recursive(n) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1284 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1285 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1286 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1287 def parse_one_scene(self, scene_node): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1288 assert scene_node.name() == 'ns0:scene' |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1289 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1290 start = int(scene_node.getAttribute("start")) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1291 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1292 end = int(scene_node.getAttribute("end")) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1293 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1294 end = start |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1295 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1296 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1297 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1298 scene_type = scene_node.getAttribute('type') |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1299 if scene_type == None: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1300 scene_type = 'normal' |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1301 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1302 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1303 scene_type = 'normal' |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1304 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1305 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1306 return start, end, scene_type |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1307 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1308 def _parse_one_scenes(self, scenes_node): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1309 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1310 cur = int(n.getAttribute("current")) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1311 except: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1312 cur = 0 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1313 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1314 self.current = cur |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1315 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1316 for scene_node in scenes_node.childList(): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1317 if scene_node.name() != 'ns0:scene': |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1318 continue |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1319 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1320 try: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1321 start, end, scene_type = self.parse_one_scene(scene_node) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1322 group_id = scene_node.getAttribute("ref") |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1323 except: # the scene node is incompleted. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1324 continue |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1325 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1326 self._group2scene[group_id] = scene_node |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1327 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1328 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1329 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1330 ## \brief Parse all scenes node in svg:metadata subtree. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1331 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1332 def _collect_all_scenes(self): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1333 scenes_node = self._scenes_node |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1334 self._parse_one_scenes(scenes_node) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1335 self._maxframe = self._find_maxframe(scenes_node) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1336 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1337 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1338 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1339 ## \brief Return the node with given ID. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1340 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1341 def get_node(self, node_id): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1342 value = self._id2node[node_id] |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1343 if isinstance(value, list): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1344 return value[-1] |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1345 return value |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1346 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1347 ## \brief Return a scene node corresponding to a scene group of given ID. |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1348 # |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1349 def get_scene(self, group_id): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1350 return self._group2scene[group_id] |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1351 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1352 def new_id(self): |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1353 while True: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1354 candidate = 's%d' % int(random.random()*100000) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1355 if candidate not in self._id2node: |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1356 return candidate |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1357 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1358 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1359 pass |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1360 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1361 ## \brief Monitor changes of DOM-tree. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1362 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1363 # This class monitors DOM-tree to maintain _maxframe and maps for node ID to |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1364 # node and scene group ID to scene node. |
1350
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1365 @composite |
1244
b241f9768833
Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents:
1243
diff
changeset
|
1366 class domview_monitor(object): |
1350
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1367 use_traits = (scenes_parser,) |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1368 |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1369 method_map_traits = { |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1370 scenes_parser._find_maxframe: '_find_maxframe', |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1371 scenes_parser._collect_all_scenes: '_collect_all_scenes', |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1372 scenes_parser._collect_node_ids: '_collect_node_ids'} |
17fa5d78200b
Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1348
diff
changeset
|
1373 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1374 def __init__(self, *args, **kws): |
1244
b241f9768833
Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents:
1243
diff
changeset
|
1375 super(domview_monitor, self).__init__() |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1376 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1377 self._maxframe = 0 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1378 self._id2node = {} # map ID to the node in the DOM tree. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1379 self._group2scene = {} # map ID of a group to associated scene node. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1380 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1381 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1382 def _start_monitor(self): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1383 self._collect_node_ids() |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1384 self._collect_all_scenes() |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1385 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1386 doc = self._doc |
1253
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1387 dom_event.addEventListener(doc, 'DOMNodeInserted', |
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1388 self._on_insert_node, None) |
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1389 dom_event.addEventListener(doc, 'DOMNodeRemoved', |
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1390 self._on_remove_node, None) |
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1391 dom_event.addEventListener(doc, 'DOMAttrModified', |
07e0cb1e051d
Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1247
diff
changeset
|
1392 self._on_attr_modified, None) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1393 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1394 |
1340
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1395 ## \brief Add a node to id2node mapping. |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1396 # |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1397 # domview_monitor._id2node is a multiple mapping to map a key to |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1398 # multiple node. The reason that it is not a single mapping is |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1399 # Inkscape would insert a node with the ID from the node been |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1400 # copied, and change its ID to a unique one later. So, we must |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1401 # provide the capability to handle two or more nodes with the same |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1402 # ID. |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1403 def _map_id2node(self, node, node_id): |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1404 if node_id in self._id2node: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1405 old_value = self._id2node[node_id] |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1406 if isinstance(old_value, list): |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1407 old_value.append(node) |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1408 else: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1409 self._id2node[node_id] = [old_value, node] |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1410 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1411 else: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1412 self._id2node[node_id] = node |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1413 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1414 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1415 |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1416 def _unmap_id2node(self, node, node_id): |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1417 if node_id not in self._id2node: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1418 raise ValueError, 'invalide node ID (%s)' % (node_id) |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1419 |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1420 value = self._id2node[node_id] |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1421 if isinstance(value, list): |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1422 value.remove(node) |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1423 if not value: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1424 del self._id2node[node_id] |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1425 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1426 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1427 else: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1428 del self._id2node[node_id] |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1429 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1430 pass |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1431 |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1432 ## \brief Rescan the tree. |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1433 # |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1434 def _monitor_reparse(self): |
1301
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1435 self._maxframe = 0 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1436 self._id2node = {} |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1437 self._group2scene = {} |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1438 |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1439 self._collect_node_ids() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1440 self._collect_all_scenes() |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1441 pass |
18af917cf855
Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1299
diff
changeset
|
1442 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1443 def _on_insert_node(self, node, child): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1444 for cchild in child.childList(): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1445 self._on_insert_node(child, cchild) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1446 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1447 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1448 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1449 child_id = child.getAttribute('id') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1450 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1451 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1452 else: |
1340
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1453 self._map_id2node(child, child_id) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1454 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1455 |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1456 if child.name() == 'ns0:scene' and _id_eq(node, self._scenes_node): |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1457 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1458 ref = child.getAttribute('ref') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1459 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1460 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1461 else: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1462 if ref not in self._group2scene: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1463 self._group2scene[ref] = child |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1464 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1465 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1466 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1467 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1468 start = child.getAttribute('start') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1469 self._maxframe = max(int(start), self._maxframe) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1470 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1471 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1472 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1473 start = child.getAttribute('end') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1474 self._maxframe = max(int(start), self._maxframe) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1475 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1476 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1477 pass |
1265
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
1478 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1479 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1480 def _on_remove_node(self, node, child): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1481 for cchild in child.childList(): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1482 self._on_remove_node(child, cchild) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1483 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1484 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1485 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1486 child_id = child.getAttribute('id') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1487 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1488 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1489 else: |
1340
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1490 self._unmap_id2node(child, child_id) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1491 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1492 |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1493 if child.name() == 'ns0:scene' and _id_eq(node, self._scenes_node): |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1494 try: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1495 ref = child.getAttribute('ref') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1496 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1497 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1498 else: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1499 del self._group2scene[ref] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1500 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1501 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1502 try: |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1503 if int(child.getAttribute('start')) == self._maxframe or \ |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1504 int(child.getAttribute('end')) == self._maxframe: |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1505 self._maxframe = self._find_maxframe(node) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1506 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1507 except: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1508 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1509 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1510 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1511 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1512 def _on_attr_modified(self, node, name, old_value, new_value): |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1513 if old_value == new_value: |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1514 return |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1515 |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1516 if name == 'id': |
1340
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1517 if old_value and old_value in self._id2node: |
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1518 self._unmap_id2node(node, old_value) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1519 pass |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
1520 if new_value: |
1340
10d5f06f7566
Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents:
1336
diff
changeset
|
1521 self._map_id2node(node, new_value) |
1336
0b5ee9c90af7
Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents:
1331
diff
changeset
|
1522 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1523 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1524 elif name == 'ref' and node.name() == 'ns0:scene': |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1525 parent_node = node.parent() |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1526 scenes_node = self._scenes_node |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1527 if not _id_eq(parent_node, scenes_node): |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1528 return # not in current timeline |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1529 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1530 if old_value: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1531 node = self._group2scene[old_value] # use old node. Binding |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1532 # may generate a new |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1533 # wrapper. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1534 del self._group2scene[old_value] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1535 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1536 if new_value: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1537 self._group2scene[new_value] = node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1538 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1539 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1540 elif (name in ('start', 'end')) and node.name() == 'ns0:scene': |
1318
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1541 parent_node = node.parent() |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1542 scenes_node = self._scenes_node |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1543 if not _id_eq(parent_node, scenes_node): |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1544 return # not in current timeline |
b1776f441e8a
Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents:
1317
diff
changeset
|
1545 |
1276
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1546 try: |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1547 new_value = int(new_value) |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1548 old_value = int(old_value) |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1549 except TypeError: |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1550 self._maxframe = self._find_maxframe(scenes_node) |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1551 else: |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1552 if old_value == self._maxframe and old_value > new_value: |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1553 # _maxframe may be reduced. |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1554 self._maxframe = self._find_maxframe(scenes_node) |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1555 else: |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1556 self._maxframe = max(int(new_value), self._maxframe) |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1557 pass |
0442ae9c2ac2
Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1275
diff
changeset
|
1558 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1559 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1560 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1561 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1562 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1563 |
1246
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1564 ## \brief Iterator to travel a sub-tree of DOM. |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1565 # |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1566 def _DOM_iterator(node): |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1567 nodes = [node] |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1568 while nodes: |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1569 node = nodes.pop(0) |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1570 child = node.firstChild() |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1571 while child: |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1572 nodes.append(child) |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1573 child = child.next() |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1574 pass |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1575 yield node |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1576 pass |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1577 pass |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1578 |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
1579 |
1352
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1580 @trait |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1581 class layers_parser(object): |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1582 _doc = require |
1352
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1583 _layers = require |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1584 _layers_parent = require |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1585 get_scene = require |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1586 get_node = require |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1587 new_id = require |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1588 get_current_component = require |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1589 _get_layers_group_of_component = require |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1590 _create_comp_layer_group = require |
1352
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1591 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1592 def parse_all_layers(self): |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1593 layers = self._layers |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1594 layers_parent = self._layers_parent |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1595 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1596 for child in layers_parent.childList(): |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1597 if child.name() != 'svg:g': |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1598 continue |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1599 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1600 try: |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1601 label = child.getAttribute('inkscape:label') |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1602 except: |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1603 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1604 else: # has no label |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1605 if label == 'components': |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1606 continue |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1607 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1608 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1609 layer_group = child |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1610 layer = Layer(layer_group) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1611 layer.idx = len(layers) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1612 layers.append(layer) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1613 self.parse_layer(layer.idx) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1614 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1615 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1616 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1617 def parse_layer(self, layer_idx): |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1618 layer = self._layers[layer_idx] |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1619 layer_group = layer.group |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1620 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1621 for child in layer_group.childList(): |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1622 if child.name() != 'svg:g': |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1623 continue |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1624 try: |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1625 child_id = child.getAttribute('id') |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1626 scene_node = self.get_scene(child_id) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1627 except: |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1628 continue |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1629 |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1630 layer.scenes.append(scene_node) |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1631 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1632 pass |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1633 |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1634 def get_layer_num(self): |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1635 return len(self._layers) |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1636 |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1637 def _make_unique_layer_name(self, idx): |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1638 names = [layer.get_name() for layer in self._layers] |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1639 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1640 idx = idx + 1 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1641 name = 'Layer%d' % (idx) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1642 while name in names: |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1643 idx = idx + 1 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1644 name = 'Layer%d' % (idx) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1645 pass |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1646 return name |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1647 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1648 def get_layer_name(self, layer_idx): |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1649 layers = self._layers |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1650 layer = layers[layer_idx] |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1651 return layer.get_name() |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1652 |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1653 def set_layer_name(self, layer_idx, name): |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1654 layers = self._layers |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1655 layer = layers[layer_idx] |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1656 layer.set_name(name) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1657 pass |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1658 |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1659 ## \brief Add/insert a layer at given position. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1660 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1661 # \param layer_idx is the position in the layer list. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1662 # |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1663 def insert_layer(self, layer_idx): |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1664 layers = self._layers |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1665 |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1666 comp_name = self.get_current_component() |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1667 layers_group = self._get_layers_group_of_component(comp_name) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1668 layer_name = self._make_unique_layer_name(layer_idx) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1669 layer_group = self._create_comp_layer_group(layers_group, layer_name) |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1670 |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1671 layer = Layer(layer_group) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1672 if layer_idx >= len(layers): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1673 layers.append(layer) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1674 else: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1675 layers.insert(layer_idx, layer) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1676 for idx in range(layer_idx, len(layers)): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1677 layers[idx].idx = idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1678 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1679 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1680 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1681 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1682 ## \brief Manage a existed layer group |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1683 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1684 # This method scan layer groups of all managed layers, and find a |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1685 # proper place to insert it. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1686 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1687 # \return -1 for error, or layer index. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1688 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1689 def manage_layer_group(self, layer_group_id): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1690 layer_group = self.get_node(layer_group_id) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1691 new_layer = Layer(layer_group) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1692 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1693 if not self._layers: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1694 new_layer.idx = 0 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1695 self._layers.append(new_layer) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1696 return 0 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1697 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1698 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1699 # Scan who is after the given group |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1700 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1701 next_group = layer_group.next() |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1702 while next_group: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1703 next_group_id = next_group.getAttribute('id') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1704 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1705 for vlayer in self._layers: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1706 vlayer_group_id = vlayer.group.getAttribute('id') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1707 if vlayer_group_id == next_group_id: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1708 # This layer group is after given one. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1709 self._layers.insert(vlayer.idx, new_layer) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1710 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1711 for idx in range(vlayer.idx, len(self._layers)): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1712 self._layers[idx].idx = idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1713 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1714 return new_layer.idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1715 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1716 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1717 next_group = next_group.next() |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1718 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1719 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1720 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1721 # Is the given group after last layer group? |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1722 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1723 tail_group = self._layers[-1].group.next() |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1724 while tail_group: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1725 tail_group_id = tail_group.getAttribute('id') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1726 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1727 if tail_group_id == layer_group_id: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1728 # it is after last layer group. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1729 new_layer.idx = len(self._layers) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1730 self._layers.append(new_layer) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1731 return new_layer.idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1732 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1733 tail_group = tail_group.next() |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1734 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1735 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1736 return -1 # error, can not determinze the position |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1737 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1738 ## \brief Remove layer and associated scene nodes and scene groups. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1739 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1740 def rm_layer(self, layer_idx): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1741 layers = self._layers |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1742 |
1530
9e7e5f79acc6
Remove layer group from the tree when removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents:
1528
diff
changeset
|
1743 layer = layers[layer_idx] |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1744 for scene_node in layer.scenes: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1745 scene_group_id = scene_node.getAttribute('ref') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1746 try: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1747 scene_group_node = self.get_node(scene_group_id) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1748 if scene_group_node.parent(): # keep from crashing |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1749 scene_group_node.parent().removeChild(scene_group_node) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1750 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1751 except: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1752 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1753 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1754 if scene_node.parent(): # keep from crashing |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1755 scene_node.parent().removeChild(scene_node) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1756 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1757 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1758 |
1530
9e7e5f79acc6
Remove layer group from the tree when removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents:
1528
diff
changeset
|
1759 comp_name = self.get_current_component() |
9e7e5f79acc6
Remove layer group from the tree when removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents:
1528
diff
changeset
|
1760 layers_group = self._get_layers_group_of_component(comp_name) |
9e7e5f79acc6
Remove layer group from the tree when removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents:
1528
diff
changeset
|
1761 layers_group.removeChild(layer.group) |
9e7e5f79acc6
Remove layer group from the tree when removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents:
1528
diff
changeset
|
1762 |
1356
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1763 del layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1764 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1765 for idx in range(layer_idx, len(layers)): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1766 layers[idx].idx = idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1767 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1768 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1769 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1770 def get_layer_group(self, layer_idx): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1771 layer = self._layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1772 return layer.group |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1773 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1774 def get_all_scene_node_of_layer(self, layer_idx): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1775 layer = self._layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1776 return layer.scenes |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1777 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1778 def get_layer_data(self, layer_idx): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1779 layer = self._layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1780 try: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1781 data = layer.data |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1782 except: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1783 return None |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1784 return data |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1785 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1786 def set_layer_data(self, layer_idx, data): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1787 layer = self._layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1788 layer.data = data |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1789 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1790 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1791 def create_layer_dup_group(self, layer_idx): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1792 layer = self._layers[layer_idx] |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1793 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1794 dup_group = self._doc.createElement('svg:g') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1795 gid = self.new_id() |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1796 dup_group.setAttribute('id', gid) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1797 dup_group.setAttribute('inkscape:label', 'dup') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1798 dup_group.setAttribute('sodipodi:insensitive', '1') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1799 dup_group.setAttribute('style', '') |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1800 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1801 layer.group.appendChild(dup_group) |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1802 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1803 return dup_group |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1804 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1805 ## \brief Return associated layer index of given layer group. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1806 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1807 # \return -1 for error. |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1808 # |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1809 def find_layer_of_group(self, group_id): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1810 for layer_idx, layer in enumerate(self._layers): |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1811 if layer.group.getAttribute('id') == group_id: |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1812 return layer_idx |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1813 pass |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1814 return -1 |
ac61d86987af
Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
1815 |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1816 def reset_layers(self): |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1817 self._layers[:] = [] |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1818 self.parse_all_layers() |
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1819 pass |
1352
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1820 pass |
9164a0782ba7
Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1350
diff
changeset
|
1821 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1822 ## \brief This layer provide a data view to the DOM-tree. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1823 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1824 # This class maintains layers information, and provides functions to create, |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1825 # change and destroy scene node and scene group. A scene node is a 'ns0:scene' |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1826 # in 'ns0:scenes' tag. A scene group is respective 'svg:g' for a scene. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1827 # |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1828 @composite |
1342
972d749b9656
Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents:
1340
diff
changeset
|
1829 class domview(domview_monitor): |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1830 use_traits = (component_manager, layers_parser, FSM_manager) |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1831 |
1348
22a79dcbaec6
Change structure of provide_traits and method_map_traits
Thinker K.F. Li <thinker@codemud.net>
parents:
1345
diff
changeset
|
1832 method_map_traits = {component_manager._start_component_manager: |
1511
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1833 '_start_component_manager', |
4c349b214877
FSM_window use _compview to decorate domview.
Thinker K.F. Li <thinker@codemud.net>
parents:
1506
diff
changeset
|
1834 component_manager._get_component: |
1528
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1835 '_get_component', |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1836 component_manager._get_layers_group_of_component: |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1837 '_get_layers_group_of_component', |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1838 component_manager._create_comp_layer_group: |
b7d70341ee57
Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents:
1527
diff
changeset
|
1839 '_create_comp_layer_group'} |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1840 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1841 # Declare variables, here, for keeping tracking |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1842 _doc = None |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1843 _root = None |
1463
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1844 # Required by component_manager and FSM_manager |
5ff744b981fb
FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents:
1459
diff
changeset
|
1845 _cur_comp = None |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1846 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1847 def __init__(self, *args, **kws): |
1244
b241f9768833
Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents:
1243
diff
changeset
|
1848 super(domview, self).__init__() |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1849 self._metadata_node = None |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1850 # |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1851 # Following two variables would be changed by class |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1852 # component_manager to switch components and timelines. |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1853 # |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1854 self._scenes_node = None |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1855 self._layers_parent = None |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
1856 self._layers = [] |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1857 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1858 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1859 ## \brief Create a scenes node if not existed. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1860 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1861 def _init_metadata(self): |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1862 self._layers_parent = self._root |
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1863 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1864 for node in self._root.childList(): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1865 if node.name() == 'svg:metadata': |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1866 break |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1867 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1868 else: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1869 raise RuntimeError, \ |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1870 'can not find <svg:metadata> node in the document' |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1871 |
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1872 self._metadata_node = node |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1873 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1874 for n in node.childList(): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1875 if n.name() == 'ns0:scenes': |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1876 self._scenes_node = n |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1877 break |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1878 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1879 else: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1880 ns = "http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd" |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1881 self._root.setAttribute("xmlns:ns0", ns) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1882 scenes_node = self._doc.createElement("ns0:scenes") |
1322
7f25abbc1b61
Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents:
1321
diff
changeset
|
1883 scenes_node_id = 'main_default_scenes' |
7f25abbc1b61
Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents:
1321
diff
changeset
|
1884 scenes_node.setAttribute('id', scenes_node_id) |
7f25abbc1b61
Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents:
1321
diff
changeset
|
1885 scenes_node.setAttribute('name', 'default') |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1886 node.appendChild(scenes_node) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1887 self._scenes_node = scenes_node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1888 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1889 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1890 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1891 def handle_doc_root(self, doc, root): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1892 self._doc = doc |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1893 self._root = root |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1894 |
1315
fcff6978f9bf
User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents:
1310
diff
changeset
|
1895 self._init_metadata() |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1896 self._start_monitor() # from domview_monitor |
1345
e0400a2b7c35
Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1344
diff
changeset
|
1897 self._start_component_manager() |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1898 self.reset_layers() |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1899 pass |
1265
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
1900 |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
1901 def reset(self): |
1302
c53331c55a23
Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents:
1301
diff
changeset
|
1902 self._monitor_reparse() # from domview_monitor |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1352
diff
changeset
|
1903 self.reset_layers() |
1265
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
1904 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1905 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1906 def dumpattr(self, n): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1907 s = "" |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1908 for a,v in n.attrib.items(): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1909 s = s + ("%s=%s" % (a,v)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1910 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1911 return s |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1912 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1913 def dump(self, node, l=0): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1914 print " " * l*2,"<", node.tag, self.dumpattr(node),">" |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1915 for n in node: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1916 self.dump(n, l+1) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1917 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1918 print " " * l * 2,"/>" |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1919 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1920 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1921 ## \brief Create and add a ns0:scene node under ns0:scenes subtree. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1922 # |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1923 def add_scene_node(self, layer_idx, start, end, |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1924 frame_type=TweenObject.TWEEN_TYPE_NORMAL, |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1925 ref=None): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1926 type_names = ('normal', 'scale') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1927 scenes_node = self._scenes_node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1928 doc = self._doc |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1929 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1930 scene_node = doc.createElement('ns0:scene') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1931 self.chg_scene_node(scene_node, start=start) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1932 if start != end: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1933 self.chg_scene_node(scene_node, end=end) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1934 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1935 type_name = type_names[frame_type] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1936 self.chg_scene_node(scene_node, tween_type=type_name) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1937 if ref: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1938 self.chg_scene_node(scene_node, ref=ref) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1939 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1940 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1941 scenes_node.appendChild(scene_node) |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1942 |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1943 self._layers[layer_idx].scenes.append(scene_node) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1944 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1945 return scene_node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1946 |
1262
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1947 ## \brief Manage a existed scene node at given layer. |
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1948 # |
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1949 def manage_scene_node(self, layer_idx, scene_node): |
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1950 self._layers[layer_idx].scenes.append(scene_node) |
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1951 pass |
2f861eea1214
Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents:
1260
diff
changeset
|
1952 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1953 ## \brief Change attributes of a scene node. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1954 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1955 # This is here to monitor changes of scene node. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1956 def chg_scene_node(self, scene_node, start=None, end=None, |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1957 tween_type=None, ref=None): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1958 if start is not None: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1959 scene_node.setAttribute('start', str(start)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1960 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1961 if end is not None: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1962 scene_node.setAttribute('end', str(end)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1963 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1964 if tween_type is not None: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1965 scene_node.setAttribute('type', tween_type) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1966 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1967 if ref is not None: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1968 scene_node.setAttribute('ref', ref) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1969 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1970 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1971 |
1256
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1972 ## \brief Remove scene node from DOM-tree. |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1973 # |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1974 def rm_scene_node(self, scene_node): |
1256
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1975 if not scene_node.parent(): |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1976 return # without this, may crash the Inkscape. |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1977 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1978 self._scenes_node.removeChild(scene_node) |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1979 for layer in self._layers: |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1980 try: |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1981 layer.scenes.remove(scene_node) |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1982 except ValueError: # not in the list |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1983 pass |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1984 else: |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1985 break |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
1986 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1987 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1988 |
1256
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1989 ## \brief Remove scene node and asssociated scene group from DOM. |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1990 # |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1991 # It will remove as many as possible. Does not complain about |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1992 # error in the procedure of removing. |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1993 # |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1994 def rm_scene_node_n_group(self, scene_node): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1995 scene_group_id = scene_node.getAttribute('ref') |
1256
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1996 try: |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1997 scene_group_node = self.get_node(scene_group_id) |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1998 if scene_group_node.parent(): # Check it, or crash the |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
1999 # Inkscape. |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2000 scene_group_node.parent().removeChild(scene_group_node) |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2001 pass |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2002 except: |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2003 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2004 |
1256
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2005 try: |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2006 self.rm_scene_node(scene_node) |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2007 except: |
8755415b5e99
More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1253
diff
changeset
|
2008 pass |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2009 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2010 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2011 ## \brief Create and add a svg:g for a scene under a group for a layer. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2012 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2013 def add_scene_group(self, layer_idx): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2014 layer = self._layers[layer_idx] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2015 doc = self._doc |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2016 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2017 scene_group = doc.createElement('svg:g') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2018 gid = self.new_id() |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2019 scene_group.setAttribute("id", gid) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2020 scene_group.setAttribute("inkscape:groupmode", "layer") |
1299
6949e2b6cae2
Add unlink clone checker.
Thinker K.F. Li <thinker@codemud.net>
parents:
1298
diff
changeset
|
2021 scene_group.setAttribute('scene_group', 'true') |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2022 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2023 layer.group.appendChild(scene_group) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2024 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2025 return scene_group |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2026 |
1259
df474448364e
Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents:
1256
diff
changeset
|
2027 ## \brief Find layer index and scene info for a given scene node. |
df474448364e
Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents:
1256
diff
changeset
|
2028 # |
df474448364e
Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents:
1256
diff
changeset
|
2029 # \return (-1, None) for error. |
df474448364e
Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents:
1256
diff
changeset
|
2030 # |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2031 def find_layer_n_scene_of_node(self, node_id): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2032 for layer_idx, layer in enumerate(self._layers): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2033 for scene_node in layer.scenes: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2034 scene_group_id = scene_node.getAttribute('ref') |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2035 if scene_group_id == node_id: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2036 return layer_idx, scene_node |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2037 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2038 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2039 return -1, None |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2040 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2041 def insert_frames(self, layer_idx, frame_idx, num): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2042 layer = self._layers[layer_idx] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2043 for scene_node in layer.scenes: |
1274
a4d3838264dd
Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1270
diff
changeset
|
2044 start, end, tween_type = self.parse_one_scene(scene_node) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2045 if start >= frame_idx: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2046 self.chg_scene_node(scene_node, start=(start + num)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2047 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2048 if end >= frame_idx: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2049 self.chg_scene_node(scene_node, end=(end + num)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2050 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2051 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2052 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2053 |
1265
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2054 ## \brief add the current position to the undo buffer |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2055 # |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2056 def mark_undo(self, msg): |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2057 self._doc.done("none", msg) |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2058 pass |
ca301f6abef7
Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents:
1262
diff
changeset
|
2059 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2060 ## \brief Remove frames |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2061 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2062 # - Scenes covered by removing range were removed. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2063 # - Scenes after removing range were shifted left. |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2064 # |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2065 def rm_frames(self, layer_idx, frame_idx, num): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2066 layer = self._layers[layer_idx] |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2067 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2068 last_rm = frame_idx + num - 1 # last removed frame |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2069 for scene_node in layer.scenes: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2070 start, end, tween_type = \ |
1274
a4d3838264dd
Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1270
diff
changeset
|
2071 self.parse_one_scene(scene_node) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2072 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2073 if end < frame_idx: |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2074 continue |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2075 |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2076 if start > last_rm: # this scene is at right side |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2077 self.chg_scene_node(scene_node, |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2078 start=(start - num), |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2079 end=(end - num)) |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2080 else: # this scene is covered by removing range |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2081 self.rm_scene_node_n_group(scene_node) |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2082 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2083 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2084 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2085 |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2086 def get_max_frame(self): |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2087 return self._maxframe |
1246
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2088 |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2089 ## \brief Copy children of a group. |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2090 # |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2091 # Duplicate children of a group, and append them to another group. |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2092 # |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2093 def copy_group_children(self, src_group, dst_group): |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2094 # Search for the duplicated group |
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2095 doc = self._doc |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2096 |
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2097 dup_group = src_group.duplicate(doc) |
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2098 |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2099 old_nodes = _DOM_iterator(src_group) |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2100 new_nodes = _DOM_iterator(dup_group) |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2101 new_gids = set() |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2102 for old_node in old_nodes: |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2103 old_node_id = old_node.getAttribute('id') |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2104 new_node = new_nodes.next() |
1247
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2105 new_node.setAttribute('ns0:duplicate-src', old_node_id) |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2106 |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2107 # |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2108 # Change ID here, or inkscape would insert the node with |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2109 # the same ID, and change it later to avoid duplication. |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2110 # But, our event handler would be called before changing |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2111 # ID. It would confuse our code. We change ID of nodes |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2112 # before inserting them into the DOM-tree. |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2113 # |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2114 gid = self.new_id() |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2115 while gid in new_gids: |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2116 gid = self.new_id() |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2117 pass |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2118 new_gids.add(gid) |
45e9566ea5c0
Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents:
1246
diff
changeset
|
2119 new_node.setAttribute('id', gid) |
1246
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2120 pass |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2121 |
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2122 for child in dup_group.childList(): |
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2123 dup_group.removeChild(child) # prevent from crash |
1298 | 2124 dst_group.appendChild(child) |
1286
922d1caf6632
Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1285
diff
changeset
|
2125 pass |
1246
42c4874c8d1e
Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents:
1244
diff
changeset
|
2126 pass |
1291
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2127 |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2128 ## \brief Clone children of a source group to a destinate group. |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2129 # |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2130 # It create a 'svg:use' node for every child of the source group, |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2131 # and append nodes to the desitnate group. |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2132 # |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2133 def clone_group_children(self, src_group, dst_group): |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2134 doc = self._doc |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2135 |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2136 for src_child in src_group.childList(): |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2137 src_child_id = src_child.getAttribute('id') |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2138 dst_child_id = self.new_id() |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2139 |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2140 dst_child = doc.createElement('svg:use') |
1294 | 2141 dst_child.setAttribute('id', dst_child_id) |
1291
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2142 dst_child.setAttribute('xlink:href', '#' + src_child_id) |
1294 | 2143 dst_child.setAttribute('ns0:duplicate-src', src_child_id) |
1295 | 2144 dst_group.appendChild(dst_child) |
1291
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2145 pass |
a3e04b3f2a8c
Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents:
1286
diff
changeset
|
2146 pass |
1323
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2147 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2148 ## \brief To test a graphic node. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2149 # |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2150 # A graphic node is a SVG node that is not layer group, scene |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2151 # group, ... etc. It is only a normal node in a layer group or a |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2152 # scene group. |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2153 def is_graph_node(self, node): |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2154 try: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2155 mode = node.getAttribute('inkscape:groupmode') |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2156 except: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2157 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2158 else: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2159 if mode == 'layer': |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2160 return False |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2161 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2162 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2163 try: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2164 label = node.geteAttribute('inkscape:label') |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2165 except: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2166 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2167 else: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2168 return False |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2169 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2170 try: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2171 scene_group = node.geteAttribute('scene_group') |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2172 except: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2173 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2174 else: |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2175 if scene_group == 'true': |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2176 return False |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2177 pass |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2178 |
ffbbd3aa218d
Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents:
1322
diff
changeset
|
2179 return True |
1243
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2180 pass |
d5f70928e9f1
Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2181 |