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