annotate pyink/domview.py @ 1465:a3ce8d22d163

Parse states while parsing a component
author Thinker K.F. Li <thinker@codemud.net>
date Sun, 17 Apr 2011 23:53:15 +0800
parents 5ff744b981fb
children 6927debad4ee
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
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
29 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
30
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
31
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
32 class Timeline(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
33 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
34 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
35 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
36
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
37 def name(self):
1407
f19121bd6a6c Check if the name is defined for old SVG file.
wycc
parents: 1356
diff changeset
38 try:
f19121bd6a6c Check if the name is defined for old SVG file.
wycc
parents: 1356
diff changeset
39 name = self.scenes_node.getAttribute('name')
f19121bd6a6c Check if the name is defined for old SVG file.
wycc
parents: 1356
diff changeset
40 except:
f19121bd6a6c Check if the name is defined for old SVG file.
wycc
parents: 1356
diff changeset
41 name='default'
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
42 return name
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
43
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
44 def rename(self, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
45 scenes_node = self.scenes_node
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
46 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
47 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
48 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
49
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
50
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
51 class Transition(object):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
52 node = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
53 condition = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
54 target = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
55 action = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
56
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
57 def __init__(self, node=None):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
58 self.node = node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
59 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
60
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
61 def set_condition(self, cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
62 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
63
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
64 node.setAttribute('condition', cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
65 self.condition = cond
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
66 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
67
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
68 def set_action(self, action):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
69 self.action = action
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
70 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
71 node.setAttribute('action', action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
72 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
73
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
74 def reparse(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
75 condition = node.getAttribute('condition')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
76 target = node.getAttribute('target')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
77 try:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
78 action = node.getAttribute('action')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
79 except:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
80 action = None
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
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
83 self.condition = condition
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
84 self.target = target
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
85 self.action = action
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
86 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
87
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
88 def update_node(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
89 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
90 node.setAttribute('condition', self.condition)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
91 node.setAttribute('target', self.target)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
92 if self.action:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
93 node.setAttribute('action', self.action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
94 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
95 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
96
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
97 ## \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
98 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
99 # 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
100 # is initialized with information from the object.
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
101 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
102 def create_node(self, doc):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
103 node = doc.createElement('ns0:transition')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
104 self.node = node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
105 self.update_node()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
106
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
107 return node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
108
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
109 @staticmethod
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
110 def parse_transition(node):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
111 trn = Transition(node)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
112 trn.reparse()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
113 return trn
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
114 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
115
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
116
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
117 ## \brief A state in a FSM
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
118 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
119 # 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
120 # 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
121 # transition can have a transition action.
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
122 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
123 # 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
124 # \verbatim
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
125 # <ns0:component>
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
126 # <ns0:states start_state="UP">
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
127 # <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
128 # <ns0:transition target="DOWN"
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
129 # condition="button_down" action="..."/>
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
130 # </ns0:state>
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
131 # </ns0:states>
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
132 # </ns0:/component>
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
133 # \endverbatim
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
134 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
135 class State(object):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
136 name = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
137 entry_action = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
138 transitions = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
139
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
140 def __init__(self, node):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
141 self.node = node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
142 pass
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 def rename(self, name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
145 self.name = name
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
146 self.node.setAttribute('name', name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
147 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
148
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
149 def set_entry_action(self, action):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
150 self.entry_action = action
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
151 self.node.setAttribute('entry_action', action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
152 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
153
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
154 def reparse(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
155 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
156
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
157 name = node.getAttribute('name')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
158 try:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
159 entry_action = node.getAttribute('entry_action')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
160 except:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
161 entry_action = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
162 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
163
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
164 all_transitions = [Transition.parse_transition(child)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
165 for child in node.childList()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
166 if child.name() == 'ns0:transition']
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
167 transitions = dict([(trn.condition, trn)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
168 for trn in all_transitions])
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
169
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
170 self.name = name
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
171 self.transitions = transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
172 self.entry_action = entry_action
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 update_node(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
176 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
177
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
178 node.setAttribute('name', self.name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
179 if self.entry_action:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
180 node.setAttribute('entry_action', self.entry_action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
181 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
182
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
183 transitions = self.transitions or []
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
184 for trn in transitions:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
185 trn.update_node()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
186 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
187 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
188
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
189 def create_node(self, doc):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
190 node = doc.createElement('ns0:state')
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
191 self.node = node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
192
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
193 self.update_node()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
194
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
195 return node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
196
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
197 @staticmethod
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
198 def parse_state(node):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
199 state = State(node)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
200 state.parse()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
201
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
202 return state
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
203
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
204 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
205 transitions = self.transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
206 trn = transitions[old_cond]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
207 del transitions[old_cond]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
208 transitions[new_cond] = trn
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
209
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
210 trn.set_condition(new_cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
211 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
212
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
213 def add_transition(self, cond, target):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
214 transitions = self.transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
215 assert cond not in transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
216
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
217 node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
218
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
219 trn = Transition()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
220 trn.condition = cond
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
221 trn.target = target
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
222 trn_node = trn.create_node(node.document())
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
223
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
224 node.addChild(trn_node)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
225 transitions[cond] = trn
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
226 pass
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 def rm_transition(self, cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
229 transitions = self.transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
230 if cond not in transitions:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
231 raise ValueError, \
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
232 '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
233 (cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
234
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
235 trn = transitions[cond]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
236 trn_node = trn.node
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.removeChild(trn_node)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
240 del transitions[cond]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
241 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
242
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
243 def all_transitions(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
244 return self.transitions.keys()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
245
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
246 def get_transition(self, cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
247 transitions = self.transitions
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
248 transition = transitions[cond]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
249 return transition
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
250 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
251
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
252
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
253 class Component(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
254 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
255 # \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
256 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
257 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
258 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
259 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
260 self.layers = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
261 self.timelines = []
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
262 self.fsm_states = {}
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
263 self.fsm_states_node = None
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
264 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
265
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
266 if comp_node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
267 self._initialize_comp()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
268 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
269 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
270
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
271 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
272 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
273 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
274 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
275 break
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
276 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
277 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
278 doc = self._comp_mgr._doc
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
279 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
280 scenes_node.setAttribute('name', 'default')
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
281
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
282 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
283 scenes_node.setAttribute('id', node_id)
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
284
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
285 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
286 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
287 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
288
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
289 def name(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
290 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
291 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
292 else:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
293 name = 'main'
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
294 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
295 return name
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
296
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
297 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
298 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
299 return names
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
300
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
301 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
302 self.timelines[:] = []
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
303
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
304 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
305 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
306 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
307
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
308 comp_node = self.node
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
309 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
310 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
311 tl = Timeline(child)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
312 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
313 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
314 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
315 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
316 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
317
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
318 ## \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
319 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
320 def parse_states(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
321 comp_node = self.node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
322 assert (not comp_node) or comp_node.name() == 'ns0:component'
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
323
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
324 states_nodes = [node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
325 for node in comp_node.childList()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
326 if node.name() == 'ns0:states']
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
327 if not states_nodes:
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
328 self.fsm_states = {}
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
329 return
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
330 states_node = states_nodes[0]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
331
1465
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
332 try:
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
333 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
334 except:
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
335 pass
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
336
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
337 state_nodes = [child
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
338 for child in states_node.childList
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
339 if child.name() == 'ns0:state']
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
340 states = [State.parse_state(node) for state_node in state_nodes]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
341 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
342
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
343 self.fsm_states_node = states_node
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
344 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
345
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
346 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
347 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
348 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
349 return tl
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
350 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
351 raise Value, 'invalid timeline name - %s' % (name)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
352
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
353 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
354 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
355 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
356 return True
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
357 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
358 return False
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
359
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
360 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
361 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
362 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
363 '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
364
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
365 doc = self._comp_mgr._doc
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
366 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
367
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
368 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
369 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
370 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
371 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
372
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
373 comp_node.appendChild(scenes_node)
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
374
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
375 tl = Timeline(scenes_node)
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
376 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
377 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
378
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
379 ## \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
380 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
381 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
382 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
383 name = tl.name()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
384 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
385 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
386 '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
387
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
388 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
389 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
390
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
391 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
392 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
393 if tl.name() == name:
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
394 comp_node = self.node
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
395 comp_node.removeChild(tl.scenes_node)
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
396
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
397 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
398 return
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 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
401
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
402 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
403 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
404 if tl.name() == timeline_name:
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
405 tl.rename(new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
406 return
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
407 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
408 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
409
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
410 def rename(self, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
411 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
412 pass
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
413
1465
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
414 def _create_states_node(self):
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
415 node = self.node
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
416 doc = self._comp_mgr._doc
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
417
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
418 states_node = doc.createElement('ns0:states')
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
419 node.addChild(states_node)
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
420 self.fsm_states_node = states_node
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
421 pass
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
422
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
423 def get_start_state_name(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
424 return self.fsm_start_state
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
425
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
426 def set_start_state(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
427 assert state_name in self.fsm_states
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
428 self.fsm_start_state = state_name
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
429 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
430
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
431 def all_state_names(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
432 return self.fsm_states.keys()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
433
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
434 def get_state(self, name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
435 return self.fsm_states[name]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
436
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
437 def add_state(self, name):
1465
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
438 if not self.fsm_states_node:
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
439 self._create_states_node()
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
440 pass
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
441
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
442 doc = self._comp_mgr._doc
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
443
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
444 state = State(name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
445 state.transitions = []
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
446 self.fsm_states[name] = state
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
447
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
448 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
449 states_node = self.fsm_states_node
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
450 states_node.addChild(state_node)
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
451 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
452
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
453 def rename_state(self, state_name, new_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
454 state = self.fsm_states[state_name]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
455 del self.fsm_states[state_name]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
456 self.fsm_states[new_name] = state
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
457
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
458 state.rename(new_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
459 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
460
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
461 def rm_state(self, name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
462 fsm_states = self.fsm_states
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
463 state = fsm_states[name]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
464 del self.fsm_states[name]
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
465
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
466 state_node = state.node
1465
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
467 states_node = self.fsm_states_node
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
468 states_node.removeChild(state_node)
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
469 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
470 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
471
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
472
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
473 ## \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
474 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
475 # 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
476 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
477 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
478 ## \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
479 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
480 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
481 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
482 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
483 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
484 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
485
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
486 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
487 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
488 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
489 break
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
490 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
491 else:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
492 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
493 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
494 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
495
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
496 ## \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
497 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
498 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
499 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
500 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
501 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
502
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
503 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
504 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
505 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
506 break
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
507 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
508 else:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
509 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
510 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
511 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
512 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
513
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
514
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
515 ## \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
516 #
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
517 # 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
518 # 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
519 # 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
520 # 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
521 # 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
522 # 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
523 # 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
524 # 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
525 # meaningful names.)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
526 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
527 # 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
528 # 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
529 # removed and normalized to normal components.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
530 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
531 @trait
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
532 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
533 _scenes_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
534 _metadata_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
535 _doc = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
536 _root = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
537 _layers = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
538 _layers_parent = require
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
539 _cur_comp = require
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
540 new_id = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
541 get_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
542 reset = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
543
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
544 def __init__(self):
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
545 super(component_manager, self).__init__()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
546 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
547 self._components = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
548 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
549 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
550 self._cur_timeline = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
551 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
552 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
553
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
554 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
555 comp = Component(self, None)
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
556 comp.layers = self._layers
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
557 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
558 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
559 comp.timelines = [timeline]
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
560
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
561 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
562 self._comp_names.add('main')
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
563
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
564 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
565 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
566
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
567 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
568 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
569 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
570 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
571 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
572 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
573 continue
1428
43369f3314d8 Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents: 1427
diff changeset
574
43369f3314d8 Fix the issue of loading components from SVG.
Thinker K.F. Li <thinker@codemud.net>
parents: 1427
diff changeset
575 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
576 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
577 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
578
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
579 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
580 comp.parse_timelines()
1465
a3ce8d22d163 Parse states while parsing a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1463
diff changeset
581 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
582
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
583 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
584
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
585 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
586 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
587 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
588
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
589 ## \brief To initialize subtree of metadata.
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
590 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
591 # 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
592 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
593 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
594 metadata_node = self._metadata_node
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
595
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
596 # Make sure ns0:components in metadata
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
597 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
598 if n.name() == 'ns0:components':
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
599 self._components_node = n
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
600 break
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
601 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
602 else:
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
603 components_node = \
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
604 self._doc.createElement("ns0:components")
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
605 metadata_node.appendChild(components_node)
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
606 self._components_node = components_node
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
607 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
608
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
609 # 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
610 for n in self._root.childList():
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
611 if n.name() != 'svg:g':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
612 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
613 try:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
614 nlabel = n.getAttribute('inkscape:label')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
615 except:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
616 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
617 if nlabel == 'components':
1427
5b69baa49a8b Abandon head #6fa411fd9549
Thinker K.F. Li <thinker@codemud.net>
parents: 1419
diff changeset
618 self._components_group = n
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
619 break
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
620 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
621 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
622 components_group = self._doc.createElement('svg:g')
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
623 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
624 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
625 components_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
626
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
627 self._root.appendChild(components_group)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
628 self._components_group = components_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
629 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
630 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
631
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
632 def _start_component_manager(self):
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
633 self._component_manager_init_metadata()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
634 self._set_main_component()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
635 self._parse_components()
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
636
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
637 self._cur_comp = self._main_comp
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
638 tl = self._main_comp.get_timeline('default')
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
639 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
640 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
641 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
642
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
643 ## \brief Create component group
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
644 #
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
645 # 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
646 # 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
647 #
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
648 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
649 doc = self._doc
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
650 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
651 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
652 group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
653
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
654 self._components_group.appendChild(group)
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
655
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
656 # Create layers group
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
657 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
658 gid = self.new_id()
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
659 layers_group.setAttribute('id', gid)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
660 layers_group.setAttribute('inkscape:label', 'layers')
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
661 group.appendChild(layers_group)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
662
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
663 return group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
664
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
665 ## \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
666 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
667 # \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
668 # \param comp_group_id is the component group.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
669 # \return a ns0:component node.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
670 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
671 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
672 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
673 comp_id = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
674 comp_node.setAttribute('id', comp_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
675 comp_node.setAttribute('name', comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
676 comp_node.setAttribute('ref', comp_group_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
677 self._components_node.appendChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
678 return comp_node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
679
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
680 ## \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
681 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
682 def _get_component(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
683 if comp_name in self._comp_names:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
684 for comp in self._components:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
685 if comp.name() == comp_name:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
686 return comp
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
687 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
688 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
689 raise ValueError, 'can not find component node - %s' % (comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
690
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
691 ## \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
692 #
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
693 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
694 doc = self._doc
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
695 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
696
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
697 layer_group = doc.createElement('svg:g')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
698 layer_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
699 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
700 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
701 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
702
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
703 return layer_group
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
704
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
705 ## \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
706 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
707 # 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
708 # component.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
709 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
710 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
711 comp = self._get_component(comp_name)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
712 layer = comp.layers[layer_idx]
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
713 return layer.group
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
714
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
715 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
716 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
717 return self._root
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
718
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
719 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
720 layers_group = comp_group.firstChild()
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
721 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
722
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
723 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
724
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
725 def all_comp_names(self):
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
726 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
727
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
728 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
729 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
730
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
731 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
732 if comp_name == 'main':
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
733 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
734 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
735 group = layer.group
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
736 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
737 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
738 return
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
739
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
740 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
741 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
742 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
743
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
744 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
745 if comp_name == 'main':
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
746 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
747 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
748 group = layer.group
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
749 group.setAttribute('style', '')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
750 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
751 return
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
752
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
753 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
754 comp_group.setAttribute('style', '')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
755 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
756
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
757 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
758 old_comp = self._cur_comp
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
759
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
760 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
761 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
762 self._layers = comp.layers
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
763 comp_name = self._cur_comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
764 # for domview
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
765 self._layers_parent = \
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
766 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
767
1430
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
768 self.make_sure_timeline()
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
769
1419
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
770 try:
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
771 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
772 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
773 except ValueError:
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
774 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
775 pass
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
776
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
777 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
778 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
779 pass
3519f43da037 Check old component before hiding it for a component switching.
Thinker K.F. Li <thinker@codemud.net>
parents: 1418
diff changeset
780
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
781 self.show_component(comp.name())
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
782 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
783
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
784 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
785 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
786 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
787 '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
788
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
789 comp_group = self._create_component_group()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
790 comp_group_id = comp_group.getAttribute('id')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
791 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
792
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
793 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
794 comp.parse_timelines()
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
795
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
796 self._components.append(comp)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
797 self._comp_names.add(comp_name)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
798
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
799 # 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
800 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
801 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
802 layer = Layer(layer_group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
803 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
804
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
805 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
806 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
807
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
808 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
809 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
810 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
811 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
812 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
813 '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
814
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
815 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
816 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
817 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
818
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
819 def rm_component(self, comp_name):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
820 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
821 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
822 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
823 comp_group = self.get_component_group(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
824
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
825 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
826 self._comp_names.remove(comp_name)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
827 self._components_node.removeChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
828 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
829 pass
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
830
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
831 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
832 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
833 comp.rename(new_name)
1459
8eecaca2a125 Fix bug when renaming component
Thinker K.F. Li <thinker@codemud.net>
parents: 1432
diff changeset
834 self._comp_names.remove(comp_name)
8eecaca2a125 Fix bug when renaming component
Thinker K.F. Li <thinker@codemud.net>
parents: 1432
diff changeset
835 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
836 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
837
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
838 def get_component_group(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
839 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
840
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
841 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
842 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
843 return self._root
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
844
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
845 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
846 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
847 comp_group = self.get_node(gid)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
848 return comp_group
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
849
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
850 def get_current_component(self):
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
851 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
852
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
853 ## \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
854 #
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
855 # 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
856 #
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
857 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
858 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
859 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
860 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
861 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
862 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
863 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
864 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
865 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
866 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
867 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
868
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
869 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
870 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
871 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
872 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
873
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
874 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
875 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
876 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
877
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
878 # 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
879 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
880
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
881 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
882 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
883 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
884 pass
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
885
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
886 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
887 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
888 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
889 try:
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
890 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
891 except KeyError:
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
892 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
893 pass
bf405cb2d7cb Switch to latest timeline when switching back to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1429
diff changeset
894 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
895 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
896 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
897
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
898 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
899 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
900 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
901
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
902 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
903 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
904 pass
1306
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
905
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
906 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
907 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
908 comp.rename_timeline(timeline_name, new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
909 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
910
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
911 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
912 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
913 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
914 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
915
1306
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
916 def all_timeline_names(self):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
917 r = self._cur_comp.all_timeline_names()
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
918 return r
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
919
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
920 def has_timeline(self, name):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
921 r = self._cur_comp.has_timeline(name)
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
922 return r
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
923
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
924 def get_current_timeline(self):
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
925 return self._cur_timeline.name()
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
926
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
927 ## \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
928 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
929 # 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
930 # specified component.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
931 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
932 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
933 group_parent = group.parent()
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
934 if group_parent:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
935 group_parent.removeChild(group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
936 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
937
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
938 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
939 layer_group.appendChild(group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
940 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
941
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
942 ## \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
943 #
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
944 # \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
945 # \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
946 #
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
947 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
948 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
949
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
950 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
951 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
952 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
953 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
954 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
955 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
956
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
957 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
958
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
959 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
960
1432
8e8c9ab3818f Add documentation
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
961 ## \brief Remember current frame and layer on the scenes node.
8e8c9ab3818f Add documentation
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
962 #
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
963 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
964 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
965 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
966 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
967 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
968
60f2c9a24cdb Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1430
diff changeset
969 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
970 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
971 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
972 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
973 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
974 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
975
1432
8e8c9ab3818f Add documentation
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
976 ## \brief Get current frame and layer from the scenes node.
8e8c9ab3818f Add documentation
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
977 #
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
978 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
979 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
980 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
981 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
982 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
983 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
984 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
985 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
986 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
987 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
988 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
989 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
990 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
991 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
992 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
993 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
994 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
995 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
996
60f2c9a24cdb Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1430
diff changeset
997 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
998 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
999
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1000
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1001 ## \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
1002 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1003 @trait
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1004 class FSM_manager(object):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1005 _cur_comp = require
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1006
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1007 def __init__(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1008 super(FSM_manager, self).__init__()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1009 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1010
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1011 def all_state_names(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1012 return self._cur_comp.all_state_names()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1013
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1014 def get_start_state_name(self):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1015 return self._cur_comp.get_start_state_name()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1016
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1017 ## \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
1018 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1019 # 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
1020 #
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1021 def _get_state(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1022 return self._cur_comp.get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1023
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1024 def rm_state(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1025 self._cur_comp.rm_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1026 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1027
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1028 def add_state(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1029 self._cur_comp.add_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1030 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1031
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1032 def rename_state(self, state_name, new_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1033 self._cur_comp.rename_state(state_name, new_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1034 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1035
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1036 def set_start_state(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1037 self._cur_comp.set_start_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1038 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1039
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1040 def set_state_entry_action(self, state_name, entry_action):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1041 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1042 state.set_entry_action(entry_action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1043 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1044
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1045 def all_transitions(self, state_name):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1046 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1047 trn_names = state.all_transitions()
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1048 return trn_names
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1049
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1050 def add_transition(self, state_name, cond, target):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1051 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1052 state.add_transition(cond, target)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1053 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1054
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1055 def rm_transition(self, state_name, cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1056 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1057 state.rm_transition(cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1058 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1059
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1060 def change_transition_cond(self, state_name, old_cond, new_cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1061 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1062 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
1063 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1064
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1065 def get_transition(self, state_name, cond):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1066 state = self._get_state(state_name)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1067 trn = state.get_transition(cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1068
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1069 cond = trn.condition
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1070 target = trn.target
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1071 action = trn.action
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1072
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1073 return cond, target, action
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1074
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1075 def set_transition_action(self, state_name, cond, action):
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1076 trn = state.get_transition(state_name, cond)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1077 trn.set_action(action)
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1078 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1079 pass
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1080
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1081
1350
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1082 ## \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
1083 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1084 # 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
1085 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1086 @trait
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1087 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
1088 _root = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1089 _scenes_node = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1090 _id2node = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1091 _group2scene = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1092 current = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1093 _maxframe = require
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1094
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1095 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
1096 maxframe = 0
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1097 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
1098 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
1099 continue
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1100
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1101 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1102 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
1103 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
1104 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1105 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1106 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1107 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
1108 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
1109 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1110 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1111 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1112 return maxframe
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1113
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1114 ## \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
1115 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1116 # 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
1117 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1118 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
1119 self._id2node = {}
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1120 root = self._root
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1121 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
1122 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
1123 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1124 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1125
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1126 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
1127 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1128 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
1129 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1130 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1131 else:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1132 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
1133 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1134
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1135 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
1136 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
1137 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1138 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1139
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1140 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
1141 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
1142
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1143 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
1144 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1145 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
1146 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1147 end = start
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1148 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1149
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1150 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1151 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
1152 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
1153 scene_type = 'normal'
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1154 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1155 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1156 scene_type = 'normal'
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1157 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1158
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1159 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
1160
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1161 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
1162 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1163 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
1164 except:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1165 cur = 0
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1166 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1167 self.current = cur
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1168
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1169 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
1170 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
1171 continue
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1172
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1173 try:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1174 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
1175 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
1176 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
1177 continue
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1178
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1179 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
1180 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1181 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1182
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1183 ## \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
1184 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1185 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
1186 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
1187 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
1188 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
1189 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1190 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1191
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1192 ## \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
1193 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1194 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
1195 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
1196 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
1197 return value[-1]
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1198 return value
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1199
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1200 ## \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
1201 #
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1202 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
1203 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
1204
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1205 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
1206 while True:
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1207 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
1208 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
1209 return candidate
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1210 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1211 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1212 pass
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1213
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1214 ## \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
1215 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1216 # 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
1217 # 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
1218 @composite
1244
b241f9768833 Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents: 1243
diff changeset
1219 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
1220 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
1221
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1222 method_map_traits = {
17fa5d78200b Refactory domview_monitor to move code to scenes_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1348
diff changeset
1223 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
1224 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
1225 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
1226
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1227 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
1228 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
1229
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1230 self._maxframe = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1231 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
1232 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
1233 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1234
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1235 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
1236 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
1237 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
1238
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1239 doc = self._doc
1253
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1240 dom_event.addEventListener(doc, 'DOMNodeInserted',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1241 self._on_insert_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1242 dom_event.addEventListener(doc, 'DOMNodeRemoved',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1243 self._on_remove_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1244 dom_event.addEventListener(doc, 'DOMAttrModified',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
1245 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
1246 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1247
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1248 ## \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
1249 #
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1250 # 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
1251 # 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
1252 # 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
1253 # 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
1254 # 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
1255 # ID.
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1256 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
1257 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
1258 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
1259 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
1260 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
1261 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1262 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
1263 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1264 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1265 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
1266 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1267 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1268
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1269 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
1270 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
1271 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
1272
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1273 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
1274 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
1275 value.remove(node)
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1276 if not value:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1277 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
1278 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1279 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1280 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1281 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
1282 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1283 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1284
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1285 ## \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
1286 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1287 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
1288 self._maxframe = 0
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1289 self._id2node = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1290 self._group2scene = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1291
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1292 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
1293 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
1294 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
1295
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1296 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
1297 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
1298 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
1299 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1300
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1301 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1302 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
1303 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1304 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1305 else:
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1306 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
1307 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1308
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1309 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
1310 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1311 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
1312 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1313 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1314 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1315 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
1316 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
1317 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1318 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1319
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1320 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1321 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
1322 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
1323 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1324 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1325 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1326 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
1327 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
1328 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1329 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1330 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
1331 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1332
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1333 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
1334 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
1335 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
1336 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1337
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1338 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1339 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
1340 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1341 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1342 else:
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
1343 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
1344 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1345
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1346 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
1347 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1348 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
1349 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1350 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1351 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1352 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
1353 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1354
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1355 try:
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1356 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
1357 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
1358 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
1359 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1360 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1361 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1362 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1363 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1364
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1365 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
1366 if old_value == new_value:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1367 return
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1368
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1369 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
1370 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
1371 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
1372 pass
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
1373 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
1374 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
1375 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1376 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1377 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
1378 parent_node = node.parent()
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1379 scenes_node = self._scenes_node
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1380 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
1381 return # not in current timeline
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1382
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1383 if old_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1384 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
1385 # 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
1386 # wrapper.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1387 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
1388 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1389 if new_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1390 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
1391 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1392 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1393 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
1394 parent_node = node.parent()
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1395 scenes_node = self._scenes_node
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1396 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
1397 return # not in current timeline
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
1398
1276
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1399 try:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1400 new_value = int(new_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1401 old_value = int(old_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1402 except TypeError:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1403 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
1404 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1405 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
1406 # _maxframe may be reduced.
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1407 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
1408 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1409 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
1410 pass
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
1411 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1412 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1413 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1414 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1415
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1416
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1417 ## \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
1418 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1419 def _DOM_iterator(node):
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1420 nodes = [node]
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1421 while nodes:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1422 node = nodes.pop(0)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1423 child = node.firstChild()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1424 while child:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1425 nodes.append(child)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1426 child = child.next()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1427 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1428 yield node
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1429 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1430 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1431
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1432
1352
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1433 @trait
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1434 class layers_parser(object):
1356
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1435 _doc = require
1352
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1436 _layers = require
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1437 _layers_parent = require
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1438 get_scene = require
1356
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1439 get_node = require
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1440 new_id = require
1352
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1441
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1442 def parse_all_layers(self):
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1443 layers = self._layers
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1444 layers_parent = self._layers_parent
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1445
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1446 for child in layers_parent.childList():
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1447 if child.name() != 'svg:g':
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1448 continue
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1449
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1450 try:
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1451 label = child.getAttribute('inkscape:label')
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1452 except:
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1453 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1454 else: # has no label
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1455 if label == 'components':
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1456 continue
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1457 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1458
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1459 layer_group = child
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1460 layer = Layer(layer_group)
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1461 layer.idx = len(layers)
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1462 layers.append(layer)
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1463 self.parse_layer(layer.idx)
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1464 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1465 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1466
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1467 def parse_layer(self, layer_idx):
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1468 layer = self._layers[layer_idx]
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1469 layer_group = layer.group
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1470
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1471 for child in layer_group.childList():
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1472 if child.name() != 'svg:g':
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1473 continue
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1474 try:
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1475 child_id = child.getAttribute('id')
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1476 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
1477 except:
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1478 continue
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1479
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1480 layer.scenes.append(scene_node)
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1481 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1482 pass
1354
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1483
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1484 def get_layer_num(self):
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1485 return len(self._layers)
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1486
1356
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1487 ## \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
1488 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1489 # \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
1490 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1491 def insert_layer(self, layer_idx, layer_group):
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1492 layers = self._layers
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1493
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1494 layer = Layer(layer_group)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1495 if layer_idx >= len(layers):
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1496 layers.append(layer)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1497 else:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1498 layers.insert(layer_idx, layer)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1499 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
1500 layers[idx].idx = idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1501 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1502 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1503 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1504
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1505 ## \brief Manage a existed layer group
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1506 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1507 # 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
1508 # proper place to insert it.
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1509 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1510 # \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
1511 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1512 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
1513 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
1514 new_layer = Layer(layer_group)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1515
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1516 if not self._layers:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1517 new_layer.idx = 0
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1518 self._layers.append(new_layer)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1519 return 0
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1520
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1521 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1522 # 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
1523 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1524 next_group = layer_group.next()
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1525 while next_group:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1526 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
1527
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1528 for vlayer in self._layers:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1529 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
1530 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
1531 # 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
1532 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
1533
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1534 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
1535 self._layers[idx].idx = idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1536 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1537 return new_layer.idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1538 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1539
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1540 next_group = next_group.next()
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1541 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1542
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1543 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1544 # 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
1545 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1546 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
1547 while tail_group:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1548 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
1549
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1550 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
1551 # it is after last layer group.
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1552 new_layer.idx = len(self._layers)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1553 self._layers.append(new_layer)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1554 return new_layer.idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1555
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1556 tail_group = tail_group.next()
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1557 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1558
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1559 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
1560
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1561 ## \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
1562 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1563 def rm_layer(self, layer_idx):
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1564 layers = self._layers
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1565
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1566 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1567 for scene_node in layer.scenes:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1568 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
1569 try:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1570 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
1571 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
1572 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
1573 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1574 except:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1575 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1576
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1577 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
1578 scene_node.parent().removeChild(scene_node)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1579 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1580 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1581
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1582 del layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1583
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1584 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
1585 layers[idx].idx = idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1586 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1587 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1588
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1589 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
1590 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1591 return layer.group
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1592
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1593 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
1594 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1595 return layer.scenes
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1596
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1597 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
1598 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1599 try:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1600 data = layer.data
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1601 except:
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1602 return None
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1603 return data
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1604
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1605 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
1606 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1607 layer.data = data
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1608 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1609
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1610 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
1611 layer = self._layers[layer_idx]
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1612
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1613 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
1614 gid = self.new_id()
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1615 dup_group.setAttribute('id', gid)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1616 dup_group.setAttribute('inkscape:label', 'dup')
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1617 dup_group.setAttribute('sodipodi:insensitive', '1')
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1618 dup_group.setAttribute('style', '')
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1619
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1620 layer.group.appendChild(dup_group)
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1621
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1622 return dup_group
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1623
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1624 ## \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
1625 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1626 # \return -1 for error.
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1627 #
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1628 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
1629 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
1630 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
1631 return layer_idx
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1632 pass
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1633 return -1
ac61d86987af Move more code to layers_parser
Thinker K.F. Li <thinker@codemud.net>
parents: 1354
diff changeset
1634
1354
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1635 def reset_layers(self):
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1636 self._layers[:] = []
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1637 self.parse_all_layers()
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1638 pass
1352
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1639 pass
9164a0782ba7 Refactory layer_parser out from domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1350
diff changeset
1640
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1641 ## \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
1642 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1643 # 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
1644 # 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
1645 # 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
1646 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
1647 @composite
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
1648 class domview(domview_monitor):
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1649 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
1650
1348
22a79dcbaec6 Change structure of provide_traits and method_map_traits
Thinker K.F. Li <thinker@codemud.net>
parents: 1345
diff changeset
1651 method_map_traits = {component_manager._start_component_manager:
22a79dcbaec6 Change structure of provide_traits and method_map_traits
Thinker K.F. Li <thinker@codemud.net>
parents: 1345
diff changeset
1652 '_start_component_manager'}
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
1653
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1654 # 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
1655 _doc = None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1656 _root = None
1463
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1657 # Required by component_manager and FSM_manager
5ff744b981fb FSM manager and data types
Thinker K.F. Li <thinker@codemud.net>
parents: 1459
diff changeset
1658 _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
1659
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1660 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
1661 super(domview, self).__init__()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1662 self._metadata_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1663 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1664 # Following two variables would be changed by class
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1665 # component_manager to switch components and timelines.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1666 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1667 self._scenes_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1668 self._layers_parent = None
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1669 self._layers = []
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1670 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1671
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1672 ## \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
1673 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1674 def _init_metadata(self):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1675 self._layers_parent = self._root
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1676
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1677 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
1678 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
1679 break
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1680 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1681 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1682 raise RuntimeError, \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1683 '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
1684
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1685 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
1686
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1687 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
1688 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
1689 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
1690 break
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1691 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1692 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1693 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
1694 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
1695 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
1696 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
1697 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
1698 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
1699 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
1700 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
1701 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1702 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1703
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1704 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
1705 self._doc = doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1706 self._root = root
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1707
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1708 self._init_metadata()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1709 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
1710 self._start_component_manager()
1354
f92be354ad24 Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents: 1352
diff changeset
1711 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
1712 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
1713
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
1714 def reset(self):
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1715 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
1716 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
1717 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1718
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1719 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
1720 s = ""
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1721 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
1722 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
1723 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1724 return s
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1725
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1726 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
1727 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
1728 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
1729 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
1730 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1731 print " " * l * 2,"/>"
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1732 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1733
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1734 ## \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
1735 #
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1736 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
1737 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
1738 ref=None):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1739 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
1740 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
1741 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1742
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1743 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
1744 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
1745 if start != end:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1746 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
1747 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1748 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
1749 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
1750 if ref:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1751 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
1752 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1753
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1754 scenes_node.appendChild(scene_node)
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1755
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1756 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
1757
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1758 return scene_node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1759
1262
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1760 ## \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
1761 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1762 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
1763 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
1764 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1765
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1766 ## \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
1767 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1768 # 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
1769 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
1770 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
1771 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
1772 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
1773 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1774 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
1775 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
1776 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1777 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
1778 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
1779 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1780 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
1781 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
1782 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1783 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1784
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1785 ## \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
1786 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1787 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
1788 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
1789 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
1790
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1791 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
1792 for layer in self._layers:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1793 try:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1794 layer.scenes.remove(scene_node)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1795 except ValueError: # not in the list
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1796 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1797 else:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1798 break
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1799 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1800 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1801
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1802 ## \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
1803 #
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1804 # 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
1805 # 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
1806 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1807 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
1808 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
1809 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1810 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
1811 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
1812 # Inkscape.
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1813 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
1814 pass
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1815 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1816 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1817
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1818 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1819 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
1820 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1821 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1822 pass
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 ## \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
1825 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1826 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
1827 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
1828 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1829
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1830 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
1831 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
1832 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
1833 scene_group.setAttribute("inkscape:groupmode", "layer")
1299
6949e2b6cae2 Add unlink clone checker.
Thinker K.F. Li <thinker@codemud.net>
parents: 1298
diff changeset
1834 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
1835
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1836 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
1837
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1838 return scene_group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1839
1259
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1840 ## \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
1841 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1842 # \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
1843 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1844 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
1845 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
1846 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
1847 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
1848 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
1849 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
1850 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1851 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1852 return -1, None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1853
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1854 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
1855 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
1856 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
1857 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
1858 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
1859 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
1860 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1861 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
1862 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
1863 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1864 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1865 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1866
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
1867 ## \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
1868 #
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
1869 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
1870 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
1871 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
1872
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1873 ## \brief Remove frames
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1874 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1875 # - 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
1876 # - 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
1877 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1878 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
1879 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
1880
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1881 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
1882 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
1883 start, end, tween_type = \
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
1884 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
1885
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1886 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
1887 continue
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1888
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1889 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
1890 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
1891 start=(start - num),
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1892 end=(end - num))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1893 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
1894 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
1895 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1896 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1897 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1898
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1899 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
1900 return self._maxframe
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1901
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1902 ## \brief Copy children of a group.
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1903 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1904 # 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
1905 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1906 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
1907 # Search for the duplicated group
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1908 doc = self._doc
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1909
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1910 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
1911
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1912 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
1913 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
1914 new_gids = set()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1915 for old_node in old_nodes:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1916 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
1917 new_node = new_nodes.next()
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1918 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
1919
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1920 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1921 # 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
1922 # 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
1923 # 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
1924 # 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
1925 # 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
1926 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1927 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1928 while gid in new_gids:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1929 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1930 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1931 new_gids.add(gid)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1932 new_node.setAttribute('id', gid)
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1933 pass
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1934
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1935 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
1936 dup_group.removeChild(child) # prevent from crash
1298
2a5da457474d Fix typo
Thinker K.F. Li <thinker@codemud.net>
parents: 1295
diff changeset
1937 dst_group.appendChild(child)
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1938 pass
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1939 pass
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1940
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1941 ## \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
1942 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1943 # 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
1944 # and append nodes to the desitnate group.
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1945 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1946 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
1947 doc = self._doc
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1948
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1949 for src_child in src_group.childList():
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1950 src_child_id = src_child.getAttribute('id')
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1951 dst_child_id = self.new_id()
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1952
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1953 dst_child = doc.createElement('svg:use')
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1954 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
1955 dst_child.setAttribute('xlink:href', '#' + src_child_id)
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1956 dst_child.setAttribute('ns0:duplicate-src', src_child_id)
1295
71118bff7d61 CHange the wrong append to appendCHild
wycc
parents: 1294
diff changeset
1957 dst_group.appendChild(dst_child)
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1958 pass
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1959 pass
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1960
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1961 ## \brief To test a graphic node.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1962 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1963 # 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
1964 # 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
1965 # scene group.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1966 def is_graph_node(self, node):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1967 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1968 mode = node.getAttribute('inkscape:groupmode')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1969 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1970 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1971 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1972 if mode == 'layer':
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1973 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1974 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1975
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1976 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1977 label = node.geteAttribute('inkscape:label')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1978 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1979 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1980 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1981 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1982
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1983 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1984 scene_group = node.geteAttribute('scene_group')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1985 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1986 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1987 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1988 if scene_group == 'true':
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1989 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1990 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1991
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1992 return True
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1993 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1994