Mercurial > MadButterfly
annotate pyink/MBScene.py @ 1201:582d3410e546
Remove unused functions
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 03 Jan 2011 13:57:00 +0800 |
parents | 213f03dbfc41 |
children | 2f3d523a3871 |
rev | line source |
---|---|
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
1 #!/usr/bin/python |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
2 # -*- indent-tabs-mode: t; tab-width: 8; python-indent: 4; fill-column: 79 -*- |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
3 # vim: sw=4:ts=8:sts=4:textwidth=79 |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
4 import pygtk |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
5 import gtk |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
6 import glib |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
7 from copy import deepcopy |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
8 from lxml import etree |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
9 import random |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
10 import traceback |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
11 import time |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
12 import pybInkscape |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
13 import math |
1140 | 14 from tween import TweenObject |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
15 from frameline import frameline, frameruler |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
16 |
957 | 17 # Please refer to |
18 # http://www.assembla.com/wiki/show/MadButterfly/Inkscape_extention | |
19 # for the designed document. | |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
20 |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
21 |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
22 # Algorithm: |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
23 # |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
24 # We will parse the first two level of the SVG DOM. collect a table of |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
25 # layer and scene. |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
26 # - 1. Collect the layer table which will be displayed as the first |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
27 # column of the grid. |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
28 # - 2. Get the maximum scene number. This will decide the size of the |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
29 # grid. |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
30 # - 3. When F6 is pressed, we will check if this scene has been |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
31 # defined. This can be done by scan all second level group and |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
32 # check if the current scene number is within the range specified |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
33 # by scene field. The function IsSceneDefined(scene) can be used |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
34 # for this purpose. |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
35 # - 4. If this is a new scene, we will append a new group which |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
36 # duplication the content of the last scene in the same |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
37 # group. The scene field will contain the number from the last |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
38 # scene number of the last scene to the current scenen |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
39 # number. For example, if the last scene is from 4-7 and the new |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
40 # scene is 10, we will set the scene field as "8-10". |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
41 # - 5. If this scene are filled screne, we will split the existing |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
42 # scene into two scenes with the same content. |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
43 # |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
44 |
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
45 class Layer: |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
46 def __init__(self,node): |
962
6612fd386ea9
Rename Layer.scene to Layer.scenes since it is a list of scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
961
diff
changeset
|
47 self.scenes = [] |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
48 self.group = node |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
49 pass |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
50 pass |
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
51 |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
52 class Scene: |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
53 def __init__(self, node, start,end,typ): |
956 | 54 self.node = node |
55 self.start = int(start) | |
56 self.end = int(end) | |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
57 self.type = typ |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
58 pass |
956 | 59 pass |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
60 class DOM(pybInkscape.PYSPObject): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
61 def __init__(self,obj=None): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
62 self.proxy = obj |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
63 pass |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
64 |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
65 def duplicate(self,doc): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
66 return DOM(self.repr.duplicate(doc)) |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
67 |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
68 class ObjectWatcher(pybInkscape.PYNodeObserver): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
69 def __init__(self,obj,type,func,arg): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
70 self.obj = obj |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
71 self.type = type |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
72 self.func = func |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
73 self.arg = arg |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
74 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
75 def notifyChildAdded(self, node, child, prev): |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
76 if self.type == 'DOMNodeInserted': |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
77 self.func(node, child) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
78 def notifyChildRemoved(self, node, child, prev): |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
79 if self.type == 'DOMNodeRemoved': |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
80 self.func(node, child) |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
81 def notifyChildOrderChanged(self,node,child,prev): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
82 pass |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
83 def notifyContentChanged(self,node,old_content,new_content): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
84 if self.type == 'DOMSubtreeModified': |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
85 self.func(node) |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
86 def notifyAttributeChanged(self,node, name, old_value, new_value): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
87 if self.type == 'DOMAttrModified': |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
88 self.func(node, name, old_value, new_value) |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
89 |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
90 def addEventListener(obj, type, func,arg): |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
91 obs = ObjectWatcher(obj,type,func,arg) |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
92 obj.addSubtreeObserver(obs) |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
93 |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
94 |
957 | 95 _scenes = '{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scenes' |
96 _scene = '{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene' | |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
97 class LayerAttributeWatcher(pybInkscape.PYNodeObserver): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
98 def __init__(self,ui): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
99 self.ui = ui |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
100 def notifyChildAdded(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
101 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
102 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
103 def notifyChildRemoved(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
104 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
105 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
106 def notifyChildOrderChanged(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
107 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
108 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
109 def notifyContentChanged(self,node,old_content,new_content): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
110 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
111 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
112 def notifyAttributeChanged(self,node, name, old_value, new_value): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
113 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
114 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
115 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
116 class LayerAddRemoveWatcher(pybInkscape.PYNodeObserver): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
117 def __init__(self,ui): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
118 self.ui = ui |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
119 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
120 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
121 def notifyChildAdded(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
122 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
123 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
124 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
125 def notifyChildRemoved(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
126 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
127 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
128 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
129 def notifyChildOrderChanged(self,node,child,prev): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
130 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
131 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
132 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
133 def notifyContentChanged(self,node,old_content,new_content): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
134 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
135 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
136 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
137 def notifyAttributeChanged(self,node, name, old_value, new_value): |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
138 self.ui.updateUI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
139 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
140 |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
141 def _travel_DOM(node): |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
142 nodes = [node] |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
143 while nodes: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
144 node = nodes.pop(0) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
145 child = node.firstChild() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
146 while child: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
147 nodes.append(child) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
148 child = child.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
149 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
150 yield node |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
151 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
152 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
153 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
154 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
155 ## \brief Monitor changes of DOM-tree. |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
156 # |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
157 class MBScene_dom_monitor(object): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
158 def __init__(self, *args, **kws): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
159 super(MBScene_dom_monitor, self).__init__() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
160 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
161 self._id2node = {} # map ID to the node in the DOM tree. |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
162 self._group2scene = {} # map ID of a group to associated scene node. |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
163 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
164 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
165 def _start_monitor(self): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
166 self._collect_node_ids() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
167 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
168 doc = self._doc |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
169 addEventListener(doc,'DOMNodeInserted', self._on_insert_node, None) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
170 addEventListener(doc,'DOMNodeRemoved', self._on_remove_node, None) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
171 addEventListener(doc, 'DOMAttrModified', self._on_attr_modified, None) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
172 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
173 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
174 def _on_insert_node(self, node, child): |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
175 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
176 child_id = child.getAttribute('id') |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
177 except: |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
178 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
179 else: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
180 if child_id not in self._id2node: |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
181 self._id2node[child_id] = child |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
182 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
183 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
184 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
185 if child.name() == 'ns0:scene': |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
186 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
187 ref = child.getAttribute('ref') |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
188 except: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
189 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
190 else: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
191 if ref not in self._group2scene: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
192 self._group2scene[ref] = child |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
193 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
194 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
195 pass |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
196 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
197 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
198 def _on_remove_node(self, node, child): |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
199 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
200 child_id = child.getAttribute('id') |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
201 except: |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
202 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
203 else: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
204 if child_id not in self._id2node: |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
205 raise ValueError, \ |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
206 'remove a node that is never known (%s)' % (child_id) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
207 del self._id2node[child_id] |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
208 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
209 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
210 if child.name() == 'ns0:scene': |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
211 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
212 ref = child.getAttribute('ref') |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
213 except: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
214 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
215 else: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
216 del self._group2scene[ref] |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
217 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
218 pass |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
219 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
220 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
221 def _on_attr_modified(self, node, name, old_value, new_value): |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
222 if name == 'id' and old_value != new_value: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
223 if old_value and (old_value not in self._id2node): |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
224 raise ValueError, \ |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
225 'old ID value of passed node is invalid one (%s)' % \ |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
226 (old_value) |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
227 if (new_value in self._id2node): |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
228 raise ValueError, \ |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
229 'new ID value of passed node is invalid one (%s)' % \ |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
230 (new_value) |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
231 |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
232 if old_value: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
233 del self._id2node[old_value] |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
234 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
235 self._id2node[new_value] = node |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
236 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
237 elif name == 'ref' and node.name() == 'ns0:scene': |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
238 if old_value == new_value: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
239 return |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
240 if old_value: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
241 node = self._group2scene[old_value] # use old node. Binding |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
242 # may generate a new |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
243 # wrapper. |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
244 del self._group2scene[old_value] |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
245 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
246 if new_value: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
247 self._group2scene[new_value] = node |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
248 pass |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
249 return |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
250 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
251 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
252 def _collect_node_ids(self): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
253 self._id2node = {} |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
254 root = self._root |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
255 for n in root.childList(): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
256 self._collect_node_ids_recursive(n) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
257 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
258 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
259 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
260 def _collect_node_ids_recursive(self, node): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
261 try: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
262 node_id = node.getAttribute('id') |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
263 except: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
264 return |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
265 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
266 self._id2node[node_id] = node |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
267 for n in node.childList(): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
268 self._collect_node_ids_recursive(n) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
269 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
270 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
271 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
272 def get_node(self, node_id): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
273 return self._id2node[node_id] |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
274 |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
275 def get_scene(self, group_id): |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
276 return self._group2scene[group_id] |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
277 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
278 def new_id(self): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
279 while True: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
280 candidate = 's%d' % int(random.random()*100000) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
281 if candidate not in self._id2node: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
282 return candidate |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
283 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
284 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
285 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
286 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
287 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
288 ## \brief Layer of MBScene to manipulate DOM tree. |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
289 # |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
290 class MBScene_dom(MBScene_dom_monitor): |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
291 # Declare variables, here, for keeping tracking |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
292 _doc = None |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
293 _root = None |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
294 _scenes_group = None |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
295 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
296 def __init__(self, *args, **kws): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
297 super(MBScene_dom, self).__init__() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
298 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
299 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
300 def handle_doc_root(self, doc, root): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
301 self._doc = doc |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
302 self._root = root |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
303 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
304 self._start_monitor() # start MBScene_dom_monitor |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
305 self._init_metadata() |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
306 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
307 |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
308 def dumpattr(self, n): |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
309 s = "" |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
310 for a,v in n.attrib.items(): |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
311 s = s + ("%s=%s" % (a,v)) |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
312 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
313 return s |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
314 |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
315 def dump(self, node, l=0): |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
316 print " " * l*2,"<", node.tag, self.dumpattr(node),">" |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
317 for n in node: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
318 self.dump(n, l+1) |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
319 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
320 print " " * l * 2,"/>" |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
321 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
322 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
323 def _parse_one_scene(self, scene_node): |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
324 assert scene_node.name() == 'ns0:scene' |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
325 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
326 start = int(scene_node.getAttribute("start")) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
327 try: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
328 end = int(scene_node.getAttribute("end")) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
329 except: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
330 end = start |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
331 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
332 |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
333 try: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
334 scene_type = scene_node.getAttribute('type') |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
335 if scene_type == None: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
336 scene_type = 'normal' |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
337 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
338 except: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
339 scene_type = 'normal' |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
340 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
341 |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
342 return start, end, scene_type |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
343 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
344 def _parse_one_scenes(self, scenes_node): |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
345 self.scenemap = {} |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
346 try: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
347 cur = int(n.getAttribute("current")) |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
348 except: |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
349 cur = 0 |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
350 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
351 self.current = cur |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
352 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
353 for scene_node in scenes_node.childList(): |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
354 if scene_node.name() != 'ns0:scene': |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
355 continue |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
356 |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
357 try: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
358 start, end, scene_type = self._parse_one_scene(scene_node) |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
359 except: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
360 continue |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
361 |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
362 if end > self.maxframe: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
363 self.maxframe = end |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
364 pass |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
365 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
366 link = scene_node.getAttribute("ref") |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
367 self.scenemap[link] = (start, end, scene_type) |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
368 if cur >= start and cur <= end: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
369 self.currentscene = link |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
370 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
371 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
372 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
373 |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
374 def _init_metadata(self): |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
375 for node in self._root.childList(): |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
376 if node.name() == 'svg:metadata': |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
377 break |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
378 pass |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
379 else: |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
380 raise RuntimeError, \ |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
381 'can not find <svg:metadata> node in the document' |
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
382 |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
383 for n in node.childList(): |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
384 if n.name() == 'ns0:scenes': |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
385 self._scenes_node = n |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
386 break |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
387 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
388 else: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
389 ns = "http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd" |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
390 self._root.setAttribute("xmlns:ns0", ns) |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
391 scenes_node = self._doc.createElement("ns0:scenes") |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
392 node.appendChild(scenes_node) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
393 self._scenes_node = scenes_node |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
394 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
395 pass |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
396 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
397 ## \brief Create and add a ns0:scene node under ns0:scenes subtree. |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
398 # |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
399 def _add_scene_node(self, start, end, |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
400 frame_type=TweenObject.TWEEN_TYPE_NORMAL, |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
401 ref=None): |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
402 type_names = ('normal', 'scale') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
403 scenes_node = self._scenes_node |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
404 doc = self._doc |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
405 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
406 scene_node = doc.createElement('ns0:scene') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
407 scene_node.setAttribute('start', str(start)) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
408 if start != end: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
409 self._chg_scene_node(scene_node, end=end) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
410 pass |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
411 type_name = type_names[frame_type] |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
412 scene_node.setAttribute('type', type_name) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
413 if ref: |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
414 scene_node.setAttribute('ref', ref) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
415 pass |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
416 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
417 scenes_node.appendChild(scene_node) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
418 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
419 return scene_node |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
420 |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
421 def _chg_scene_node(self, scene_node, start=None, end=None, |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
422 tween_type=None, ref=None): |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
423 if start: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
424 scene_node.setAttribute('start', str(start)) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
425 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
426 if end: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
427 scene_node.setAttribute('end', str(end)) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
428 if int(end) > self.maxframe: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
429 self.maxframe = int(end) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
430 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
431 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
432 if tween_type: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
433 scene_node.setAttribute('type', tween_type) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
434 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
435 if ref: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
436 scene_node.setAttribute('ref', ref) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
437 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
438 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
439 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
440 ## \brief Create and add a svg:g for a scene under a group for a layer. |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
441 # |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
442 def _add_scene_group(self, layer_idx): |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
443 layer = self.layers[layer_idx] |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
444 doc = self._doc |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
445 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
446 scene_group = doc.createElement('svg:g') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
447 gid = self.new_id() |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
448 scene_group.setAttribute("id", gid) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
449 scene_group.setAttribute("inkscape:groupmode", "layer") |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
450 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
451 layer.group.appendChild(scene_group) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
452 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
453 return scene_group |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
454 |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
455 def insertKeyScene(self, line, frame): |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
456 """ |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
457 Insert a new key scene into the stage. If the nth is always a |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
458 key scene, we will return without changing anything. If the |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
459 nth is a filled scene, we will break the original scene into |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
460 two parts. If the nth is out of any scene, we will append a |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
461 new scene. |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
462 |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
463 """ |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
464 doc = self._doc |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
465 layer_idx = self._framelines.index(line) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
466 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
467 scene_group = self._add_scene_group(layer_idx) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
468 scene_group_id = scene_group.getAttribute('id') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
469 scene_node = self._add_scene_node(frame, frame, ref=scene_group_id) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
470 line.add_keyframe(frame, scene_node) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
471 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
472 for node in self.layers[layer_idx].group.childList(): |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
473 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
474 label = node.getAttribute('inkscape:label') |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
475 except: |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
476 continue |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
477 if label == 'dup': |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
478 node.setAttribute('style', 'display: none') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
479 pass |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
480 pass |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
481 pass |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
482 |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
483 def add_scene_on_dom(self, frameline, scenes_node): |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
484 doc = self._doc |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
485 for start_idx, stop_idx, tween_type in frameline.get_frame_blocks(): |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
486 scene_node = frameline.get_frame_data(start_idx) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
487 tween_type_idx = self._frameline_tween_types.index(tween_type) |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
488 tween_type_name = self._tween_type_names[tween_type_idx] |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
489 |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
490 scene_node = doc.createElement("ns0:scene") |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
491 scenes_node.appendChild(scene_node) |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
492 scene_node.setAttribute("start", str(start_idx + 1)) |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
493 if start_idx != stop_idx: |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
494 scene_node.setAttribute("end", str(stop_idx + 1)) |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
495 pass |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
496 scene_node.setAttribute("ref", scene_node.getAttribute("ref")) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
497 scene_node.setAttribute("type", tween_type_name) |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
498 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
499 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
500 |
1197
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
501 # TODO: this function should be removed. |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
502 def update_scenes_of_dom(self): |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
503 doc = self._root |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
504 rdoc = self._doc |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
505 for node in doc.childList(): |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
506 if node.name() == 'svg:metadata': |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
507 for t in node.childList(): |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
508 if t.name() == "ns0:scenes": |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
509 node.removeChild(t) |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
510 scenes_node = rdoc.createElement("ns0:scenes") |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
511 node.appendChild(scenes_node) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
512 for layer in range(0, len(self._framelines)): |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
513 lobj = self._framelines[layer] |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
514 self.add_scene_on_dom(lobj, scenes_node) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
515 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
516 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
517 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
518 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
519 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
520 pass |
956 | 521 |
522 def parseScene(self): | |
523 """ | |
957 | 524 In this function, we will collect all items for the current |
525 scene and then relocate them back to the appropriate scene | |
526 object. | |
956 | 527 """ |
961
b6375e74c69e
Rename MBScene.layer to MBScene.layers
Thinker K.F. Li <thinker@codemud.net>
parents:
960
diff
changeset
|
528 self.layers = [] |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
529 doc = self._root |
956 | 530 |
1184
05d33f0fbc76
Add comment for some TODO item
Thinker K.F. Li <thinker@codemud.net>
parents:
1183
diff
changeset
|
531 # TODO: Remove following code sicne this function is for parsing. |
05d33f0fbc76
Add comment for some TODO item
Thinker K.F. Li <thinker@codemud.net>
parents:
1183
diff
changeset
|
532 # Why do this here? |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
533 addEventListener(doc,'DOMNodeInserted',self.updateUI,None) |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
534 addEventListener(doc,'DOMNodeRemoved',self.updateUI,None) |
1184
05d33f0fbc76
Add comment for some TODO item
Thinker K.F. Li <thinker@codemud.net>
parents:
1183
diff
changeset
|
535 |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
536 doc.childList() |
1131 | 537 try: |
1141 | 538 self.width = float(doc.getAttribute("width")) |
539 self.height= float(doc.getAttribute("height")) | |
1131 | 540 except: |
541 self.width = 640 | |
542 self.height=480 | |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
543 pass |
1131 | 544 |
956 | 545 for node in doc.childList(): |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
546 if node.name() == 'svg:g': |
956 | 547 oldscene = None |
548 lyobj = Layer(node) | |
961
b6375e74c69e
Rename MBScene.layer to MBScene.layers
Thinker K.F. Li <thinker@codemud.net>
parents:
960
diff
changeset
|
549 self.layers.append(lyobj) |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
550 for scene_group in node.childList(): |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
551 if scene_group.name() != 'svg:g': |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
552 continue |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
553 |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
554 try: |
1192
79a3f82edaac
Fix issue of losing keyframe after inerst a node in the scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1191
diff
changeset
|
555 label = scene_group.getAttribute('inkscape:label') |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
556 if label == 'dup': |
1192
79a3f82edaac
Fix issue of losing keyframe after inerst a node in the scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1191
diff
changeset
|
557 continue |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
558 except: |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
559 pass |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
560 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
561 try: |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
562 scene_group_id = scene_group.getAttribute('id') |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
563 scene_node = self.get_scene(scene_group_id) |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
564 start, stop, tween_type = \ |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
565 self._parse_one_scene(scene_node) |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
566 except: |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
567 continue |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
568 |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
569 lyobj.scenes.append(Scene(scene_node, start, stop, |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
570 tween_type)) |
956 | 571 pass |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
572 pass |
956 | 573 pass |
574 pass | |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
575 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
576 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
577 class MBScene(MBScene_dom): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
578 _frameline_tween_types = (frameline.TWEEN_TYPE_NONE, |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
579 frameline.TWEEN_TYPE_SHAPE) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
580 _tween_obj_tween_types = (TweenObject.TWEEN_TYPE_NORMAL, |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
581 TweenObject.TWEEN_TYPE_SCALE) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
582 _tween_type_names = ('normal', 'scale') |
956 | 583 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
584 def __init__(self, desktop, win, root=None): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
585 super(MBScene, self).__init__() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
586 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
587 self.desktop = desktop |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
588 self.window = win |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
589 self.layers = [] |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
590 self.layers.append(Layer(None)) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
591 self.top = None |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
592 self.last_update = None |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
593 pybInkscape.inkscape.connect('change_selection', self.show_selection) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
594 self.last_select = None |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
595 self._lockui=False |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
596 self.tween=None |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
597 self.document = None |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
598 self.root = root |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
599 self.framerate=12 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
600 self.maxframe=0 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
601 self._disable_tween_type_selector = False |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
602 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
603 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
604 def show_selection(self,w,obj): |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
605 objs = self.desktop.selection.list() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
606 try: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
607 o = objs[0] |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
608 print o.getCenter() |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
609 if o == self.last_select: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
610 return |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
611 except: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
612 self.nameEditor.set_text('') |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
613 self.last_select = None |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
614 return |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
615 self.last_select = o |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
616 try: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
617 self.nameEditor.set_text(o.getAttribute("inkscape:label")) |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
618 except: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
619 self.nameEditor.set_text('') |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
620 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
621 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
622 |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
623 def removeKeyScene(self, frameline, frame_idx): |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
624 start, end, scene_type = frameline.get_frame_block(frame_idx) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
625 scene_node = frameline.get_frame_data(start) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
626 |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
627 frameline.rm_keyframe(start) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
628 if start != end: |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
629 frameline.rm_keyframe(end) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
630 pass |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
631 |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
632 scene_group_id = scene_node.getAttribute('ref') |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
633 scene_group = self.get_node(scene_group_id) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
634 scene_group.parent().removeChild(scene_group) |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
635 scene_node.parent().removeChild(scene_node) |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
636 |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
637 try: |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
638 frameline.duplicateGroup.setAttribute('style', 'display: none') |
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
639 except AttributeError: |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
640 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
641 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
642 |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
643 def extendScene(self): |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
644 frame_idx = self.last_frame |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
645 frameline = self.last_line |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
646 |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
647 start, end, scene_type = frameline.get_frame_block_floor(frame_idx) |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
648 if frame_idx <= end: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
649 return |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
650 |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
651 if start < end: |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
652 frameline.rm_keyframe(end) |
956 | 653 pass |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
654 |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
655 scene_node = frameline.get_frame_data(start) |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
656 self._chg_scene_node(scene_node, end=frame_idx) |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
657 frameline.add_keyframe(frame_idx) |
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
658 frameline.tween(start, scene_type) |
956 | 659 pass |
660 | |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
661 def setCurrentScene(self, idx): |
1123 | 662 """ |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
663 Update the scene group according to the curretn scene |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
664 data. There are a couple of cases. |
1148 | 665 1. If the type of the scene is normal, we display it when |
666 it contains the current frame. Otherwise hide it. | |
667 2. If the type of the scene is relocate or scale, we need | |
668 to duplicate the scene group and then modify its | |
669 transform matrix according to the definition of the | |
670 scene. Then, hide the original scenr group and display | |
671 the duplciate scene group. In addition, we may need to | |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
672 delete the old duplicated scene group as well. |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
673 |
1148 | 674 For each layer, we will always use the duplicated scene |
675 group whose name as dup. | |
676 We will put the duplicated scene group inside it. We will | |
677 create this group if it is not | |
1123 | 678 available. |
679 """ | |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
680 self.current = idx |
1140 | 681 self.tween.updateMapping() |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
682 for frameline in self._framelines: |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
683 i=0 |
1123 | 684 |
685 # Check the duplicated scene group and create it if it is not available | |
686 try: | |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
687 frameline.duplicateGroup.setAttribute("style","display:none") |
1123 | 688 except: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
689 print "*" * 40 |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
690 layer_idx = frameline.layer_idx |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
691 layer = self.layers[layer_idx] |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
692 for child in layer.group.childList(): |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
693 label = child.getAttribute('inkscape:label') |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
694 if label == 'dup': |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
695 frameline.duplicateGroup = child |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
696 break |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
697 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
698 else: |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
699 duplicateGroup = self.document.createElement("svg:g") |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
700 duplicateGroup.setAttribute("inkscape:label","dup") |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
701 duplicateGroup.setAttribute("sodipodi:insensitive","1") |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
702 duplicateGroup.setAttribute("style","") |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
703 frameline.layer.group.appendChild(duplicateGroup) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
704 frameline.duplicateGroup = duplicateGroup |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
705 pass |
1123 | 706 pass |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
707 |
1123 | 708 # Create a new group |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
709 for start_idx, stop_idx, tween_type in frameline.get_frame_blocks(): |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
710 if start_idx == stop_idx: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
711 scene_node = frameline.get_frame_data(start_idx) |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
712 scene_group_id = scene_node.getAttribute('ref') |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
713 scene_group = self.get_node(scene_group_id) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
714 if idx == start_idx: |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
715 scene_group.setAttribute('style', '') |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
716 else: |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
717 scene_group.setAttribute('style', 'display: none') |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
718 pass |
1155
5db4d769387c
Show the frame when we select the keyframe. The duplicated group must be shown only in the tweened frame
wycc
parents:
1151
diff
changeset
|
719 elif idx == start_idx: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
720 frameline.duplicateGroup.setAttribute("style","display:none") |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
721 scene_node = frameline.get_frame_data(start_idx) |
1196
42f8cee2118b
Fix the issue that is falut to show first frame of a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1195
diff
changeset
|
722 scene_group_id = scene_node.getAttribute('ref') |
42f8cee2118b
Fix the issue that is falut to show first frame of a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1195
diff
changeset
|
723 scene_group = self.get_node(scene_group_id) |
42f8cee2118b
Fix the issue that is falut to show first frame of a tween
Thinker K.F. Li <thinker@codemud.net>
parents:
1195
diff
changeset
|
724 scene_group.setAttribute("style","") |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
725 elif start_idx < idx and stop_idx >= idx: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
726 scene_node = frameline.get_frame_data(start_idx) |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
727 scene_group_id = scene_node.getAttribute('ref') |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
728 scene_group = self.get_node(scene_group_id) |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
729 scene_group.setAttribute("style","display:none") |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
730 frameline.duplicateGroup.setAttribute("style","") |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
731 tween_type_idx = \ |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
732 self._frameline_tween_types.index(tween_type) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
733 tween_obj_tween_type = \ |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
734 self._tween_obj_tween_types[tween_type_idx] |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
735 |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
736 try: |
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
737 next_idx, next_stop_idx, next_tween_type = \ |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
738 frameline.get_frame_block(stop_idx + 1) |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
739 except: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
740 next_scene_node = scene_node |
1163 | 741 else: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
742 next_scene_node = frameline.get_frame_data(next_idx) |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
743 pass |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
744 |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
745 next_scene_group_id = next_scene_node.getAttribute('ref') |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
746 next_scene_group = self.get_node(next_scene_group_id) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
747 |
1160
1a699dc00fa3
Fix the issue of not removing node in old scene when switching scenes.
Thinker K.F. Li <thinker@codemud.net>
parents:
1159
diff
changeset
|
748 nframes = stop_idx - start_idx + 1 |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
749 percent = float(idx - start_idx) / nframes |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
750 print tween_obj_tween_type |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
751 self.tween.updateTweenContent(frameline.duplicateGroup, |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
752 tween_obj_tween_type, |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
753 scene_group, |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
754 next_scene_group, |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
755 percent) |
959
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
756 else: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
757 scene_node = frameline.get_frame_data(start_idx) |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
758 scene_group_id = scene_node.getAttribute('ref') |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
759 scene_group = self.get_node(scene_group_id) |
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
760 scene_group.setAttribute("style","display:none") |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
761 pass |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
762 pass |
956 | 763 pass |
764 pass | |
1125 | 765 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
766 def enterGroup(self, obj): |
1070
afa42d5836cc
Call setCurrentLayer to enter the current scene group.
wycc
parents:
1064
diff
changeset
|
767 for l in self.layers: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
768 for s in l.group.childList(): |
1139
a2b068594412
Use pybind with new DOM API (at PYNode).
Thinker K.F. Li <thinker@codemud.net>
parents:
1136
diff
changeset
|
769 if s.getAttribute('id') == obj.getAttribute("id"): |
1142
dd6c60c6f41e
Use getAttribute()/spitem instead of .label and DOMtoItem().
Thinker K.F. Li <thinker@codemud.net>
parents:
1141
diff
changeset
|
770 self.desktop.setCurrentLayer(s.spitem) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
771 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
772 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
773 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
774 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
775 |
1178
416e41952b76
Fix issue that pyink does not switch current layer to the new key scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1177
diff
changeset
|
776 def selectSceneObject(self, frameline, frame_idx): |
1177
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
777 try: |
1178
416e41952b76
Fix issue that pyink does not switch current layer to the new key scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1177
diff
changeset
|
778 start, stop, tween_type = frameline.get_frame_block(frame_idx) |
1177
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
779 except: |
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
780 return |
1070
afa42d5836cc
Call setCurrentLayer to enter the current scene group.
wycc
parents:
1064
diff
changeset
|
781 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
782 scene_node = frameline.get_frame_data(start) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
783 scene_group_id = scene_node.getAttribute('ref') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
784 scene_group = self.get_node(scene_group_id) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
785 self.enterGroup(scene_group) |
1177
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
786 self.setTweenType(tween_type) |
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
787 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
788 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
789 def setTweenType(self, tween_type): |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
790 sel_type = MBScene._frameline_tween_types.index(tween_type) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
791 self._disable_tween_type_selector = True |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
792 self.tweenTypeSelector.set_active(sel_type) |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
793 self._disable_tween_type_selector = False |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
794 pass |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
795 |
956 | 796 def newCell(self,file): |
797 img = gtk.Image() | |
798 img.set_from_file(file) | |
799 btn = gtk.EventBox() | |
800 btn.add(img) | |
801 btn.connect("button_press_event", self.cellSelect) | |
802 btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) | |
803 return btn | |
804 | |
1179
b65df4f0d30a
Change signature of MBScene.insertKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents:
1178
diff
changeset
|
805 def onCellClick(self, line, frame, but): |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
806 self.last_line = line |
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
807 self.last_frame = frame |
976
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
808 self.last_line.active_frame(frame) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
809 self._lockui = True |
1179
b65df4f0d30a
Change signature of MBScene.insertKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents:
1178
diff
changeset
|
810 self.doEditScene(None) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
811 self._lockui = False |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
812 pass |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
813 |
976
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
814 def _remove_active_frame(self,widget,event): |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
815 """ |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
816 Hide all hover frames. This is a hack. We should use the lost focus event |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
817 instead in the future to reduce the overhead. |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
818 """ |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
819 for f in self._framelines: |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
820 if f != widget: |
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
821 f.hide_hover() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
822 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
823 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
824 pass |
976
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
825 |
963
a05ec4fb1c20
update framelines according content 0f layers
Thinker K.F. Li <thinker@codemud.net>
parents:
962
diff
changeset
|
826 def _create_framelines(self): |
1166
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
827 if not hasattr(self, 'scrollwin'): |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
828 self.scrollwin = gtk.ScrolledWindow() |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
829 self.scrollwin.set_policy(gtk.POLICY_AUTOMATIC, |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
830 gtk.POLICY_AUTOMATIC) |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
831 self.scrollwin.set_size_request(-1,150) |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
832 vbox = gtk.VBox() |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
833 vbox.show() |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
834 self.scrollwin.add_with_viewport(vbox) |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
835 self.scrollwin_vbox = vbox |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
836 else: |
1174 | 837 for c in self.scrollwin_vbox.get_children(): |
838 self.scrollwin_vbox.remove(c) | |
839 vbox = self.scrollwin_vbox | |
1166
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
840 pass |
959
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
841 |
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
842 nframes = 100 |
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
843 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
844 ruler = frameruler(nframes) |
959
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
845 ruler.set_size_request(nframes * 10, 20) |
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
846 ruler.show() |
1032 | 847 hbox = gtk.HBox() |
848 label=gtk.Label('') | |
849 label.set_size_request(100,0) | |
850 hbox.pack_start(label,expand=False,fill=True) | |
851 hbox.pack_start(ruler) | |
852 vbox.pack_start(hbox, False) | |
959
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
853 |
960
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
854 # |
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
855 # Add a frameline for each layer |
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
856 # |
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
857 self._framelines = [] |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
858 for i in range(len(self.layers)-1,-1,-1): |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
859 line = frameline(nframes) |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
860 hbox = gtk.HBox() |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
861 label = gtk.Label(self.layers[i].group.getAttribute("inkscape:label")) |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
862 label.set_size_request(100,0) |
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
863 hbox.pack_start(label,expand=False,fill=True) |
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
864 hbox.pack_start(line) |
960
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
865 line.set_size_request(nframes * 10, 20) |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
866 vbox.pack_start(hbox, False) |
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
867 line.label = label |
960
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
868 self._framelines.append(line) |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
869 line.connect(line.FRAME_BUT_PRESS, self.onCellClick) |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
870 line.layer_idx = i |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
871 line.layer_group = self.layers[i].group |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
872 line.layer = self.layers[i] |
976
ab09c536a137
Hide the hover of all inactive framelines. This fix the issue of multiple hover in every frameline objects.
wycc
parents:
975
diff
changeset
|
873 line.connect('motion-notify-event', self._remove_active_frame) |
960
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
874 pass |
1174 | 875 vbox.show_all() |
960
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
876 pass |
8fd97e0becb3
Add a frameline for each layer
Thinker K.F. Li <thinker@codemud.net>
parents:
959
diff
changeset
|
877 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
878 ## \brief Update conetent of framelines according layers. |
963
a05ec4fb1c20
update framelines according content 0f layers
Thinker K.F. Li <thinker@codemud.net>
parents:
962
diff
changeset
|
879 # |
a05ec4fb1c20
update framelines according content 0f layers
Thinker K.F. Li <thinker@codemud.net>
parents:
962
diff
changeset
|
880 def _update_framelines(self): |
983
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
881 for frameline in self._framelines: |
ee31add87843
Change the order of layer in the scene editor to make it consistent with the inkscape layer manager
wycc
parents:
982
diff
changeset
|
882 layer = frameline.layer |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
883 if frameline.layer_group.getAttribute("inkscape:label")==None: |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
884 frameline.label.set_text('???') |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
885 else: |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
886 frameline.label.set_text(frameline.layer_group.getAttribute("inkscape:label")) |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
887 last_scene = None |
962
6612fd386ea9
Rename Layer.scene to Layer.scenes since it is a list of scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
961
diff
changeset
|
888 for scene in layer.scenes: |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
889 if last_scene and last_scene.end == scene.start: |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
890 frameline.setRightTween(last_scene.end) |
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
891 else: |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
892 frameline.add_keyframe(scene.start, scene.node) |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
893 last_scene = scene |
973
84f502fb3e40
Rewrite the MBScene to use framelines. The old layers/scenes data structure is used to load the scenes only. We should remove it completely in the future.
wycc
parents:
964
diff
changeset
|
894 if scene.start != scene.end: |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
895 frameline.add_keyframe(scene.end, scene.node) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
896 tween_type_idx = self._tween_type_names.index(scene.type) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
897 tween_type = self._frameline_tween_types[tween_type_idx] |
1198
164076156e04
Fix bug of insert a new node in a tween frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1197
diff
changeset
|
898 frameline.tween(scene.start, tween_type) |
962
6612fd386ea9
Rename Layer.scene to Layer.scenes since it is a list of scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
961
diff
changeset
|
899 pass |
6612fd386ea9
Rename Layer.scene to Layer.scenes since it is a list of scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
961
diff
changeset
|
900 pass |
959
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
901 pass |
67823f7a0a17
Use frameline module in MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
957
diff
changeset
|
902 |
956 | 903 def cellSelect(self, cell, data): |
904 if self.last_cell: | |
957 | 905 color = self.last_cell.get_colormap().alloc_color("gray") |
906 self.last_cell.modify_bg(gtk.STATE_NORMAL, color) | |
956 | 907 pass |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
908 |
956 | 909 self.last_cell = cell |
957 | 910 color = cell.get_colormap().alloc_color("green") |
911 cell.modify_bg(gtk.STATE_NORMAL, color) | |
956 | 912 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
913 |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
914 def duplicateKeyScene(self): |
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
915 # Search for the current scene |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
916 frameline = self.last_line |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
917 frame_idx = self.last_frame |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
918 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
919 try: |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
920 start, end, scene_type = frameline.get_frame_block_floor(frame_idx) |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
921 except: |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
922 return |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
923 if end >= frame_idx: |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
924 return |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
925 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
926 prev_scene_node = frameline.get_frame_data(start) |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
927 prev_scene_group_id = prev_scene_node.getAttribute('ref') |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
928 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
929 scene_group = self.duplicateSceneGroup(prev_scene_group_id) |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
930 scene_group_id = scene_group.getAttribute('id') |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
931 scene_node = self._add_scene_node(frame_idx, frame_idx, |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
932 ref=scene_group_id) |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
933 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
934 frameline.add_keyframe(frame_idx, scene_node) |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
935 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
936 self.setCurrentScene(frame_idx) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
937 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
938 |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
939 def duplicateSceneGroup(self,gid): |
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
940 # Search for the duplicated group |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
941 doc = self.root |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
942 rdoc = self.document |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
943 orig = None |
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
944 for node in doc.childList(): |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
945 if node.name() == 'svg:g': |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
946 for t in node.childList(): |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
947 if t.name() == "svg:g": |
1139
a2b068594412
Use pybind with new DOM API (at PYNode).
Thinker K.F. Li <thinker@codemud.net>
parents:
1136
diff
changeset
|
948 if t.getAttribute("id") == gid: |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
949 orig = t |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
950 break |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
951 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
952 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
953 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
954 pass |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
955 if orig == None: |
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
956 return None |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
957 scene_group = orig.duplicate(rdoc) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
958 |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
959 old_nodes = _travel_DOM(orig) |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
960 new_nodes = _travel_DOM(scene_group) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
961 for old_node in old_nodes: |
1164
2cb5047d8f2b
Add support to insert key frame in the middle of the tween.
wycc
parents:
1163
diff
changeset
|
962 print old_node |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
963 old_node_id = old_node.getAttribute('id') |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
964 new_node = new_nodes.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
965 new_node.setAttribute('ns0:duplicate-src', old_node_id) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
966 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
967 |
1190
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
968 gid = self.last_line.layer_group.getAttribute("inkscape:label")+self.new_id() |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
969 scene_group.setAttribute("id",gid) |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
970 scene_group.setAttribute("inkscape:groupmode","layer") |
a4df892fb4e5
Use meaningful name for scene, scene group, and layer group
Thinker K.F. Li <thinker@codemud.net>
parents:
1189
diff
changeset
|
971 self.last_line.layer_group.appendChild(scene_group) |
1193
0e3a65b7b00c
Simplify extendScened()
Thinker K.F. Li <thinker@codemud.net>
parents:
1192
diff
changeset
|
972 return scene_group |
956 | 973 |
1178
416e41952b76
Fix issue that pyink does not switch current layer to the new key scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1177
diff
changeset
|
974 def doEditScene(self, w): |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
975 self.setCurrentScene(self.last_frame) |
1179
b65df4f0d30a
Change signature of MBScene.insertKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents:
1178
diff
changeset
|
976 self.selectSceneObject(self.last_line, self.last_frame) |
956 | 977 pass |
978 | |
979 def doInsertKeyScene(self,w): | |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
980 self._lockui=True |
1179
b65df4f0d30a
Change signature of MBScene.insertKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents:
1178
diff
changeset
|
981 self.insertKeyScene(self.last_line, self.last_frame) |
1178
416e41952b76
Fix issue that pyink does not switch current layer to the new key scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1177
diff
changeset
|
982 self.selectSceneObject(self.last_line, self.last_frame) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
983 self._lockui=False |
956 | 984 # self.grid.show_all() |
985 return | |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
986 |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
987 def doDuplicateKeyScene(self,w): |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
988 self._lockui = True |
1097
52d8bf5d12b4
Implement the function to duplicate the previous scene. This require the latest inkscape-pybind, which contains duplicate() for the Node
wycc
parents:
1070
diff
changeset
|
989 self.duplicateKeyScene() |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
990 self._lockui = False |
956 | 991 |
992 def doRemoveScene(self,w): | |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
993 self._lockui = True |
1200
213f03dbfc41
Fix issue of removing a scene
Thinker K.F. Li <thinker@codemud.net>
parents:
1199
diff
changeset
|
994 self.removeKeyScene(self.last_line, self.last_frame) |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
995 self._lockui = False |
956 | 996 return |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
997 |
956 | 998 |
999 def doExtendScene(self,w): | |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1000 self._lockui = True |
956 | 1001 self.extendScene() |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1002 self._lockui = False |
956 | 1003 pass |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1004 |
1099
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1005 def changeObjectLabel(self,w): |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1006 o = self.desktop.selection.list()[0] |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
1007 o.setAttribute("inkscape:label", self.nameEditor.get_text()) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1008 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1009 |
1099
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1010 def addNameEditor(self,hbox): |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1011 self.nameEditor = gtk.Entry(max=40) |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1012 hbox.pack_start(self.nameEditor,expand=False,fill=False) |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1013 self.editDone = gtk.Button('Set') |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1014 hbox.pack_start(self.editDone,expand=False,fill=False) |
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1015 self.editDone.connect('clicked', self.changeObjectLabel) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1016 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1017 |
1147 | 1018 def doRun(self,arg): |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1019 """ |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1020 Execute the current animation till the last frame. |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1021 """ |
1147 | 1022 if self.btnRun.get_label() == "Run": |
1023 self.btnRun.set_label("Stop") | |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1024 self._lockui = True |
1147 | 1025 self.last_update = glib.timeout_add(1000/self.framerate,self.doRunNext) |
1026 else: | |
1027 self.btnRun.set_label("Run") | |
1028 glib.source_remove(self.last_update) | |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1029 self._lockui = False |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1030 pass |
1147 | 1031 |
1032 def doRunNext(self): | |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
1033 if self.current > self.maxframe: |
1147 | 1034 self.current = 0 |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1035 try: |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
1036 self.setCurrentScene(self.current) |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1037 except: |
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1038 traceback.print_exc() |
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1039 raise |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
1040 self.current = self.current + 1 |
1147 | 1041 self.last_update = glib.timeout_add(1000/self.framerate,self.doRunNext) |
1174 | 1042 |
956 | 1043 def addButtons(self,hbox): |
1044 btn = gtk.Button('Insert Key') | |
1045 btn.connect('clicked',self.doInsertKeyScene) | |
1046 hbox.pack_start(btn,expand=False,fill=False) | |
1174 | 1047 |
956 | 1048 btn=gtk.Button('Remove Key') |
1049 btn.connect('clicked', self.doRemoveScene) | |
1050 hbox.pack_start(btn,expand=False,fill=False) | |
1174 | 1051 |
956 | 1052 btn=gtk.Button('Extend scene') |
1053 btn.connect('clicked', self.doExtendScene) | |
1054 hbox.pack_start(btn,expand=False,fill=False) | |
1174 | 1055 |
1056 btn=gtk.Button('Duplicate Key') | |
1057 btn.connect('clicked', self.doDuplicateKeyScene) | |
1058 hbox.pack_start(btn,expand=False,fill=False) | |
1059 | |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1060 btn=gtk.Button('Run') |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1061 btn.connect('clicked', self.doRun) |
1147 | 1062 self.btnRun = btn |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
1063 hbox.pack_start(btn,expand=False,fill=False) |
1174 | 1064 |
1099
5ba2cab1d505
Add name editor to edit the inkscape:label withgout using the object property editor. This is more Flash-like operation.
wycc
parents:
1097
diff
changeset
|
1065 self.addNameEditor(hbox) |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1066 self.addTweenTypeSelector(hbox) |
956 | 1067 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1068 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1069 def onTweenTypeChange(self, w): |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1070 if self._disable_tween_type_selector: |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1071 return |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1072 |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1073 if self.last_line == None: |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1074 return |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1075 frameline = self.last_line |
1197
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1076 start, end, old_tween_type = frameline.get_frame_block(self.last_frame) |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1077 |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1078 type_idx = self.tweenTypeSelector.get_active() |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1079 tween_type = MBScene._frameline_tween_types[type_idx] |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1080 type_name = self._tween_type_names[type_idx] |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1081 |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1082 frameline.tween(start, tween_type) |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1083 |
8c5492b096f1
Fix bug of changing tween type
Thinker K.F. Li <thinker@codemud.net>
parents:
1196
diff
changeset
|
1084 scene_node = frameline.get_frame_data(start) |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
1085 self._chg_scene_node(scene_node, tween_type=type_name) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1086 pass |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1087 |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1088 def addTweenTypeSelector(self,hbox): |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1089 tweenbox = gtk.HBox() |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1090 label = gtk.Label('Tween Type') |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1091 tweenbox.pack_start(label) |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1092 |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1093 self.tweenTypeSelector = gtk.combo_box_new_text() |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1094 self.tweenTypeSelector.append_text('normal') |
1157
3a891dccabd8
Remove the locate tween. It is a special case for the scale tween
wycc
parents:
1155
diff
changeset
|
1095 #self.tweenTypeSelector.append_text('relocate') |
1120
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1096 self.tweenTypeSelector.append_text('scale') |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1097 self.tweenTypeSelector.set_active(0) |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1098 tweenbox.pack_start(self.tweenTypeSelector, expand=False,fill=False) |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1099 hbox.pack_start(tweenbox,expand=False,fill=False) |
214e1f628d63
Add tween type selector into the UI. This UI can be used to update the type attribute of the SVG.
wycc
parents:
1099
diff
changeset
|
1100 self.tweenTypeSelector.connect('changed', self.onTweenTypeChange) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1101 pass |
956 | 1102 |
1103 def onQuit(self, event): | |
1104 self.OK = False | |
1105 gtk.main_quit() | |
1106 pass | |
1107 | |
1108 def onOK(self,event): | |
1109 self.OK = True | |
1110 gtk.main_quit() | |
1111 pass | |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
1112 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
1113 def updateUI(self, node=None, child=None, arg=None): |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1114 if self._lockui: return |
1166
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1115 |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1116 if self.last_update!= None: |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1117 glib.source_remove(self.last_update) |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1118 self.last_update = glib.timeout_add(300,self._updateUI) |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1119 |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1120 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1121 |
1130
37a0f6ab2f91
Lock the UI from refreshing during the update procedure
wycc
parents:
1128
diff
changeset
|
1122 def _updateUI(self,node=None,arg=None): |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1123 self._lockui = True |
1166
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1124 self.parseScene() |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1125 self._create_framelines() |
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1126 self._update_framelines() |
1189
9cf183faf89f
Maintaining scene group ID to scene node mapping in MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1188
diff
changeset
|
1127 self._lockui = False |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1128 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1129 |
956 | 1130 def show(self): |
1131 self.OK = True | |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1132 if not self.root: |
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1133 self.root = self.desktop.doc().root().repr |
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1134 pass |
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1135 |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
1136 self.document = self.desktop.doc().rdoc |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
1137 self.handle_doc_root(self.document, self.root) |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1138 self.tween = TweenObject(self.document, self.root) |
1166
d73ef03c96de
Refactory code of MBScene.updateUI() from MBScene.show()
Thinker K.F. Li <thinker@codemud.net>
parents:
1164
diff
changeset
|
1139 self._updateUI() |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1140 if self.top == None: |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1141 self.top = gtk.VBox(False,0) |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1142 self.desktop.getToplevel().child.child.pack_end(self.top,expand=False) |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1143 else: |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1144 self.top.remove(self.startWindow) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1145 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1146 |
981 | 1147 vbox = gtk.VBox(False,0) |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1148 self.startWindow = vbox |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1149 self.top.pack_start(vbox,expand=False) |
981 | 1150 vbox.pack_start(self.scrollwin,expand=False) |
1151 hbox=gtk.HBox(False,0) | |
1152 self.addButtons(hbox) | |
1153 vbox.pack_start(hbox,expand=False) | |
1154 | |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1155 self.top.show_all() |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1156 self.last_update = None |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1157 return False |
956 | 1158 pass |