annotate pyink/domview.py @ 1315:fcff6978f9bf

User can switch components. - component_manager will change domview._scenes_node and domview._layers_parent for switching component and timeline. - domview relys on domview._scenes_node and domview._layers_parent to find scene nodes and layers.
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 22 Jan 2011 14:23:42 +0800
parents 85d04ba11146
children 9ab8d50dcf7e
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
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
4
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
5
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
6 class Layer:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
7 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
8 self.scenes = []
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
9 self.group = node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
10 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
11 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
12
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
13
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
14 class Timeline(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
15 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
16 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
17 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
18
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
19 def name(self):
1308
49775feefbcf Show components and timelines in comp_dock
Thinker K.F. Li <thinker@codemud.net>
parents: 1306
diff changeset
20 name = self.scenes_node.getAttribute('name')
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
21 return name
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
22 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
23
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
24
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
25 class Component(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
26 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
27 # \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
28 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
29 def __init__(self, comp_mgr, comp_node):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
30 self._comp_mgr = comp_mgr
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
31 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
32 self.layers = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
33 self.timelines = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
34
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
35 if comp_node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
36 self._initialize_comp()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
37 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
38 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
39
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
40 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
41 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
42 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
43 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
44 break
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
45 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
46 else: # no any ns0:scenes
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
47 doc = self._comp_mgr._doc
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
48 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
49 scenes_node.setAttribute('name', 'default')
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
50
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
51 node_id = self._comp_mgr.new_id()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
52 scenes_node.setAttribute('id', node_id)
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
53
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
54 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
55 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
56 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
57
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
58 def name(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
59 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
60 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
61 else:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
62 name = 'main'
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
63 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
64 return name
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
65
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
66 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
67 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
68 return names
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
69
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
70 def parse_timelines(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
71 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
72 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
73 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
74
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
75 comp_node = self.node
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
76 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
77 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
78 tl = Timeline(child)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
79 self.timelines.append(tl)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
80 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
81 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
82 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
83
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
84 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
85 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
86 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
87 return tl
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
88 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
89 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
90
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
91 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
92 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
93 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
94 return True
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
95 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
96 return False
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
97
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
98 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
99 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
100 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
101 '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
102
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
103 doc = self._comp_mgr._doc
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
104 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
105
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
106 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
107 scenes_node.setAttribute('name', name)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
108 node_id = self._comp_mgr.new_id()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
109 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
110
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
111 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
112 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
113
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
114 ## \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
115 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
116 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
117 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
118 name = tl.name()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
119 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
120 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
121 'name of scenes node of a timeline is duplicated'
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
122 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
123
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
124 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
125 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
126 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
127 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
128 return
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
129 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
130 raise ValueError, 'try to remove a non-existed timeline - %s' % (name)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
131 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
132
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
133
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
134 ## \brief A mix-in for class domview for management of components.
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
135 #
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
136 # 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
137 # 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
138 # 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
139 # 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
140 # 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
141 # 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
142 # 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
143 # 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
144 # meaningful names.)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
145 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
146 # 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
147 # 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
148 # removed and normalized to normal components.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
149 #
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
150 class component_manager(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
151 def __init__(self):
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
152 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
153 self._components = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
154 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
155 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
156 self._cur_comp = None
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
157 self._cur_timeline = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
158 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
159 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
160
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
161 def _set_main_component(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
162 comp = Component(self, None)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
163 comp.layers = self._layers
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
164 scenes_node = self._scenes_node
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
165 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
166 comp.timelines = [timeline]
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
167
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
168 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
169 self._comp_names.add('main')
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
170
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
171 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
172 self._cur_comp = comp
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
173 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
174
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
175 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
176 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
177 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
178 for child in components_node.childList():
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
179 child_name = child.name()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
180 if child_name != 'ns0:component':
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
181 continue
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
182 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
183 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
184
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
185 comp = Component(self, child)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
186 comp.parse_timelines()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
187
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
188 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
189 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
190 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
191 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
192
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
193 ## \brief To initialize subtree of metadata.
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
194 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
195 # 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
196 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
197 def _component_manager_init_metadata(self):
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
198 for n in self._metadata_node.childList():
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
199 if n.name() == 'ns0:components':
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
200 self._components_node = n
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
201 break
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
202 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
203 else:
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
204 components_node = self._doc.createElement("ns0:components")
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
205 node.appendChild(components_node)
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
206 self._components_node = components_node
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
207 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
208
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
209 for n in self._root.childList():
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
210 if n.name() != 'svg:g':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
211 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
212 try:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
213 nlabel = n.getAttribute('inkscape:label')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
214 except:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
215 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
216 if nlabel == 'components':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
217 self._components_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
218 break
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
219 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
220 else: # no components group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
221 components_group = self._doc.createElement('svg:g')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
222 components_group.setAttribute('inkscape:label', 'components')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
223 gid = self.new_id()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
224 components_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
225
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
226 self._root.appendChild(components_group)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
227 self._components_group = components_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
228 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
229 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
230
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
231 def _start_component_manager(self):
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
232 self._component_manager_init_metadata()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
233 self._set_main_component()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
234 self._parse_components()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
235 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
236
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
237 def _create_component_group(self):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
238 doc = self._doc
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
239 group = doc.createElement('svg:g')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
240 gid = self.new_id()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
241 group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
242 group.setAttribute('component_group', 'true')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
243
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
244 self._components_group.appendChild(group)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
245 return group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
246
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
247 ## \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
248 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
249 # \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
250 # \param comp_group_id is the component group.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
251 # \return a ns0:component node.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
252 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
253 def _create_component_node(self, comp_name, comp_group_id):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
254 comp_node = self._doc.createElement('ns0:component')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
255 comp_id = self.new_id()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
256 comp_node.setAttribute('id', comp_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
257 comp_node.setAttribute('name', comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
258 comp_node.setAttribute('ref', comp_group_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
259 self._components_node.appendChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
260 return comp_node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
261
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
262 ## \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
263 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
264 def _get_component(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
265 if comp_name in self._comp_names:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
266 for comp in self._components:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
267 if comp.name() == comp_name:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
268 return comp
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
269 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
270 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
271 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
272
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
273 ## \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
274 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
275 def _create_comp_layer_group(self, comp_group, layer_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
276 doc = self._doc
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
277 gid = self.new_id()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
278
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
279 layer_group = doc.createElement('svg:g')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
280 layer_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
281 layer_group.setAttribute('inkscape:label', layer_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
282 comp_group.appendChild(layer_group)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
283 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
284
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
285 def all_comp_names(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
286 return list(self._comp_names)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
287
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
288 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
289 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
290
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
291 def switch_component(self, comp_name):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
292 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
293 self._cur_comp = comp
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
294 self._layers = comp.layers
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
295 comp_name = self._cur_comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
296 # for domview
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
297 self._layers_parent = self.get_component_group(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
298
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
299 first_name = comp.all_timeline_names()[0]
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
300 self.switch_timeline(first_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
301 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
302
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
303 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
304 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
305 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
306 'try add a component with existed name %s' % (comp_name)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
307
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
308 comp_group = self._create_component_group()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
309 comp_group_id = comp_group.getAttribute('id')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
310 comp_node = self._create_component_node(comp_name, comp_group_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
311
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
312 self._create_comp_layer_group(comp_group, comp_name + ' Layer1')
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
313
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
314 comp = Component(self, comp_node)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
315 comp.parse_timelines()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
316
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
317 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
318 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
319 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
320
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
321 def add_component_node(self, comp_node):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
322 comp = Component(self, comp_node)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
323 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
324 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
325 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
326 '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
327
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
328 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
329 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
330 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
331
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
332 def rm_component(self, comp_name):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
333 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
334 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
335 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
336 comp_group = self.get_component_group(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
337
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
338 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
339 self._comp_names.remove(comp_name)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
340 self._components_node.removeChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
341 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
342 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
343
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
344 def get_component_group(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
345 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
346
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
347 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
348 if comp_name == 'main':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
349 return self._root
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
350
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
351 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
352 gid = comp_node.getAttribute('ref')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
353 comp_group = self.get_node(gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
354 return comp_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
355
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
356 def switch_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
357 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
358 self._cur_timeline = tl
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
359 self._scenes_node = tl.scenes_node # of class domview
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
360
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
361 # Make domview to rescan layers and scenes.
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
362 self.reset() # from domview
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
363 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
364
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
365 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
366 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
367 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
368
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
369 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
370 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
371 pass
1306
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
372
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
373 def all_timeline_names(self):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
374 r = self._cur_comp.all_timeline_names()
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
375 return r
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
376
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
377 def has_timeline(self, name):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
378 r = self._cur_comp.has_timeline(name)
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
379 return r
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
380 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
381
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
382
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
383 ## \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
384 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
385 # 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
386 # node and scene group ID to scene node.
1244
b241f9768833 Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents: 1243
diff changeset
387 class domview_monitor(object):
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
388 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
389 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
390
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
391 self._maxframe = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
392 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
393 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
394 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
395
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
396 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
397 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
398 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
399
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
400 doc = self._doc
1253
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
401 dom_event.addEventListener(doc, 'DOMNodeInserted',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
402 self._on_insert_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
403 dom_event.addEventListener(doc, 'DOMNodeRemoved',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
404 self._on_remove_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
405 dom_event.addEventListener(doc, 'DOMAttrModified',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
406 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
407 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
408
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
409 ## \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
410 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
411 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
412 self._maxframe = 0
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
413 self._id2node = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
414 self._group2scene = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
415
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
416 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
417 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
418 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
419
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
420 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
421 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
422 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
423 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
424
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
425 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
426 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
427 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
428 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
429 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
430 if child_id not in self._id2node:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
431 self._id2node[child_id] = child
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
432 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
433 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
434
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
435 if child.name() == 'ns0:scene':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
436 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
437 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
438 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
439 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
440 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
441 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
442 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
443 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
444 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
445
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
446 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
447 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
448 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
449 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
450 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
451 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
452 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
453 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
454 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
455 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
456 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
457 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
458
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
459 def _find_maxframe(self, scenes_node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
460 maxframe = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
461 for child in scenes_node.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
462 if child.name() != 'ns0:scene':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
463 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
464
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
465 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
466 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
467 maxframe = max(int(start), maxframe)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
468 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
469 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
470 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
471 end = child.getAttribute('end')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
472 maxframe = max(int(end), maxframe)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
473 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
474 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
475 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
476 return maxframe
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
477
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
478 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
479 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
480 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
481 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
482
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
483 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
484 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
485 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
486 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
487 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
488 if child_id not in self._id2node:
1269
97302d2a0a1d Raise an error for the error.
Thinker K.F. Li <thinker@codemud.net>
parents: 1265
diff changeset
489 raise ValueError, \
97302d2a0a1d Raise an error for the error.
Thinker K.F. Li <thinker@codemud.net>
parents: 1265
diff changeset
490 'remove a node that is never known (%s)' % (child_id)
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
491 del self._id2node[child_id]
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
492 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
493
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
494 if child.name() == 'ns0:scene':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
495 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
496 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
497 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
498 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
499 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
500 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
501 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
502
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
503 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
504 if node.name() == 'ns0:scenes' and \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
505 (int(child.getAttribute('start')) == self._maxframe or
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
506 int(child.getAttribute('end')) == self._maxframe):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
507 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
508 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
509 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
510 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
511 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
512 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
513
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
514 def _on_attr_modified(self, node, name, old_value, new_value):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
515 if name == 'id' and old_value != new_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
516 if old_value and (old_value not in self._id2node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
517 raise ValueError, \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
518 'old ID value of passed node is invalid one (%s)' % \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
519 (old_value)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
520 if (new_value in self._id2node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
521 raise ValueError, \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
522 'new ID value of passed node is invalid one (%s)' % \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
523 (new_value)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
524
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
525 if old_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
526 del self._id2node[old_value]
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
527 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
528 self._id2node[new_value] = node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
529 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
530 elif name == 'ref' and node.name() == 'ns0:scene':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
531 if old_value == new_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
532 return
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
533 if old_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
534 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
535 # 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
536 # wrapper.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
537 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
538 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
539 if new_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
540 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
541 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
542 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
543 elif (name in ('start', 'end')) and node.name() == 'ns0:scene':
1276
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
544 try:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
545 new_value = int(new_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
546 old_value = int(old_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
547 except TypeError:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
548 scenes_node = node.parent()
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
549 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
550 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
551 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
552 # _maxframe may be reduced.
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
553 scenes_node = node.parent()
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
554 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
555 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
556 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
557 pass
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
558 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
559 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
560 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
561
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
562 ## \brief Collect ID of nodes in the document.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
563 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
564 # It is used to implement a fast mapping from an ID to the respective node.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
565 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
566 def _collect_node_ids(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
567 self._id2node = {}
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
568 root = self._root
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
569 for n in root.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
570 self._collect_node_ids_recursive(n)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
571 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
572 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
573
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
574 def _collect_node_ids_recursive(self, node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
575 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
576 node_id = node.getAttribute('id')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
577 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
578 return
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
579
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
580 self._id2node[node_id] = node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
581 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
582 self._collect_node_ids_recursive(n)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
583 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
584 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
585
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
586 def parse_one_scene(self, scene_node):
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
587 assert scene_node.name() == 'ns0:scene'
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
588
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
589 start = int(scene_node.getAttribute("start"))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
590 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
591 end = int(scene_node.getAttribute("end"))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
592 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
593 end = start
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
594 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
595
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
596 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
597 scene_type = scene_node.getAttribute('type')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
598 if scene_type == None:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
599 scene_type = 'normal'
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
600 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
601 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
602 scene_type = 'normal'
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
603 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
604
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
605 return start, end, scene_type
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
606
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
607 def _parse_one_scenes(self, scenes_node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
608 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
609 cur = int(n.getAttribute("current"))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
610 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
611 cur = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
612 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
613 self.current = cur
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
614
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
615 for scene_node in scenes_node.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
616 if scene_node.name() != 'ns0:scene':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
617 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
618
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
619 try:
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
620 start, end, scene_type = self.parse_one_scene(scene_node)
1285
e2d2532c3115 Replace a workaround with a more semantic one.
Thinker K.F. Li <thinker@codemud.net>
parents: 1284
diff changeset
621 group_id = scene_node.getAttribute("ref")
e2d2532c3115 Replace a workaround with a more semantic one.
Thinker K.F. Li <thinker@codemud.net>
parents: 1284
diff changeset
622 except: # the scene node is incompleted.
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
623 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
624
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
625 self._group2scene[group_id] = scene_node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
626 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
627 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
628
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
629 ## \brief Parse all scenes node in svg:metadata subtree.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
630 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
631 def _collect_all_scenes(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
632 root = self._root
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
633 for child in root.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
634 if child.name() != 'svg:metadata':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
635 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
636
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
637 metadata_node = child
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
638 for metachild in metadata_node.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
639 if metachild.name() == 'ns0:scenes':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
640 self._parse_one_scenes(metachild)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
641 self._maxframe = self._find_maxframe(metachild)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
642 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
643 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
644 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
645 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
646
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
647 ## \brief Return the node with given ID.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
648 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
649 def get_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
650 return self._id2node[node_id]
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
651
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
652 ## \brief Return a scene node corresponding to a scene group of given ID.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
653 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
654 def get_scene(self, group_id):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
655 return self._group2scene[group_id]
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
656
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
657 def new_id(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
658 while True:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
659 candidate = 's%d' % int(random.random()*100000)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
660 if candidate not in self._id2node:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
661 return candidate
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
662 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
663 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
664 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
665
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
666
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
667 ## \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
668 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
669 def _DOM_iterator(node):
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
670 nodes = [node]
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
671 while nodes:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
672 node = nodes.pop(0)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
673 child = node.firstChild()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
674 while child:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
675 nodes.append(child)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
676 child = child.next()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
677 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
678 yield node
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
679 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
680 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
681
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
682
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
683 ## \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
684 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
685 # 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
686 # 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
687 # 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
688 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
689 class domview(domview_monitor, component_manager):
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
690 # 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
691 _doc = None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
692 _root = None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
693
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
694 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
695 super(domview, self).__init__()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
696 self._metadata_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
697 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
698 # Following two variables would be changed by class
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
699 # component_manager to switch components and timelines.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
700 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
701 self._scenes_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
702 self._layers_parent = None
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
703 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
704
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
705 ## \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
706 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
707 def _init_metadata(self):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
708 self._layers_parent = self._root
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
709
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
710 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
711 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
712 break
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
713 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
714 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
715 raise RuntimeError, \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
716 '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
717
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
718 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
719
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
720 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
721 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
722 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
723 break
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
724 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
725 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
726 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
727 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
728 scenes_node = self._doc.createElement("ns0:scenes")
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
729 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
730 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
731 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
732 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
733
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
734 def _parse_all_layers(self):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
735 root = 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
736 layers = self._layers
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
737 layers_parent = self._layers_parent
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
738
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
739 for child in layers_parent.childList():
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
740 if child.name() != 'svg:g':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
741 continue
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
742
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
743 try:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
744 label = child.getAttribute('inkscape:label')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
745 except:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
746 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
747 else: # has no label
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
748 if label == 'components':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
749 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
750 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
751
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
752 layer_group = child
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
753 layer = Layer(layer_group)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
754 layer.idx = len(layers)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
755 layers.append(layer)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
756 self.parse_layer(layer.idx)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
757 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
758 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
759
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
760 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
761 self._doc = doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
762 self._root = root
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
763 self._layers = []
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
764
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
765 self._init_metadata()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
766 self._start_monitor() # from domview_monitor
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
767 self._start_component_manager() # from component_manager
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
768 self._parse_all_layers()
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
769 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
770
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
771 def reset(self):
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
772 self._monitor_reparse() # from domview_monitor
1275
776b024ae8f9 Fix the buggy implementation of reset()
Thinker K.F. Li <thinker@codemud.net>
parents: 1274
diff changeset
773 self._layers = []
776b024ae8f9 Fix the buggy implementation of reset()
Thinker K.F. Li <thinker@codemud.net>
parents: 1274
diff changeset
774 self._parse_all_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
775 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
776
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
777 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
778 s = ""
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
779 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
780 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
781 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
782 return s
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
783
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
784 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
785 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
786 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
787 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
788 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
789 print " " * l * 2,"/>"
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
790 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
791
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
792 ## \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
793 #
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
794 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
795 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
796 ref=None):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
797 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
798 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
799 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
800
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
801 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
802 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
803 if start != end:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
804 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
805 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
806 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
807 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
808 if ref:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
809 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
810 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
811
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
812 scenes_node.appendChild(scene_node)
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
813
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
814 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
815
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
816 return scene_node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
817
1262
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
818 ## \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
819 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
820 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
821 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
822 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
823
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
824 ## \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
825 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
826 # 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
827 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
828 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
829 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
830 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
831 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
832 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
833 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
834 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
835 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
836 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
837 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
838 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
839 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
840 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
841 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
842
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
843 ## \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
844 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
845 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
846 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
847 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
848
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
849 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
850 for layer in self._layers:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
851 try:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
852 layer.scenes.remove(scene_node)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
853 except ValueError: # not in the list
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
854 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
855 else:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
856 break
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
857 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
858 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
859
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
860 ## \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
861 #
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
862 # 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
863 # 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
864 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
865 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
866 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
867 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
868 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
869 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
870 # Inkscape.
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
871 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
872 pass
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
873 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
874 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
875
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
876 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
877 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
878 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
879 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
880 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
881
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
882 ## \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
883 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
884 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
885 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
886 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
887
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
888 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
889 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
890 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
891 scene_group.setAttribute("inkscape:groupmode", "layer")
1299
6949e2b6cae2 Add unlink clone checker.
Thinker K.F. Li <thinker@codemud.net>
parents: 1298
diff changeset
892 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
893
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
894 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
895
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
896 return scene_group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
897
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
898 def parse_layer(self, layer_idx):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
899 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
900 layer_group = layer.group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
901
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
902 for child in layer_group.childList():
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
903 if child.name() != 'svg:g':
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
904 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
905 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
906 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
907 scene_node = self.get_scene(child_id)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
908 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
909 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
910
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
911 layer.scenes.append(scene_node)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
912 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
913 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
914
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
915 ## \brief Add/insert a layer at given position.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
916 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
917 # \param layer_idx is the position in the layer list.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
918 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
919 def insert_layer(self, layer_idx, layer_group):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
920 layers = self._layers
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
921
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
922 layer = Layer(layer_group)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
923 if layer_idx >= len(layers):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
924 layers.append(layer)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
925 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
926 layers.insert(layer_idx, layer)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
927 for idx in range(layer_idx, len(layers)):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
928 layers[idx].idx = idx
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
929 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
930 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
931 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
932
1262
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
933 ## \brief Manage a existed layer group
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
934 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
935 # This method scan layer groups of all managed layers, and find a
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
936 # proper place to insert it.
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
937 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
938 # \return -1 for error, or layer index.
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
939 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
940 def manage_layer_group(self, layer_group_id):
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
941 layer_group = self.get_node(layer_group_id)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
942 new_layer = Layer(layer_group)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
943
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
944 if not self._layers:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
945 new_layer.idx = 0
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
946 self._layers.append(new_layer)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
947 return 0
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
948
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
949 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
950 # Scan who is after the given group
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
951 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
952 next_group = layer_group.next()
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
953 while next_group:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
954 next_group_id = next_group.getAttribute('id')
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
955
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
956 for vlayer in self._layers:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
957 vlayer_group_id = vlayer.group.getAttribute('id')
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
958 if vlayer_group_id == next_group_id:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
959 # This layer group is after given one.
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
960 self._layers.insert(vlayer.idx, new_layer)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
961
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
962 for idx in range(vlayer.idx, len(self._layers)):
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
963 self._layers[idx].idx = idx
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
964 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
965 return new_layer.idx
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
966 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
967
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
968 next_group = next_group.next()
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
969 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
970
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
971 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
972 # Is the given group after last layer group?
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
973 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
974 tail_group = self._layers[-1].group.next()
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
975 while tail_group:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
976 tail_group_id = tail_group.getAttribute('id')
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
977
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
978 if tail_group_id == layer_group_id:
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
979 # it is after last layer group.
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
980 new_layer.idx = len(self._layers)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
981 self._layers.append(new_layer)
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
982 return new_layer.idx
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
983
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
984 tail_group = tail_group.next()
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
985 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
986
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
987 return -1 # error, can not determinze the position
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
988
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
989 ## \brief Remove layer and associated scene nodes and scene groups.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
990 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
991 def rm_layer(self, layer_idx):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
992 layers = self._layers
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
993
1260
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
994 layer = self._layers[layer_idx]
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
995 for scene_node in layer.scenes:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
996 scene_group_id = scene_node.getAttribute('ref')
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
997 try:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
998 scene_group_node = self.get_node(scene_group_id)
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
999 if scene_group_node.parent(): # keep from crashing
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1000 scene_group_node.parent().removeChild(scene_group_node)
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1001 pass
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1002 except:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1003 pass
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1004
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1005 if scene_node.parent(): # keep from crashing
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1006 scene_node.parent().removeChild(scene_node)
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1007 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1008 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1009
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1010 del layers[layer_idx]
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1011
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1012 for idx in range(layer_idx, len(layers)):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1013 layers[idx].idx = idx
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1014 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1015 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1016
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1017 def get_layer_num(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1018 return len(self._layers)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1019
1259
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1020 ## \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
1021 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1022 # \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
1023 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1024 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
1025 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
1026 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
1027 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
1028 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
1029 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
1030 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1031 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1032 return -1, None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1033
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1034 def get_layer_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
1035 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
1036 return layer.group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1037
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1038 def get_all_scene_node_of_layer(self, layer_idx):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1039 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
1040 return layer.scenes
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1041
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1042 def get_layer_data(self, layer_idx):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1043 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
1044 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1045 data = layer.data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1046 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1047 return None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1048 return data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1049
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1050 def set_layer_data(self, layer_idx, data):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1051 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
1052 layer.data = data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1053 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1054
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1055 def create_layer_dup_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
1056 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
1057
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1058 dup_group = self._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
1059 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
1060 dup_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
1061 dup_group.setAttribute('inkscape:label', 'dup')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1062 dup_group.setAttribute('sodipodi:insensitive', '1')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1063 dup_group.setAttribute('style', '')
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1064
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1065 layer.group.appendChild(dup_group)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1066
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1067 return dup_group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1068
1259
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1069 ## \brief Return associated layer index of given layer group.
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1070 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1071 # \return -1 for error.
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1072 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1073 def find_layer_of_group(self, group_id):
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1074 for layer_idx, layer in enumerate(self._layers):
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1075 if layer.group.getAttribute('id') == group_id:
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1076 return layer_idx
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1077 pass
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1078 return -1
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1079
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1080 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
1081 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
1082 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
1083 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
1084 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
1085 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
1086 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1087 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
1088 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
1089 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1090 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1091 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1092
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
1093 ## \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
1094 #
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
1095 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
1096 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
1097 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
1098
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1099 ## \brief Remove frames
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1100 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1101 # - 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
1102 # - 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
1103 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1104 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
1105 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
1106
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1107 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
1108 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
1109 start, end, tween_type = \
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
1110 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
1111
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1112 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
1113 continue
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1114
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1115 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
1116 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
1117 start=(start - num),
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1118 end=(end - num))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1119 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
1120 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
1121 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1122 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1123 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1124
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1125 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
1126 return self._maxframe
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1127
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1128 ## \brief Copy children of a group.
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1129 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1130 # 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
1131 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1132 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
1133 # Search for the duplicated group
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1134 doc = self._doc
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1135
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1136 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
1137
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1138 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
1139 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
1140 new_gids = set()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1141 for old_node in old_nodes:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1142 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
1143 new_node = new_nodes.next()
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1144 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
1145
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1146 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1147 # 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
1148 # 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
1149 # 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
1150 # 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
1151 # 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
1152 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1153 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1154 while gid in new_gids:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1155 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1156 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1157 new_gids.add(gid)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1158 new_node.setAttribute('id', gid)
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1159 pass
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1160
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1161 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
1162 dup_group.removeChild(child) # prevent from crash
1298
2a5da457474d Fix typo
Thinker K.F. Li <thinker@codemud.net>
parents: 1295
diff changeset
1163 dst_group.appendChild(child)
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1164 pass
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1165 pass
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1166
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1167 ## \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
1168 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1169 # 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
1170 # and append nodes to the desitnate group.
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1171 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1172 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
1173 doc = self._doc
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1174
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1175 for src_child in src_group.childList():
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1176 src_child_id = src_child.getAttribute('id')
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1177 dst_child_id = self.new_id()
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1178
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1179 dst_child = doc.createElement('svg:use')
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1180 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
1181 dst_child.setAttribute('xlink:href', '#' + src_child_id)
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1182 dst_child.setAttribute('ns0:duplicate-src', src_child_id)
1295
71118bff7d61 CHange the wrong append to appendCHild
wycc
parents: 1294
diff changeset
1183 dst_group.appendChild(dst_child)
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1184 pass
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1185 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1186 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1187