annotate pyink/domview.py @ 1348:22a79dcbaec6

Change structure of provide_traits and method_map_traits
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 12 Feb 2011 19:22:21 +0800
parents e0400a2b7c35
children 17fa5d78200b
rev   line source
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1 import random
1253
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
2 import dom_event
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
3 from tween import TweenObject
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
4 from trait import trait, require, composite
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
5
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
6
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
7 ## \brief Compare two nodes with ID.
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
8 #
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
9 # \return True if node1 ID equivalent to ndoe2 ID.
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
10 #
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
11 def _id_eq(node1, node2):
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
12 try:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
13 node1_id = node1.getAttribute('id')
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
14 except:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
15 return False
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
16
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
17 try:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
18 node2_id = node2.getAttribute('id')
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
19 except:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
20 return False
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
21 return node1_id == node2_id
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
22
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
23
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
24 class Layer:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
25 def __init__(self, node):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
26 self.scenes = []
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
27 self.group = node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
28 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
29 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
30
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
31
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
32 class Timeline(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
33 def __init__(self, scenes_node):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
34 self.scenes_node = scenes_node
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
35 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
36
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
37 def name(self):
1308
49775feefbcf Show components and timelines in comp_dock
Thinker K.F. Li <thinker@codemud.net>
parents: 1306
diff changeset
38 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
39 return name
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
40
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
41 def rename(self, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
42 scenes_node = self.scenes_node
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
43 scenes_node.setAttribute('name', new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
44 pass
1301
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
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
47
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
48 class Component(object):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
49 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
50 # \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
51 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
52 def __init__(self, comp_mgr, comp_node):
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
53 self._comp_mgr = comp_mgr
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
54 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
55 self.layers = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
56 self.timelines = []
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 if comp_node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
59 self._initialize_comp()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
60 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
61 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
62
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
63 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
64 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
65 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
66 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
67 break
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
68 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
69 else: # no any ns0:scenes
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
70 doc = self._comp_mgr._doc
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
71 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
72 scenes_node.setAttribute('name', 'default')
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
73
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
74 node_id = self._comp_mgr.new_id()
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
75 scenes_node.setAttribute('id', node_id)
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
76
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
77 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
78 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
79 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
80
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
81 def name(self):
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
82 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
83 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
84 else:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
85 name = 'main'
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
86 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
87 return name
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
88
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
89 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
90 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
91 return names
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
92
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
93 def parse_timelines(self):
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
94 print 'parse timelines fro component ' + self.name()
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
95 self.timelines[:] = []
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
96
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
97 if self.node:
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
98 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
99 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
100
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
101 comp_node = self.node
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
102 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
103 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
104 tl = Timeline(child)
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
105 self.timelines.append(tl)
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
106 print ' ' + tl.name()
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
107 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
108 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
109 pass
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 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
112 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
113 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
114 return tl
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
115 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
116 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
117
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
118 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
119 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
120 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
121 return True
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 return False
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
124
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
125 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
126 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
127 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
128 '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
129
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
130 doc = self._comp_mgr._doc
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
131 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
132
1310
85d04ba11146 Support adding new components
Thinker K.F. Li <thinker@codemud.net>
parents: 1308
diff changeset
133 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
134 scenes_node.setAttribute('name', name)
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
135 node_id = self._comp_mgr.new_id()
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
136 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
137
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
138 comp_node.appendChild(scenes_node)
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
139
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
140 tl = Timeline(scenes_node)
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
141 self.timelines.append(tl)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
142 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
143
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
144 ## \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
145 #
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
146 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
147 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
148 name = tl.name()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
149 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
150 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
151 'name of scenes node of a timeline is duplicated'
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
152
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
153 self.timeline.append(tl)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
154 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
155
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
156 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
157 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
158 if tl.name() == name:
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
159 comp_node = self.node
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
160 comp_node.removeChild(tl.scenes_node)
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
161
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
162 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
163 return
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
164 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
165 raise ValueError, 'try to remove a non-existed timeline - %s' % (name)
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
166
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
167 def rename_timeline(self, timeline_name, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
168 for i, tl in enumerate(self.timelines):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
169 if tl.name() == timeline_name:
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
170 tl.rename(new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
171 return
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
172 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
173 raise ValueError, 'try to remove a non-existed timeline - %s' % (name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
174
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
175 def rename(self, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
176 self.node.setAttribute('name', new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
177 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
178 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
179
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
180
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
181 ## \brief A mix-in for class component_manager for UI updating.
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
182 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
183 # This class collects all methods for supporting UI updating.
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
184 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
185 class component_manager_ui_update(object):
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
186 ## \brief Update the list of components.
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
187 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
188 def reparse_components(self):
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
189 saved_cur_comp = self._cur_comp
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
190 self._components[:] = [self._main_comp]
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
191 self._comp_names.clear()
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
192 self._parse_components()
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
193
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
194 for comp in self._components:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
195 if comp.name() == saved_cur_comp.name():
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
196 self._cur_comp = comp
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
197 break
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
198 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
199 else:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
200 self._cur_comp = self._main_comp
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
201 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
202 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
203
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
204 ## \brief Update the list of timelines of current component.
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
205 #
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
206 def reparse_timelines(self):
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
207 comp = self._cur_comp
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
208 saved_cur_timeline = self._cur_timeline
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
209 comp.parse_timelines()
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
210
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
211 for timeline in comp.timelines:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
212 if timeline.name() == saved_cur_timeline.name():
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
213 self._cur_timeline = timeline
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
214 break
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
215 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
216 else:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
217 self._cur_timeline = comp.timelines[0]
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
218 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
219 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
220 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
221
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
222
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
223 ## \brief A trait for class domview for managing components.
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
224 #
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
225 # 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
226 # 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
227 # 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
228 # 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
229 # 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
230 # 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
231 # 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
232 # 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
233 # meaningful names.)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
234 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
235 # 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
236 # 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
237 # removed and normalized to normal components.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
238 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
239 @trait
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
240 class component_manager(component_manager_ui_update):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
241 _layers = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
242 _scenes_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
243 _metadata_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
244 _doc = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
245 _root = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
246 _layers = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
247 _layers_parent = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
248 new_id = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
249 get_node = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
250 reset = require
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
251
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
252 def __init__(self):
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
253 super(component_manager, self).__init__()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
254 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
255 self._components = []
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
256 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
257 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
258 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
259 self._cur_timeline = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
260 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
261 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
262
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
263 def _set_main_component(self):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
264 comp = Component(self, None)
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
265 comp.layers = self._layers
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
266 scenes_node = self._scenes_node
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
267 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
268 comp.timelines = [timeline]
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
269
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
270 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
271 self._comp_names.add('main')
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
272
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
273 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
274 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
275
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
276 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
277 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
278 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
279 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
280 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
281 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
282 continue
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
283 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
284 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
285
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
286 comp = Component(self, child)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
287 comp.parse_timelines()
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
288
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
289 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
290 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
291 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
292 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
293
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
294 ## \brief To initialize subtree of metadata.
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
295 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
296 # 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
297 #
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
298 def _component_manager_init_metadata(self):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
299 metadata_node = self._metadata_node
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
300
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
301 # Make sure ns0:components in metadata
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
302 for n in metadata_node.childList():
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
303 if n.name() == 'ns0:components':
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
304 self._components_node = n
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
305 break
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
306 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
307 else:
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
308 components_node = \
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
309 self._doc.createElement("ns0:components")
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
310 metadata_node.appendChild(components_node)
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
311 self._components_node = components_node
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
312 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
313
1321
6a014a4ec79e Fix missed variable name after refactory
Thinker K.F. Li <thinker@codemud.net>
parents: 1318
diff changeset
314 # Make sure the group for containing components.
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
315 for n in self._root.childList():
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
316 if n.name() != 'svg:g':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
317 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
318 try:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
319 nlabel = n.getAttribute('inkscape:label')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
320 except:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
321 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
322 if nlabel == 'components':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
323 self._components_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
324 break
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
325 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
326 else: # no components group
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
327 components_group = self._doc.createElement('svg:g')
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
328 components_group.setAttribute('inkscape:label', 'components')
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
329 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
330 components_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
331
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
332 self._root.appendChild(components_group)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
333 self._components_group = components_group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
334 pass
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
335 pass
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
336
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
337 def _start_component_manager(self):
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
338 self._component_manager_init_metadata()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
339 self._set_main_component()
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
340 self._parse_components()
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
341
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
342 self._cur_comp = self._main_comp
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
343 tl = self._main_comp.get_timeline('default')
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
344 self._cur_timeline = tl
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
345 self._scenes_node = tl.scenes_node
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
346 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
347
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
348 ## \brief Create component group
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
349 #
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
350 # A component group is a group with a layers group as child.
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
351 # The layers group is where layer groups is in.
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
352 #
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
353 def _create_component_group(self):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
354 doc = self._doc
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
355 group = doc.createElement('svg:g')
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
356 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
357 group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
358
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
359 self._components_group.appendChild(group)
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
360
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
361 # Create layers group
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
362 layers_group = doc.createElement('svg:g')
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
363 gid = self.new_id()
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
364 layers_group.setAttribute('id', gid)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
365 layers_group.setAttribute('inkscape:label', 'layers')
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
366 group.appendChild(layers_group)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
367
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
368 return group
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
369
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
370 ## \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
371 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
372 # \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
373 # \param comp_group_id is the component group.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
374 # \return a ns0:component node.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
375 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
376 def _create_component_node(self, comp_name, comp_group_id):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
377 comp_node = self._doc.createElement('ns0:component')
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
378 comp_id = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
379 comp_node.setAttribute('id', comp_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
380 comp_node.setAttribute('name', comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
381 comp_node.setAttribute('ref', comp_group_id)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
382 self._components_node.appendChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
383 return comp_node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
384
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
385 ## \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
386 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
387 def _get_component(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
388 if comp_name in self._comp_names:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
389 for comp in self._components:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
390 if comp.name() == comp_name:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
391 return comp
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
392 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
393 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
394 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
395
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
396 ## \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
397 #
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
398 def _create_comp_layer_group(self, layers_group, layer_name):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
399 doc = self._doc
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
400 gid = self.new_id()
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
401
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
402 layer_group = doc.createElement('svg:g')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
403 layer_group.setAttribute('id', gid)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
404 layer_group.setAttribute('inkscape:label', layer_name)
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
405 layer_group.setAttribute('inkscape:groupmode', 'layer')
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
406 layers_group.appendChild(layer_group)
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
407
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
408 return layer_group
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
409
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
410 ## \brief Return group of specified layer in a component.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
411 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
412 # This is here for getting layer group without switch current
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
413 # component.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
414 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
415 def _get_group_of_component_layer(self, comp_name, layer_idx):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
416 comp = self._get_component(comp_name)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
417 layer = comp.layers[layer_idx]
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
418 return layer.group
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
419
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
420 def _get_layers_group_of_component(self, comp_name):
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
421 if comp_name == 'main':
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
422 return self._root
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
423
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
424 comp_group = self.get_component_group(comp_name)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
425 layers_group = comp_group.firstChild()
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
426 assert layers_group.getAttribute('inkscape:label') == 'layers'
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
427
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
428 return layers_group
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
429
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
430 def all_comp_names(self):
1317
e2ad9eb7f7a4 Show timelines correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 1316
diff changeset
431 return [comp.name() for comp in self._components]
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
432
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
433 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
434 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
435
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
436 def hide_component(self, comp_name):
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
437 if comp_name == 'main':
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
438 comp = self._get_component(comp_name)
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
439 for layer in comp.layers:
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
440 group = layer.group
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
441 group.setAttribute('style', 'display: none')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
442 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
443 return
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
444
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
445 comp_group = self.get_component_group(comp_name)
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
446 comp_group.setAttribute('style', 'display: none')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
447 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
448
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
449 def show_component(self, comp_name):
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
450 if comp_name == 'main':
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
451 comp = self._get_component(comp_name)
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
452 for layer in comp.layers:
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
453 group = layer.group
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
454 group.setAttribute('style', '')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
455 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
456 return
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
457
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
458 comp_group = self.get_component_group(comp_name)
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
459 comp_group.setAttribute('style', '')
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
460 pass
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
461
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
462 def switch_component(self, comp_name):
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
463 old_comp = self._cur_comp
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
464
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
465 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
466 self._cur_comp = comp
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
467 self._layers = comp.layers
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
468 comp_name = self._cur_comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
469 # for domview
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
470 self._layers_parent = \
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
471 self._get_layers_group_of_component(comp_name)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
472
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
473 first_name = comp.all_timeline_names()[0]
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
474 self.switch_timeline(first_name)
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
475
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
476 self.hide_component(old_comp.name())
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
477 self.show_component(comp.name())
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
478 pass
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
479
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
480 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
481 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
482 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
483 'try add a component with existed name %s' % (comp_name)
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
484
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
485 comp_group = self._create_component_group()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
486 comp_group_id = comp_group.getAttribute('id')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
487 comp_node = self._create_component_node(comp_name, comp_group_id)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
488
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
489 comp = Component(self, comp_node)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
490 comp.parse_timelines()
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
491
1327
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
492 self._components.append(comp)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
493 self._comp_names.add(comp_name)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
494
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
495 # Create Layer1 (at least one layer for a component)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
496 layers_group = self._get_layers_group_of_component(comp_name)
ab281ec3eeec Add a layers group for components
Thinker K.F. Li <thinker@codemud.net>
parents: 1326
diff changeset
497 layer_group = self._create_comp_layer_group(layers_group, 'Layer1')
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
498 layer = Layer(layer_group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
499 comp.layers.append(layer)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
500
1326
0a2034f490e5 Show/hide components by showing/hiding component group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
501 self.hide_component(comp_name)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
502 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
503
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
504 def add_component_node(self, comp_node):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
505 comp = Component(self, comp_node)
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
506 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
507 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
508 raise ValueError, \
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
509 '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
510
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
511 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
512 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
513 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
514
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
515 def rm_component(self, comp_name):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
516 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
517 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
518 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
519 comp_group = self.get_component_group(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
520
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
521 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
522 self._comp_names.remove(comp_name)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
523 self._components_node.removeChild(comp_node)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
524 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
525 pass
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
526
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
527 def rename_component(self, comp_name, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
528 comp = self._get_component(comp_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
529 comp.rename(new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
530 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
531
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
532 def get_component_group(self, comp_name):
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
533 comp = self._get_component(comp_name)
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
534
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
535 comp_name = comp.name()
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
536 if comp_name == 'main':
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
537 return self._root
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
538
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
539 comp_node = comp.node
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
540 gid = comp_node.getAttribute('ref')
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
541 comp_group = self.get_node(gid)
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
542 return comp_group
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
543
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
544 def get_current_component(self):
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
545 return self._cur_comp.name()
1344
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
546
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
547 ## \brief Hide scene groups of current timeline.
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
548 #
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
549 # This method all scene groups of current timeline invisible.
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
550 #
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
551 def _hide_current_timeline(self):
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
552 tl = self._cur_timeline
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
553 scenes_node = tl.scenes_node
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
554 for child in scenes_node.childList():
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
555 if child.name() != 'ns0:scene':
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
556 continue
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
557 gid = child.getAttribute('ref')
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
558 group = self.get_node(gid)
1344
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
559 group.setAttribute('style', 'display: none')
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
560 pass
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
561 pass
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
562
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
563 def switch_timeline(self, timeline_name):
1344
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
564 if self._cur_timeline:
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
565 self._hide_current_timeline()
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
566 pass
8f1f8ef5c9ea Hide scene groups of old timeline when switching to a new timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1343
diff changeset
567
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
568 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
569 self._cur_timeline = tl
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
570 self._scenes_node = tl.scenes_node # of class domview
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
571
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
572 # Make domview to rescan layers and scenes.
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
573 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
574 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
575
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
576 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
577 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
578 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
579
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
580 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
581 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
582 pass
1306
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
583
1331
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
584 def rename_timeline_of_component(self, timeline_name, new_name, comp_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
585 comp = self._get_component(comp_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
586 comp.rename_timeline(timeline_name, new_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
587 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
588
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
589 def rename_timeline(self, timeline_name, new_name):
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
590 comp_name = self._cur_comp.name()
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
591 self.rename_timeline_of_component(timeline_name, new_name, comp_name)
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
592 pass
5da64f67d00d Rename components and timelines with context menu
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
593
1306
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
594 def all_timeline_names(self):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
595 r = self._cur_comp.all_timeline_names()
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
596 return r
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
597
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
598 def has_timeline(self, name):
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
599 r = self._cur_comp.has_timeline(name)
8c0a4684c1f7 Expose methods from component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1302
diff changeset
600 return r
1316
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
601
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
602 def get_current_timeline(self):
9ab8d50dcf7e Refactory code of refreshing UI
Thinker K.F. Li <thinker@codemud.net>
parents: 1315
diff changeset
603 return self._cur_timeline.name()
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
604
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
605 ## \brief Add a new component from a group node.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
606 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
607 # The group node is reparented to the group of first layer of
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
608 # specified component.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
609 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
610 def mv_group_to_component(self, group, comp_name):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
611 group_parent = group.parent()
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
612 if group_parent:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
613 group_parent.removeChild(group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
614 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
615
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
616 layer_group = self._get_group_of_component_layer(comp_name, 0)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
617 layer_group.appendChild(group)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
618 pass
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
619
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
620 ## \brief Create a link to a component.
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
621 #
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
622 # \param parent_group is where the link will be pliaced in.
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
623 # \return link node.
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
624 #
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
625 def link_to_component(self, comp_name, parent_group):
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
626 layers_group = self._get_layers_group_of_component(comp_name)
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
627
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
628 use_node = self._doc.createElement('svg:use')
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
629 layers_group_id = layers_group.getAttribute('id')
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
630 use_node.setAttribute('xlink:href', '#' + layers_group_id)
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
631 use_node_id = self.new_id()
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
632 use_node.setAttribute('id', use_node_id)
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
633 use_node.setAttribute('use_component', 'true')
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
634
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
635 parent_group.appendChild(use_node)
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
636
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1327
diff changeset
637 return use_node
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
638 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
639
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
640
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
641 ## \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
642 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
643 # 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
644 # 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
645 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
646 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
647 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
648
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
649 self._maxframe = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
650 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
651 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
652 pass
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 _start_monitor(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
655 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
656 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
657
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
658 doc = self._doc
1253
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
659 dom_event.addEventListener(doc, 'DOMNodeInserted',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
660 self._on_insert_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
661 dom_event.addEventListener(doc, 'DOMNodeRemoved',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
662 self._on_remove_node, None)
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
663 dom_event.addEventListener(doc, 'DOMAttrModified',
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1247
diff changeset
664 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
665 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
666
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
667 ## \brief Add a node to id2node mapping.
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
668 #
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
669 # domview_monitor._id2node is a multiple mapping to map a key to
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
670 # multiple node. The reason that it is not a single mapping is
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
671 # Inkscape would insert a node with the ID from the node been
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
672 # copied, and change its ID to a unique one later. So, we must
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
673 # provide the capability to handle two or more nodes with the same
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
674 # ID.
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
675 def _map_id2node(self, node, node_id):
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
676 if node_id in self._id2node:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
677 old_value = self._id2node[node_id]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
678 if isinstance(old_value, list):
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
679 old_value.append(node)
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
680 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
681 self._id2node[node_id] = [old_value, node]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
682 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
683 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
684 self._id2node[node_id] = node
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
685 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
686 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
687
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
688 def _unmap_id2node(self, node, node_id):
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
689 if node_id not in self._id2node:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
690 raise ValueError, 'invalide node ID (%s)' % (node_id)
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
691
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
692 value = self._id2node[node_id]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
693 if isinstance(value, list):
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
694 value.remove(node)
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
695 if not value:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
696 del self._id2node[node_id]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
697 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
698 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
699 else:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
700 del self._id2node[node_id]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
701 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
702 pass
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
703
1301
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
704 ## \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
705 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
706 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
707 self._maxframe = 0
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
708 self._id2node = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
709 self._group2scene = {}
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
710
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
711 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
712 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
713 pass
18af917cf855 Add component_manager as a mix-in of domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1299
diff changeset
714
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
715 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
716 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
717 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
718 pass
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 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
721 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
722 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
723 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
724 else:
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
725 self._map_id2node(child, child_id)
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
726 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
727
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
728 if child.name() == 'ns0:scene' and _id_eq(node, self._scenes_node):
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
729 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
730 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
731 except:
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 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
734 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
735 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
736 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
737 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
738
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
739 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
740 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
741 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
742 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
743 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
744 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
745 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
746 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
747 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
748 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
749 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
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 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
753 maxframe = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
754 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
755 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
756 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
757
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
758 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
759 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
760 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
761 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
762 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
763 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
764 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
765 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
766 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
767 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
768 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
769 return maxframe
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
770
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
771 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
772 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
773 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
774 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
775
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
776 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
777 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
778 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
779 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
780 else:
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
781 self._unmap_id2node(child, child_id)
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
782 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
783
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
784 if child.name() == 'ns0:scene' and _id_eq(node, self._scenes_node):
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
785 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
786 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
787 except:
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 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
790 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
791 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
792
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
793 try:
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
794 if int(child.getAttribute('start')) == self._maxframe or \
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
795 int(child.getAttribute('end')) == self._maxframe:
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
796 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
797 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
798 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
799 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
800 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
801 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
802
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
803 def _on_attr_modified(self, node, name, old_value, new_value):
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
804 if old_value == new_value:
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
805 return
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
806
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
807 if name == 'id':
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
808 if old_value and old_value in self._id2node:
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
809 self._unmap_id2node(node, old_value)
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
810 pass
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
811 if new_value:
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
812 self._map_id2node(node, new_value)
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
813 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
814 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
815 elif name == 'ref' and node.name() == 'ns0:scene':
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
816 parent_node = node.parent()
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
817 scenes_node = self._scenes_node
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
818 if not _id_eq(parent_node, scenes_node):
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
819 return # not in current timeline
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
820
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
821 if old_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
822 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
823 # 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
824 # wrapper.
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
825 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
826 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
827 if new_value:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
828 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
829 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
830 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
831 elif (name in ('start', 'end')) and node.name() == 'ns0:scene':
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
832 parent_node = node.parent()
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
833 scenes_node = self._scenes_node
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
834 if not _id_eq(parent_node, scenes_node):
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
835 return # not in current timeline
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
836
1276
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
837 try:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
838 new_value = int(new_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
839 old_value = int(old_value)
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
840 except TypeError:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
841 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
842 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
843 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
844 # _maxframe may be reduced.
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
845 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
846 else:
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
847 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
848 pass
0442ae9c2ac2 Fix bug of max frame of domview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1275
diff changeset
849 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
850 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
851 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
852
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
853 ## \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
854 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
855 # 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
856 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
857 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
858 self._id2node = {}
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
859 root = self._root
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
860 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
861 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
862 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
863 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
864
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
865 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
866 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
867 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
868 except:
1336
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
869 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
870 else:
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
871 self._id2node[node_id] = node
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
872 pass
0b5ee9c90af7 Update components and timelines list for async changes on DOM
Thinker K.F. Li <thinker@codemud.net>
parents: 1331
diff changeset
873
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
874 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
875 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
876 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
877 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
878
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
879 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
880 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
881
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
882 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
883 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
884 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
885 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
886 end = start
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
887 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
888
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
889 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
890 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
891 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
892 scene_type = 'normal'
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
893 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
894 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
895 scene_type = 'normal'
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
896 pass
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 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
899
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
900 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
901 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
902 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
903 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
904 cur = 0
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
905 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
906 self.current = cur
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
907
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
908 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
909 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
910 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
911
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
912 try:
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
913 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
914 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
915 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
916 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
917
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
918 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
919 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
920 pass
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 ## \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
923 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
924 def _collect_all_scenes(self):
1318
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
925 scenes_node = self._scenes_node
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
926 self._parse_one_scenes(scenes_node)
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
927 self._maxframe = self._find_maxframe(scenes_node)
b1776f441e8a Fix issue of parsing scene nodes
Thinker K.F. Li <thinker@codemud.net>
parents: 1317
diff changeset
928 pass
1243
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
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
931 ## \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
932 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
933 def get_node(self, node_id):
1340
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
934 value = self._id2node[node_id]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
935 if isinstance(value, list):
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
936 return value[-1]
10d5f06f7566 Fix issue of shouting error when removing a node.
Thinker K.F. Li <thinker@codemud.net>
parents: 1336
diff changeset
937 return value
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
938
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
939 ## \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
940 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
941 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
942 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
943
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
944 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
945 while True:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
946 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
947 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
948 return candidate
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
949 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
950 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
951 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
952
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
953
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
954 ## \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
955 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
956 def _DOM_iterator(node):
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
957 nodes = [node]
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
958 while nodes:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
959 node = nodes.pop(0)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
960 child = node.firstChild()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
961 while child:
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
962 nodes.append(child)
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
963 child = child.next()
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
964 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
965 yield node
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
966 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
967 pass
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
968
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
969
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
970 ## \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
971 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
972 # 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
973 # 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
974 # 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
975 #
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
976 @composite
1342
972d749b9656 Move component_manager to a separated object.
Thinker K.F. Li <thinker@codemud.net>
parents: 1340
diff changeset
977 class domview(domview_monitor):
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
978 use_traits = (component_manager,)
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
979
1348
22a79dcbaec6 Change structure of provide_traits and method_map_traits
Thinker K.F. Li <thinker@codemud.net>
parents: 1345
diff changeset
980 method_map_traits = {component_manager._start_component_manager:
22a79dcbaec6 Change structure of provide_traits and method_map_traits
Thinker K.F. Li <thinker@codemud.net>
parents: 1345
diff changeset
981 '_start_component_manager'}
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
982
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
983 # 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
984 _doc = None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
985 _root = None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
986
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
987 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
988 super(domview, self).__init__()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
989 self._metadata_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
990 #
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
991 # Following two variables would be changed by class
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
992 # component_manager to switch components and timelines.
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
993 #
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
994 self._scenes_node = None
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
995 self._layers_parent = None
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
996 self._layers = []
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
997 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
998
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
999 ## \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
1000 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1001 def _init_metadata(self):
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1002 self._layers_parent = self._root
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1003
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1004 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
1005 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
1006 break
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 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1009 raise RuntimeError, \
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1010 '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
1011
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1012 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
1013
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1014 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
1015 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
1016 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
1017 break
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1018 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1019 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1020 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
1021 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
1022 scenes_node = self._doc.createElement("ns0:scenes")
1322
7f25abbc1b61 Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents: 1321
diff changeset
1023 scenes_node_id = 'main_default_scenes'
7f25abbc1b61 Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents: 1321
diff changeset
1024 scenes_node.setAttribute('id', scenes_node_id)
7f25abbc1b61 Assign a name and ID for scenes node of main component
Thinker K.F. Li <thinker@codemud.net>
parents: 1321
diff changeset
1025 scenes_node.setAttribute('name', 'default')
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1026 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
1027 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
1028 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1029 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1030
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1031 def _parse_all_layers(self):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1032 layers = self._layers
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1033 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
1034
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1035 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
1036 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
1037 continue
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1038
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1039 try:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1040 label = child.getAttribute('inkscape:label')
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1041 except:
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1042 pass
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1043 else: # has no label
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1044 if label == 'components':
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1045 continue
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1046 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1047
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1048 layer_group = child
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1049 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
1050 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
1051 layers.append(layer)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1052 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
1053 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1054 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1055
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1056 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
1057 self._doc = doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1058 self._root = root
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1059 self._layers[:] = []
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1060
1315
fcff6978f9bf User can switch components.
Thinker K.F. Li <thinker@codemud.net>
parents: 1310
diff changeset
1061 self._init_metadata()
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1062 self._start_monitor() # from domview_monitor
1345
e0400a2b7c35 Use trait instead of mixin for component_manager
Thinker K.F. Li <thinker@codemud.net>
parents: 1344
diff changeset
1063 self._start_component_manager()
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1064 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
1065 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
1066
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
1067 def reset(self):
1302
c53331c55a23 Refactory domview to more clear responsibilities
Thinker K.F. Li <thinker@codemud.net>
parents: 1301
diff changeset
1068 self._monitor_reparse() # from domview_monitor
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1069 self._layers[:] = []
1275
776b024ae8f9 Fix the buggy implementation of reset()
Thinker K.F. Li <thinker@codemud.net>
parents: 1274
diff changeset
1070 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
1071 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1072
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1073 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
1074 s = ""
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1075 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
1076 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
1077 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1078 return s
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1079
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1080 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
1081 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
1082 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
1083 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
1084 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1085 print " " * l * 2,"/>"
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
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1088 ## \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
1089 #
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1090 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
1091 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
1092 ref=None):
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1093 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
1094 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
1095 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1096
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1097 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
1098 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
1099 if start != end:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1100 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
1101 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1102 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
1103 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
1104 if ref:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1105 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
1106 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1107
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1108 scenes_node.appendChild(scene_node)
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1109
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1110 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
1111
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1112 return scene_node
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1113
1262
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1114 ## \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
1115 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1116 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
1117 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
1118 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1119
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1120 ## \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
1121 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1122 # 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
1123 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
1124 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
1125 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
1126 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
1127 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1128 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
1129 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
1130 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1131 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
1132 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
1133 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1134 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
1135 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
1136 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1137 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1138
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1139 ## \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
1140 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1141 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
1142 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
1143 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
1144
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1145 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
1146 for layer in self._layers:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1147 try:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1148 layer.scenes.remove(scene_node)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1149 except ValueError: # not in the list
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1150 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1151 else:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1152 break
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1153 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1154 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1155
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1156 ## \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
1157 #
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1158 # 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
1159 # 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
1160 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1161 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
1162 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
1163 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1164 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
1165 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
1166 # Inkscape.
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1167 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
1168 pass
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1169 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1170 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1171
1256
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1172 try:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1173 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
1174 except:
8755415b5e99 More check for remvoing scene and scene group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
1175 pass
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1176 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1177
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1178 ## \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
1179 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1180 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
1181 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
1182 doc = self._doc
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1183
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1184 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
1185 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
1186 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
1187 scene_group.setAttribute("inkscape:groupmode", "layer")
1299
6949e2b6cae2 Add unlink clone checker.
Thinker K.F. Li <thinker@codemud.net>
parents: 1298
diff changeset
1188 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
1189
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1190 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
1191
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1192 return scene_group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1193
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1194 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
1195 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
1196 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
1197
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1198 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
1199 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
1200 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1201 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1202 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
1203 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
1204 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1205 continue
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1206
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1207 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
1208 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1209 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1210
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1211 ## \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
1212 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1213 # \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
1214 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1215 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
1216 layers = self._layers
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1217
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1218 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
1219 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
1220 layers.append(layer)
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1221 else:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1222 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
1223 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
1224 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
1225 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1226 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1227 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1228
1262
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1229 ## \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
1230 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1231 # 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
1232 # 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
1233 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1234 # \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
1235 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1236 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
1237 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
1238 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
1239
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1240 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
1241 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
1242 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
1243 return 0
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1244
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1245 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1246 # 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
1247 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1248 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
1249 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
1250 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
1251
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1252 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
1253 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
1254 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
1255 # 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
1256 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
1257
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1258 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
1259 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
1260 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1261 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
1262 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1263
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1264 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
1265 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1266
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1267 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1268 # 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
1269 #
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1270 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
1271 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
1272 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
1273
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1274 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
1275 # 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
1276 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
1277 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
1278 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
1279
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1280 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
1281 pass
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1282
2f861eea1214 Make domview_ui manages scenes and layers found by checker
Thinker K.F. Li <thinker@codemud.net>
parents: 1260
diff changeset
1283 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
1284
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1285 ## \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
1286 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1287 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
1288 layers = self._layers
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1289
1260
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1290 layer = self._layers[layer_idx]
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1291 for scene_node in layer.scenes:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1292 scene_group_id = scene_node.getAttribute('ref')
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1293 try:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1294 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
1295 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
1296 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
1297 pass
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1298 except:
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1299 pass
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1300
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1301 if scene_node.parent(): # keep from crashing
bbd6bc0d079a Fix bug of removing layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1259
diff changeset
1302 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
1303 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1304 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1305
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1306 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
1307
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1308 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
1309 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
1310 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1311 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1312
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1313 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
1314 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
1315
1259
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1316 ## \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
1317 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1318 # \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
1319 #
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1320 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
1321 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
1322 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
1323 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
1324 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
1325 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
1326 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1327 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1328 return -1, None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1329
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1330 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
1331 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
1332 return layer.group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1333
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1334 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
1335 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
1336 return layer.scenes
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1337
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1338 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
1339 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
1340 try:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1341 data = layer.data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1342 except:
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1343 return None
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1344 return data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1345
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1346 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
1347 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
1348 layer.data = data
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1349 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1350
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1351 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
1352 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
1353
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1354 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
1355 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
1356 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
1357 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
1358 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
1359 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
1360
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1361 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
1362
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1363 return dup_group
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1364
1259
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1365 ## \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
1366 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1367 # \return -1 for error.
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1368 #
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1369 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
1370 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
1371 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
1372 return layer_idx
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1373 pass
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1374 return -1
df474448364e Add find_layer_from_group() for domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1256
diff changeset
1375
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1376 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
1377 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
1378 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
1379 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
1380 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
1381 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
1382 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1383 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
1384 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
1385 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1386 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1387 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1388
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
1389 ## \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
1390 #
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
1391 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
1392 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
1393 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
1394
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1395 ## \brief Remove frames
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1396 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1397 # - 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
1398 # - 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
1399 #
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1400 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
1401 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
1402
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1403 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
1404 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
1405 start, end, tween_type = \
1274
a4d3838264dd Make public APIs being public for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1270
diff changeset
1406 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
1407
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1408 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
1409 continue
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1410
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1411 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
1412 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
1413 start=(start - num),
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1414 end=(end - num))
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1415 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
1416 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
1417 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1418 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1419 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1420
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1421 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
1422 return self._maxframe
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1423
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1424 ## \brief Copy children of a group.
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1425 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1426 # 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
1427 #
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1428 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
1429 # Search for the duplicated group
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1430 doc = self._doc
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1431
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1432 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
1433
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1434 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
1435 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
1436 new_gids = set()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1437 for old_node in old_nodes:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1438 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
1439 new_node = new_nodes.next()
1247
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1440 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
1441
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1442 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1443 # 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
1444 # 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
1445 # 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
1446 # 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
1447 # 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
1448 #
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1449 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1450 while gid in new_gids:
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1451 gid = self.new_id()
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1452 pass
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1453 new_gids.add(gid)
45e9566ea5c0 Fix bugs of inserting/removing frames.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
1454 new_node.setAttribute('id', gid)
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1455 pass
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1456
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1457 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
1458 dup_group.removeChild(child) # prevent from crash
1298
2a5da457474d Fix typo
Thinker K.F. Li <thinker@codemud.net>
parents: 1295
diff changeset
1459 dst_group.appendChild(child)
1286
922d1caf6632 Revert to changeset #0442ae9c2ac2 for domview.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1285
diff changeset
1460 pass
1246
42c4874c8d1e Move _duplicate_group to domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
1461 pass
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1462
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1463 ## \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
1464 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1465 # 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
1466 # and append nodes to the desitnate group.
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1467 #
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1468 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
1469 doc = self._doc
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1470
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1471 for src_child in src_group.childList():
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1472 src_child_id = src_child.getAttribute('id')
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1473 dst_child_id = self.new_id()
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1474
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1475 dst_child = doc.createElement('svg:use')
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1476 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
1477 dst_child.setAttribute('xlink:href', '#' + src_child_id)
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1291 1290
diff changeset
1478 dst_child.setAttribute('ns0:duplicate-src', src_child_id)
1295
71118bff7d61 CHange the wrong append to appendCHild
wycc
parents: 1294
diff changeset
1479 dst_group.appendChild(dst_child)
1291
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1480 pass
a3e04b3f2a8c Add clone function for domview
Thinker K.F. Li <thinker@codemud.net>
parents: 1286
diff changeset
1481 pass
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1482
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1483 ## \brief To test a graphic node.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1484 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1485 # A graphic node is a SVG node that is not layer group, scene
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1486 # group, ... etc. It is only a normal node in a layer group or a
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1487 # scene group.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1488 def is_graph_node(self, node):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1489 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1490 mode = node.getAttribute('inkscape:groupmode')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1491 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1492 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1493 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1494 if mode == 'layer':
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1495 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1496 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1497
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1498 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1499 label = node.geteAttribute('inkscape:label')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1500 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1501 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1502 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1503 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1504
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1505 try:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1506 scene_group = node.geteAttribute('scene_group')
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1507 except:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1508 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1509 else:
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1510 if scene_group == 'true':
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1511 return False
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1512 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1513
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1322
diff changeset
1514 return True
1243
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1515 pass
d5f70928e9f1 Move MBScene_domview_ui and MBScene_domview to separated modules.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1516