Mercurial > MadButterfly
annotate pyink/MBScene.py @ 1235:84e7b1c1892b
Remove updateUI
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 10 Jan 2011 11:45:12 +0800 |
parents | 0f597a2073eb |
children | 2eeac97853eb |
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: |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
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 |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
52 class ObjectWatcher(pybInkscape.PYNodeObserver): |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
53 def __init__(self, obj, type, func, arg): |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
54 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
|
55 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
|
56 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
|
57 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
|
58 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
59 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
|
60 if self.type == 'DOMNodeInserted': |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
61 self.func(node, child) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
62 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
|
63 if self.type == 'DOMNodeRemoved': |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
64 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
|
65 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
|
66 pass |
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
74 def addEventListener(obj, type, func, arg): |
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
75 obs = ObjectWatcher(obj, type, func, arg) |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
76 obj.addSubtreeObserver(obs) |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
77 pass |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
78 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
79 ## \brief Iterator to travel a sub-tree of DOM. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
80 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
81 def _DOM_iterator(node): |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
82 nodes = [node] |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
83 while nodes: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
84 node = nodes.pop(0) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
85 child = node.firstChild() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
86 while child: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
87 nodes.append(child) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
88 child = child.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
89 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
90 yield node |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
91 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
92 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
93 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
94 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
95 ## \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
|
96 # |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
97 # This class monitors DOM-tree to maintain _maxframe and maps for node ID to |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
98 # node and scene group ID to 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
|
99 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
|
100 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
|
101 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
|
102 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
103 self._maxframe = 0 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
104 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
|
105 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
|
106 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
107 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
108 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
|
109 self._collect_node_ids() |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
110 self._collect_all_scenes() |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
111 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
112 doc = self._doc |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
113 addEventListener(doc, 'DOMNodeInserted', self._on_insert_node, None) |
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
114 addEventListener(doc, 'DOMNodeRemoved', self._on_remove_node, None) |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
115 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
|
116 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
117 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
118 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
|
119 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 else: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 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
|
128 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
129 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
|
130 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
131 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
|
132 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
|
133 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 pass |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
139 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
140 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
141 start = child.getAttribute('start') |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
142 self._maxframe = max(int(start), self._maxframe) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
143 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
144 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
145 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
146 start = child.getAttribute('end') |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
147 self._maxframe = max(int(start), self._maxframe) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
148 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
149 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
|
150 pass |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
151 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
152 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
153 def _find_maxframe(self, scenes_node): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
154 maxframe = 0 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
155 for child in scenes_node.childList(): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
156 if child.name() != 'ns0:scene': |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
157 continue |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
158 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
159 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
160 start = child.getAttribute('start') |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
161 maxframe = max(int(start), maxframe) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
162 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
163 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
164 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
165 end = child.getAttribute('end') |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
166 maxframe = max(int(end), maxframe) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
167 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
168 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
169 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
170 return maxframe |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
171 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
172 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
|
173 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 else: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
178 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
|
179 raise ValueError, \ |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
180 '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
|
181 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
|
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 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
184 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
|
185 try: |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
186 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
|
187 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
|
188 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
|
189 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
|
190 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
|
191 pass |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
192 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
193 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
194 if node.name() == 'ns0:scenes' and \ |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
195 (int(child.getAttribute('start')) == self._maxframe or |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
196 int(child.getAttribute('end')) == self._maxframe): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
197 self._maxframe = self._find_maxframe(node) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
198 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
199 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
200 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
|
201 pass |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
202 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
203 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
204 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
|
205 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
|
206 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
|
207 raise ValueError, \ |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
208 '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
|
209 (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
|
210 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
|
211 raise ValueError, \ |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
212 '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
|
213 (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
|
214 |
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 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
|
216 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
|
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 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
|
219 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
|
220 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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 # 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
|
226 # 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 pass |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
232 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
233 elif (name in ('start', 'end')) and node.name() == 'ns0:scene': |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
234 self._maxframe = max(int(new_value), self._maxframe) |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
235 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
236 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
237 |
1203
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
238 ## \brief Collect ID of nodes in the document. |
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
239 # |
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
240 # It is used to implement a fast mapping from an ID to the respective node. |
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
241 # |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
242 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
|
243 self._id2node = {} |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
244 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
|
245 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
|
246 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
|
247 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
248 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
249 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
250 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
|
251 try: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
252 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
|
253 except: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
254 return |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
255 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
260 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
261 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
262 def _parse_one_scene(self, scene_node): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
263 assert scene_node.name() == 'ns0:scene' |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
264 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
265 start = int(scene_node.getAttribute("start")) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
266 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
267 end = int(scene_node.getAttribute("end")) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
268 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
269 end = start |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
270 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
271 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
272 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
273 scene_type = scene_node.getAttribute('type') |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
274 if scene_type == None: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
275 scene_type = 'normal' |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
276 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
277 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
278 scene_type = 'normal' |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
279 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
280 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
281 return start, end, scene_type |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
282 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
283 def _parse_one_scenes(self, scenes_node): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
284 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
285 cur = int(n.getAttribute("current")) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
286 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
287 cur = 0 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
288 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
289 self.current = cur |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
290 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
291 for scene_node in scenes_node.childList(): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
292 if scene_node.name() != 'ns0:scene': |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
293 continue |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
294 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
295 try: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
296 start, end, scene_type = self._parse_one_scene(scene_node) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
297 except: |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
298 continue |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
299 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
300 group_id = scene_node.getAttribute("ref") |
1217
93acb8568ad3
Update frameline when loading a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1216
diff
changeset
|
301 self._group2scene[group_id] = scene_node |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
302 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
303 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
304 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
305 ## \brief Parse all scenes node in svg:metadata subtree. |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
306 # |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
307 def _collect_all_scenes(self): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
308 root = self._root |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
309 for child in root.childList(): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
310 if child.name() != 'svg:metadata': |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
311 continue |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
312 |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
313 metadata_node = child |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
314 for metachild in metadata_node.childList(): |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
315 if metachild.name() == 'ns0:scenes': |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
316 self._parse_one_scenes(metachild) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
317 self._maxframe = self._find_maxframe(metachild) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
318 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
319 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
320 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
321 pass |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
322 |
1203
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
323 ## \brief Return the node with given ID. |
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
324 # |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
325 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
|
326 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
|
327 |
1203
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
328 ## \brief Return a scene node corresponding to a scene group of given ID. |
b90a1e2eb9ec
Add document for methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1202
diff
changeset
|
329 # |
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
|
330 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
|
331 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
|
332 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
333 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
|
334 while True: |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
335 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
|
336 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
|
337 return candidate |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
338 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
339 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
340 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
341 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
342 |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
343 ## \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
|
344 # |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
345 # This class maintains layers information, and provides functions to create, |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
346 # change and destroy scene node and scene group. A scene node is a 'ns0:scene' |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
347 # in 'ns0:scenes' tag. A scene group is respective 'svg:g' for a scene. |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
348 # |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
349 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
|
350 # 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
|
351 _doc = None |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
352 _root = None |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
353 |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
354 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
|
355 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
|
356 pass |
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
357 |
1202
2f3d523a3871
Parse all scenes when start handling a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1201
diff
changeset
|
358 ## \brief Create a scenes node if not existed. |
2f3d523a3871
Parse all scenes when start handling a document
Thinker K.F. Li <thinker@codemud.net>
parents:
1201
diff
changeset
|
359 # |
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
|
360 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
|
361 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
|
362 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
|
363 break |
1176
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 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
|
366 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
|
367 'can not find <svg:metadata> node in the document' |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
368 |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
369 for n in node.childList(): |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
370 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
|
371 self._scenes_node = n |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
372 break |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
373 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
374 else: |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
375 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
|
376 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
|
377 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
|
378 node.appendChild(scenes_node) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
379 self._scenes_node = scenes_node |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
380 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
381 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
|
382 |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
383 def _parse_all_layers(self): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
384 root = self._root |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
385 layers = self._layers |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
386 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
387 for child in root.childList(): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
388 if child.name() != 'svg:g': |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
389 continue |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
390 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
391 layer_group = child |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
392 layer = Layer(layer_group) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
393 layer.idx = len(layers) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
394 layers.append(layer) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
395 self.parse_layer(layer.idx) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
396 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
397 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
398 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
399 def handle_doc_root(self, doc, root): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
400 self._doc = doc |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
401 self._root = root |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
402 self._layers = [] |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
403 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
404 self._start_monitor() # start MBScene_dom_monitor |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
405 self._init_metadata() |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
406 self._parse_all_layers() |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
407 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
408 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
409 def dumpattr(self, n): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
410 s = "" |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
411 for a,v in n.attrib.items(): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
412 s = s + ("%s=%s" % (a,v)) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
413 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
414 return s |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
415 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
416 def dump(self, node, l=0): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
417 print " " * l*2,"<", node.tag, self.dumpattr(node),">" |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
418 for n in node: |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
419 self.dump(n, l+1) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
420 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
421 print " " * l * 2,"/>" |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
422 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
423 |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
424 ## \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
|
425 # |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
426 def add_scene_node(self, start, end, |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
427 frame_type=TweenObject.TWEEN_TYPE_NORMAL, |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
428 ref=None): |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
429 type_names = ('normal', 'scale') |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
430 scenes_node = self._scenes_node |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
431 doc = self._doc |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
432 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
433 scene_node = doc.createElement('ns0:scene') |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
434 self.chg_scene_node(scene_node, start=start) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
435 if start != end: |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
436 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
|
437 pass |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
438 type_name = type_names[frame_type] |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
439 self.chg_scene_node(scene_node, tween_type=type_name) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
440 if ref: |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
441 self.chg_scene_node(scene_node, ref=ref) |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
442 pass |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
443 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
444 scenes_node.appendChild(scene_node) |
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 return scene_node |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
447 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
448 ## \brief Change attributes of a scene node. |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
449 # |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
450 # This is here to monitor changes of scene node. |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
451 def chg_scene_node(self, scene_node, start=None, end=None, |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
452 tween_type=None, ref=None): |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
453 if start is not None: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
454 scene_node.setAttribute('start', str(start)) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
455 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
456 if end is not None: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
457 scene_node.setAttribute('end', str(end)) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
458 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
459 if tween_type is not None: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
460 scene_node.setAttribute('type', tween_type) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
461 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
462 if ref is not None: |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
463 scene_node.setAttribute('ref', ref) |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
464 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
465 pass |
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
466 |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
467 def rm_scene_node(self, scene_node): |
1204
78925515836f
Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1203
diff
changeset
|
468 self._scenes_node.removeChild(scene_node) |
78925515836f
Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1203
diff
changeset
|
469 pass |
78925515836f
Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1203
diff
changeset
|
470 |
1230 | 471 def rm_scene_node_n_group(self, scene_node): |
472 scene_group_id = scene_node.getAttribute('ref') | |
473 scene_group_node = self.get_node(scene_group_id) | |
474 scene_group_node.parent.removeChild(scene_group_node) | |
475 | |
476 self._scenes_node.removeChild(scene_node) | |
477 pass | |
478 | |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
479 ## \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
|
480 # |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
481 def add_scene_group(self, layer_idx): |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
482 layer = self._layers[layer_idx] |
1191
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
483 doc = self._doc |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
484 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
485 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
|
486 gid = self.new_id() |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
487 scene_group.setAttribute("id", gid) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
488 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
|
489 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
490 layer.group.appendChild(scene_group) |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
491 |
6442fb198418
Refactory insertKeyScene() and fix bug of ObjectWatcher
Thinker K.F. Li <thinker@codemud.net>
parents:
1190
diff
changeset
|
492 return scene_group |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
493 |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
494 def parse_layer(self, layer_idx): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
495 layer = self._layers[layer_idx] |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
496 layer_group = layer.group |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
497 |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
498 for child in layer_group.childList(): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
499 if child.name() != 'svg:g': |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
500 continue |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
501 try: |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
502 child_id = child.getAttribute('id') |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
503 scene_node = self.get_scene(child_id) |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
504 except: |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
505 continue |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
506 |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
507 layer.scenes.append(scene_node) |
1181
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
508 pass |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
509 pass |
f14dbcf19e2b
Move MBScene.insertKeyScene() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1180
diff
changeset
|
510 |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
511 ## \brief Add/insert a layer at given position. |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
512 # |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
513 # \param layer_idx is the position in the layer list. |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
514 # |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
515 def add_layer(self, layer_idx, layer_group): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
516 layers = self._layers |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
517 |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
518 layer = Layer(layer_group) |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
519 if layer_idx >= len(layers): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
520 layers.append(layer) |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
521 else: |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
522 layers.insert(layer_idx, layer) |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
523 for idx in range(layer_idx, len(layers)): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
524 layers[idx].idx = idx |
1183
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
525 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
526 pass |
e8446e138427
Move update_scenes_of_dom() to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1182
diff
changeset
|
527 pass |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
528 |
1230 | 529 ## \brief Remove layer and associated scene nodes and scene groups. |
530 # | |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
531 def rm_layer(self, layer_idx): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
532 layers = self._layers |
956 | 533 |
1230 | 534 for layer in layers: |
535 for scene_node in layer.scenes: | |
536 scene_group_id = scene_node.getAttribute('ref') | |
537 scene_group_node = self.get_node(scene_group_id) | |
538 scene_group_node.parent.removeChild(scene_group_node) | |
539 | |
540 scene_node.parent.removeChild(scene_node) | |
541 pass | |
542 pass | |
543 | |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
544 del layers[layer_idx] |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
545 |
1205
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
546 for idx in range(layer_idx, len(layers)): |
1af64bcdfd7d
Move to MBScene._make_layers_integral()
Thinker K.F. Li <thinker@codemud.net>
parents:
1204
diff
changeset
|
547 layers[idx].idx = idx |
956 | 548 pass |
549 pass | |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
550 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
551 def get_layer_num(self): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
552 return len(self._layers) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
553 |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
554 def find_layer_n_scene_of_node(self, node_id): |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
555 for layer_idx, layer in enumerate(self._layers): |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
556 for scene_node in layer.scenes: |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
557 scene_group_id = scene_node.getAttribute('ref') |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
558 if scene_group_id == node_id: |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
559 return layer_idx, scene_node |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
560 pass |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
561 pass |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
562 return -1, None |
1230 | 563 |
564 def get_layer_group(self, layer_idx): | |
565 layer = self._layers[layer_idx] | |
566 return layer.group | |
567 | |
568 def get_all_scene_node_of_layer(self, layer_idx): | |
569 layer = self._layers[layer_idx] | |
570 return layer.scenes | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
571 |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
572 def get_layer_data(self, layer_idx): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
573 layer = self._layers[layer_idx] |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
574 try: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
575 data = layer.data |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
576 except: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
577 return None |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
578 return data |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
579 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
580 def set_layer_data(self, layer_idx, data): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
581 layer = self._layers[layer_idx] |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
582 layer.data = data |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
583 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
584 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
585 def add_layer_dup_group(self, layer_idx): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
586 layer = self._layers[layer_idx] |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
587 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
588 dup_group = self._doc.createElement('svg:g') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
589 gid = self.new_id() |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
590 dup_group.setAttribute('id', gid) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
591 dup_group.setAttribute('inkscape:label', 'dup') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
592 dup_group.setAttribute('sodipodi:insensitive', '1') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
593 dup_group.setAttribute('style', '') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
594 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
595 layer.group.appendChild(dup_group) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
596 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
597 return dup_group |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
598 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
599 def add_frames(self, layer_idx, frame_idx, num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
600 layer = self._layers[layer_idx] |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
601 for scene_node in layer.scenes: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
602 start, end, tween_type = self._parse_one_scene(scene_node) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
603 if start >= frame_idx: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
604 self.chg_scene_node(scene_node, start=(start + num)) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
605 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
606 if end >= frame_idx: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
607 self.chg_scene_node(scene_node, end=(end + num)) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
608 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
609 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
610 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
611 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
612 ## \brief Remove frames |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
613 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
614 # - Scenes covered by removing range were removed. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
615 # - Scenes after removing range were shifted left. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
616 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
617 def rm_frames(self, layer_idx, frame_idx, num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
618 layer = self._layers[layer_idx] |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
619 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
620 last_rm = frame_idx + num - 1 # last removed frame |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
621 for scene_node in layer.scenes: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
622 start, end, tween_type = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
623 self._dom._parse_one_scene(scene_node) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
624 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
625 if end < frame_idx: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
626 continue |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
627 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
628 if start > last_rm: # this scene is at right side |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
629 self.chg_scene_node(scene_node, |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
630 start=(start - num), |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
631 end=(end - num)) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
632 else: # this scene is covered by removing range |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
633 self.rm_scene_node_n_group(scene_node) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
634 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
635 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
636 pass |
1176
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
637 pass |
0c1ceecb8ddb
Move parseMetadata to MBScene_dom
Thinker K.F. Li <thinker@codemud.net>
parents:
1174
diff
changeset
|
638 |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
639 ## \brief Maintain frameline list for MBScene. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
640 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
641 class MBScene_framelines(object): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
642 _frameline_tween_types = (frameline.TWEEN_TYPE_NONE, |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
643 frameline.TWEEN_TYPE_SHAPE) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
644 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
645 _framelines = None |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
646 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
647 def __init__(self, *args, **kws): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
648 super(MBScene_framelines, self).__init__(*args, **kws) |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
649 |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
650 self._last_mouse_over_frameline = None |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
651 self._last_active_frameline = None |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
652 self._active_frame_callback = None |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
653 pass |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
654 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
655 def _change_hover_frameline(self, widget, event): |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
656 """ |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
657 Hide all hover frames. This is a hack. We should use the lost focus |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
658 event instead in the future to reduce the overhead. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
659 """ |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
660 if self._last_mouse_over_frameline and \ |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
661 widget != self._last_mouse_over_frameline: |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
662 self._last_mouse_over_frameline.mouse_leave() |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
663 pass |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
664 self._last_mouse_over_frameline = widget |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
665 pass |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
666 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
667 ## \brief Switch to new active frameline. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
668 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
669 # Hide active frame mark for the active frame of old active frameline. It |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
670 # always shows at most one active frame mark. When a frame is activated, |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
671 # all active frame mark of other frameline should be hidden. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
672 # |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
673 def _active_frameline(self, frameline): |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
674 last = self._last_active_frameline |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
675 |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
676 if last and last != frameline: |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
677 last.deactive() |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
678 pass |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
679 |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
680 self._last_active_frameline = frameline |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
681 pass |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
682 |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
683 ## \brief Called for changing of active frame. |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
684 # |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
685 # This handle deactive previous frameline that owns an active frame when a |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
686 # frame in another frameline is activated. |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
687 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
688 def _change_active_frame(self, frameline, frame_idx, button): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
689 frameline.active_frame(frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
690 self._active_frameline(frameline) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
691 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
692 if self._active_frame_callback: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
693 layer_idx = frameline.layer_idx |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
694 self._active_frame_callback(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
695 pass |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
696 pass |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
697 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
698 ## \brief Add a frameline into the frameline box for the given layer. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
699 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
700 def _add_frameline(self, layer_idx): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
701 if layer_idx > len(self._framelines): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
702 raise ValueError, 'layer number should be a consequence' |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
703 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
704 vbox = self._frameline_vbox |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
705 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
706 line = frameline(self._num_frames_of_line) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
707 line.set_size_request(self._num_frames_of_line * 10, 20) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
708 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
709 hbox = gtk.HBox() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
710 label = gtk.Label('') |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
711 label.set_size_request(100,0) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
712 hbox.pack_start(label,expand=False, fill=True) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
713 hbox.pack_start(line) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
714 vbox.pack_start(hbox, False) |
1216
61f1b3d424cf
Change order of framelines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
715 |
61f1b3d424cf
Change order of framelines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
716 # Put later one on the top of earier one, but after the ruler. |
61f1b3d424cf
Change order of framelines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
717 position = len(self._framelines) - layer_idx + 1 |
61f1b3d424cf
Change order of framelines.
Thinker K.F. Li <thinker@codemud.net>
parents:
1214
diff
changeset
|
718 vbox.reorder_child(hbox, position) |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
719 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
720 self._framelines[layer_idx: layer_idx] = [line] |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
721 |
1230 | 722 for idx in range(layer_idx, len(self._framelines)): |
723 self._framelines[idx].layer_idx = idx | |
724 pass | |
725 | |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
726 line.label = label |
1214
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
727 line.connect('motion-notify-event', self._change_hover_frameline) |
e55499f7505a
Fix the issues with multiple framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1213
diff
changeset
|
728 line.connect(frameline.FRAME_BUT_PRESS, self._change_active_frame) |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
729 pass |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
730 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
731 ## \brief Remove the given frameline from the frameline box. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
732 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
733 def _remove_frameline(self, layer_idx): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
734 vbox = self._frameline_vbox |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
735 line = self._framelines[layer_idx] |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
736 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
737 hbox = line.parent |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
738 vbox.remove(hbox) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
739 del self._framelines[layer_idx] |
1230 | 740 |
741 for idx in range(layer_idx, len(self._framelines)): | |
742 self._framelines[idx].layer_idx = idx | |
743 pass | |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
744 pass |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
745 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
746 def _init_framelines(self): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
747 self._framelines = [] |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
748 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
749 box = gtk.ScrolledWindow() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
750 self._frameline_box = box |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
751 box.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
752 box.set_size_request(-1, 150) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
753 vbox = gtk.VBox() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
754 self._frameline_vbox = vbox |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
755 box.add_with_viewport(vbox) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
756 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
757 nframes = self._num_frames_of_line |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
758 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
759 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
760 # Set up a ruler |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
761 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
762 ruler = frameruler(nframes) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
763 ruler.set_size_request(nframes * 10, 20) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
764 ruler.show() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
765 hbox = gtk.HBox() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
766 label=gtk.Label('') |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
767 label.set_size_request(100,0) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
768 hbox.pack_start(label,expand=False,fill=True) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
769 hbox.pack_start(ruler) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
770 vbox.pack_start(hbox, False) |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
771 pass |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
772 |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
773 ## \brief Show framelines on the screen. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
774 # |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
775 # When a frameline was inserted or removed, it would not be showed |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
776 # immediately. This function is used to notify toolkit to update the |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
777 # screen and drawing framelines. |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
778 def _show_framelines(self): |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
779 self._frameline_vbox.show_all() |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
780 pass |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
781 |
1230 | 782 ## \brief Make given frame as current active frame. |
783 # | |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
784 def active_frame(self, layer_idx, frame_idx): |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
785 frameline = self._framelines[layer_idx] |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
786 self._active_frameline(frameline) |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
787 frameline.active_frame(frame_idx) |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
788 pass |
1230 | 789 |
790 ## \brief Get layer and frame index of current active frame. | |
791 # | |
792 # \return (-1, -1) for no active, (layer_idx, frame_idx) for current | |
793 # active. | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
794 def get_active_layer_frame(self): |
1230 | 795 if self._active_frameline: |
796 layer_idx = self._active_frameline.layer_idx | |
797 frame_idx = self._active_frameline.get_active_frame() | |
798 if frame_idx != -1: | |
799 return layer_idx, frame_idx | |
800 pass | |
801 return -1, -1 | |
802 | |
803 ## \brief Get information of the key frame at left-side. | |
804 # | |
805 # The key frame, returned, is at the place of the give frame or its | |
806 # left-side. | |
807 def get_left_key_tween(self, layer_idx, frame_idx): | |
808 frameline = self._framelines[layer_idx] | |
809 start, end, fl_tween_type = frameline.get_frame_block_floor(frame_idx) | |
810 tween_type = self._frameline_tween_types.index(fl_tween_type) | |
811 return start, end, tween_type | |
812 | |
813 ## \brief Return information of a key frame and its tweening. | |
814 # | |
815 # This method return the key frame that the given frame is, or is in its | |
816 # tween. | |
817 # | |
818 # \return (start, end, tween_type) | |
819 def get_key_tween(self, layer_idx, frame_idx): | |
820 frameline = self._framelines[layer_idx] | |
821 start, end, fl_tween_type = frameline.get_frame_block(frame_idx) | |
822 | |
823 tween_type = self._frameline_tween_types.index(fl_tween_type) | |
824 return start, end, tween_type | |
825 | |
826 def get_all_key_tween_of_layer(self, layer_idx): | |
827 frameline = self._framelines[layer_idx] | |
828 info = frameline.get_frame_blocks() | |
829 return info | |
830 | |
831 ## \brief Tweening key frame to a give size | |
832 # | |
833 # The tween can be changed by tweening it again. | |
834 def tween(self, layer_idx, key_frame_idx, tween_len, | |
835 tween_type=TweenObject.TWEEN_TYPE_NORMAL): | |
836 assert tween_len > 0 | |
837 frameline = self._framelines[layer_idx] | |
838 right_frame_idx = key_frame_idx + tween_len - 1 | |
839 fl_tween_type = self._frameline_tween_types[tween_type] | |
840 | |
841 start, end, fl_tween_type = frameline.get_frame_block(frame_idx) | |
842 if start != key_frame_idx: | |
843 ValueError, 'invalid key frame (%d)' % (key_frame_idx) | |
844 if start < end: | |
845 frameline.rm_keyframe(end) | |
846 pass | |
847 frameline.add_keyframe(right_frame_idx) | |
848 frameline.tween(start, fl_tween_type) | |
849 pass | |
850 | |
851 def rm_keyframe(self, layer_idx, frame_idx): | |
852 frameline = self._framelines[layer_idx] | |
853 start, end, fl_tween_type = frameline.get_frame_block(frame_idx) | |
854 if start != frame_idx: | |
855 raise ValueError, 'no such key (%d, %d)' % (layer_idx, frame_idx) | |
856 | |
857 frameline.rm_keyframe(frame_idx) | |
858 if start < end: | |
859 frameline.rm_keyframe(end) | |
860 pass | |
861 pass | |
862 | |
863 def add_keyframe(self, layer_idx, frame_idx): | |
864 frameline = self._framelines[layer_idx] | |
865 frameline.add_keyframe(frame_idx) | |
866 pass | |
867 | |
868 ## \brief Get data associated with the given key frame. | |
869 # | |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
870 # The given frame index must be exactly a key frame. |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
871 # |
1230 | 872 def get_keyframe_data(self, layer_idx, frame_idx): |
873 frameline = self._framelines[layer_idx] | |
874 data = frameline.get_frame_data(frame_idx) | |
875 return data | |
876 | |
877 ## \brief Set/associate data with the given key frame. | |
878 # | |
879 def set_keyframe_data(self, layer_idx, frame_idx, data): | |
880 frameline = self._framelines[layer_idx] | |
881 frameline.set_frame_data(frame_idx, data) | |
882 pass | |
883 | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
884 def add_frames(self, layer_idx, frame_idx, num): |
1230 | 885 assert num > 0 |
886 assert frame_idx >= 0 | |
887 frameline = self._framelines[layer_idx] | |
888 for i in range(num): | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
889 frameline.add_frame(frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
890 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
891 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
892 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
893 ## \brief Remove a number of frames from the frameline. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
894 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
895 # All key frames and tweens covered by removing range would be removed. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
896 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
897 def rm_frames(self, layer_idx, frame_idx, num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
898 assert num > 0 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
899 assert frame_idx >= 0 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
900 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
901 frameline = self._framelines[layer_idx] |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
902 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
903 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
904 # Remove right key frame of last tween which left one will be removed. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
905 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
906 last_rm = frame_idx + num - 1 # last removed frame |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
907 try: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
908 start, end, tween_type = frameline.get_frame_block(last_rm) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
909 except ValueError: # last removed frame is not in any tween |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
910 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
911 else: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
912 if start >= frame_idx and end > last_rm: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
913 # Left key frame of the tween was removed, but not right one. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
914 frameline.untween(start) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
915 frameline.rm_keyframe(end) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
916 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
917 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
918 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
919 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
920 # Remove left key of the tween that right key frame is in removing |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
921 # range. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
922 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
923 try: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
924 start, end, tween_type = frameline.get_frame_block(frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
925 except ValueError: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
926 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
927 else: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
928 if start < frame_idx and end <= last_rm: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
929 # right key frame is in removing range but left one. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
930 frameline.untween(start) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
931 frameline.rm_keyframe(start) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
932 frameline.rm_keyframe(end) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
933 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
934 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
935 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
936 for i in range(num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
937 frameline.rm_frame(frame_idx) |
1230 | 938 pass |
939 pass | |
940 | |
941 ## \brief Set label of a layer. | |
942 # | |
943 def set_layer_label(self, layer_idx, txt): | |
944 frameline = self._framelines[layer_idx] | |
945 frameline.label.set_text(txt) | |
946 pass | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
947 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
948 def register_active_frame_callback(self, cb): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
949 self._active_frame_callback = cb |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
950 pass |
1230 | 951 pass |
952 | |
953 ## \brief Gateway of DOM-tree to syncrhonize data-model and UI. | |
954 # | |
955 # This class is a wrapper | |
956 class MBDOM_UI(object): | |
957 _tween_type_names = ('normal', 'scale') | |
958 | |
959 def __init__(self): | |
960 super(MBDOM_UI, self).__init__() | |
961 self._fl_mgr = MBScene_framelines() | |
962 self._dom = MBScene_dom() | |
963 pass | |
964 | |
965 ## \brief Update content of a frameline from scenes of respective layer. | |
966 # | |
967 def _update_frameline_content(self, layer_idx): | |
968 fl_mgr = self._fl_mgr | |
1235 | 969 scene_nodes = fl_mgr.get_all_scene_node_of_layer(layer_idx) |
1230 | 970 for scene_node in scene_nodes: |
971 start, end, tween_name = self._parse_one_scene(scene_node) | |
972 | |
973 fl_mgr.add_keyframe(layer_idx, start) | |
974 fl_mgr.set_keyframe_data(layer_idx, start, scene_node) | |
975 if start != end: | |
976 tween_type = self._tween_type_names.index(tween_name) | |
977 fl_mgr.tween(start, end, tween_type) | |
978 pass | |
979 pass | |
980 pass | |
981 | |
982 ## \brief Add a frameline for every found layer. | |
983 # | |
984 # This method is called to create a frameline for every layer found when | |
985 # loading a document. | |
986 # | |
987 def _add_frameline_for_every_layer(self): | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
988 for layer_idx in range(self._dom.get_layer_num()): |
1230 | 989 layer_group_node = self._dom.get_layer_group(layer_idx) |
990 label = layer_group_node.getAttribute('inkscape:label') | |
991 | |
992 self._fl_mgr._add_frameline(layer_idx) | |
993 self._fl_mgr.set_layer_label(layer_idx, label) | |
994 | |
995 self._update_frameline_content(layer_idx) | |
996 pass | |
997 pass | |
998 | |
999 def handle_doc_root(self, doc, root): | |
1000 self._dom.handle_doc_root(doc, root) | |
1001 self._fl_mgr._init_framelines() | |
1002 self._add_frameline_for_every_layer() | |
1003 self._fl_mgr._show_framelines() | |
1004 pass | |
1005 | |
1006 def add_key(self, layer_idx, key_idx): | |
1007 scene_group = self._dom.add_scene_group(layer_idx) | |
1008 scene_group_id = scene_group.getAttribute('id') | |
1009 | |
1010 scene_node = self._dom.add_scene_node(key_idx, key_idx) | |
1011 scene_node.chg_scene_node(scene_node, ref=scene_group_id) | |
1012 | |
1013 self._fl_mgr.add_keyframe(layer_idx, key_idx) | |
1014 self._fl_mgr.set_keyframe_data(layer_idx, key_idx, scene_node) | |
1015 pass | |
1016 | |
1017 ## \brief Tweening a key frame. | |
1018 # | |
1019 # The tween of a key frame can be changed by tweening it again. | |
1020 # | |
1021 def tween(self, layer_idx, key_frame_idx, tween_len, | |
1022 tween_type=TweenObject.TWEEN_TYPE_NORMAL): | |
1023 self._fl_mgr.tween(layer_idx, key_frame_idx, tween_len, tween_type) | |
1024 | |
1025 end_frame_idx = key_frame_idx + tween_len - 1 | |
1026 scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) | |
1027 tween_name = self._tween_type_names[tween_type] | |
1028 self._dom.chg_scene_node(scene_node, end=end_frame_idx, | |
1029 tween_type=tween_name) | |
1030 pass | |
1031 | |
1032 ## \brief Change tween info of a key frame | |
1033 # | |
1034 def chg_tween(self, layer_idx, key_frame_idx, | |
1035 tween_len=None, tween_type=None): | |
1036 scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) | |
1037 start, end, old_tween_type = \ | |
1038 self._fl_mgr.get_key_tween(layer_idx, key_frame_idx) | |
1039 | |
1040 if tween_len is not None: | |
1041 end = start + tween_len - 1 | |
1042 self._dom.chg_scene_node(scene_node, end=end) | |
1043 pass | |
1044 if tween_type is not None: | |
1045 tween_name = self._tween_type_names[tween_type] | |
1046 self._dom.chg_scene_node(scene_node, tween_type=tween_name) | |
1047 pass | |
1048 | |
1049 if tween_type is None: | |
1050 tween_type = old_tween_type | |
1051 pass | |
1052 self._fl_mgr.tween(layer_idx, start, end, tween_type) | |
1053 pass | |
1054 | |
1055 def rm_key_n_tween(self, layer_idx, key_frame_idx): | |
1056 scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) | |
1057 self._dom.rm_scene_node_n_group(scene_node) | |
1058 | |
1059 self._fl_mgr.rm_key_n_tween(layer_idx, key_frame_idx) | |
1060 pass | |
1061 | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1062 def add_frames(self, layer_idx, frame_idx, num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1063 self._fl_mgr.add_frames(layer_idx, frame_idx, num) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1064 self._dom.add_frames(layer_idx, frame_idx, num) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1065 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1066 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1067 def rm_frames(self, layer_idx, frame_idx, num): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1068 self._fl_mgr.add_frames(layer_idx, frame_idx, num) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1069 self._dom.rm_frames(layer_idx, frame_idx, num) |
1230 | 1070 pass |
1071 | |
1072 def add_layer(self, layer_idx): | |
1073 self._dom.add_layer(layer_idx) | |
1074 self._fl_mgr._add_frameline(layer_idx) | |
1075 self._fl_mgr._show_framelines() | |
1076 pass | |
1077 | |
1078 def set_active_layer_frame(self, layer_idx, frame_idx): | |
1079 self._fl_mgr.active_frame(layer_idx, frame_idx) | |
1080 pass | |
1081 | |
1082 ## \bref Return current active frame and its layer. | |
1083 # | |
1084 # \return (layer_idx, frame_idx) of active frame, or (-1, -1) when no | |
1085 # active one. | |
1086 def get_active_layer_frame(self): | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1087 layer_idx, frame_idx = self._fl_mgr.get_active_layer_frame() |
1230 | 1088 return layer_idx, frame_idx |
1089 | |
1090 def rm_layer(self, layer_idx): | |
1091 self._dom.rm_layer(layer_idx) | |
1092 self._fl_mgr._remove_frameline(layer_idx) | |
1093 self._fl_mgr._show_framelines() | |
1094 pass | |
1095 | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1096 def get_layer_num(self): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1097 return self._dom.get_layer_num() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1098 |
1230 | 1099 ## \brief Return associated group node for a key frame. |
1100 # | |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1101 # The given frame index must be exactly a key frame. |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1102 # |
1230 | 1103 def get_keyframe_group(self, layer_idx, frame_idx): |
1104 scene_node = self._fl_mgr.get_keyframe_data(frame_idx) | |
1105 scene_group_id = scene_node.getAttribute('ref') | |
1106 scene_group_node = self._dom.get_node(scene_group_id) | |
1107 return scene_group_node | |
1108 | |
1109 ## \brief Find an associated key frame and tween info for a group ID. | |
1110 # | |
1111 def find_keyframe_from_group(self, scene_group_id): | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1112 layer_idx, scene_node = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1113 self._dom.find_layer_n_scene_of_node(scene_group_id) |
1230 | 1114 start, end, tween_name = self._dom._parse_one_scene(scene_node) |
1115 tween_type = self._tween_type_names.index(tween_name) | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1116 return layer_idx, (start, end, tween_type) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1117 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1118 ## \brief Return key and tween info for given frame index. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1119 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1120 # The return key is at given frame, or its tween covers given frame. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1121 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1122 def get_key(self, layer_idx, frame_idx): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1123 start, end, tween_type = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1124 self._fl_mgr.get_key_tween(layer_idx, frame_idx) |
1230 | 1125 return start, end, tween_type |
1126 | |
1127 def get_left_key(self, layer_idx, frame_idx): | |
1128 start, end, tween_type = \ | |
1129 self._fl_mgr.get_left_key_tween(layer_idx, frame_idx) | |
1130 return start, end, tween_type | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1131 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1132 ## \brief Return widget showing frames and layers. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1133 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1134 def get_frame_ui_widget(self): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1135 return self._fl_mgr._frameline_box |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1136 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1137 def register_active_frame_cb(self, cb): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1138 self._fl_mgr.register_active_frame_cb(cb) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1139 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1140 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1141 def set_layer_label(self, txt): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1142 self._fl_mgr.set_layer_label(txt) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1143 pass |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1144 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1145 ## \brief Get duplicate group of a layer. |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1146 # |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1147 def get_layer_dup_group(self, layer_idx): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1148 data = self._dom.get_layer_data(layer_idx) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1149 if not data: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1150 data = object() |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1151 self._dom.set_layer_data(layer_idx, data) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1152 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1153 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1154 if hasattr(data, 'dup_group_id'): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1155 try: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1156 dup_group = self._dom.get_node(data.dup_group_id) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1157 except KeyError: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1158 dup_group = None |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1159 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1160 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1161 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1162 if not dup_group: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1163 dup_group = self._dom.add_layer_dup_group(layer_idx) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1164 data.dup_group_id = dup_group.getAttribute('id') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1165 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1166 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1167 return dup_group |
1210
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
1168 pass |
3683e02b7482
Refactory frameline management code to MBScene_framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1209
diff
changeset
|
1169 |
1209 | 1170 ## \brief MBScene connect GUI and DOM-tree |
1171 # | |
1172 # This class connect behavior of GUI to the DOM-tree. All about GUI is | |
1173 # implemented by this class. It use API provided by MBScene_dom to reflect | |
1174 # actions to the DOM-tree. | |
1175 # | |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1176 class MBScene(object): |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1177 _tween_obj_tween_types = (TweenObject.TWEEN_TYPE_NORMAL, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1178 TweenObject.TWEEN_TYPE_SCALE) |
1157
3a891dccabd8
Remove the locate tween. It is a special case for the scale tween
wycc
parents:
1155
diff
changeset
|
1179 _tween_type_names = ('normal', 'scale') |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1180 |
1204
78925515836f
Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1203
diff
changeset
|
1181 _num_frames_of_line = 100 |
78925515836f
Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents:
1203
diff
changeset
|
1182 |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1183 def __init__(self, desktop, win, root=None): |
1188
45e3a9273af2
Move code about monitoring DOM-tree to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents:
1185
diff
changeset
|
1184 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
|
1185 |
956 | 1186 self.desktop = desktop |
1187 self.window = win | |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1188 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
|
1189 self.last_update = None |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1190 pybInkscape.inkscape.connect('change_selection', self.on_selection) |
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
|
1191 self.last_select = None |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1192 self._lockui = False |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1193 self.tween = None |
1140 | 1194 self.document = None |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1195 self.root = root |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1196 self.framerate = 12 |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1197 self._disable_tween_type_selector = False |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
1198 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1199 self._dom = MBDOM_UI() |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1200 pass |
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
|
1201 |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1202 def change_active_frame(self, node): |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
1203 """ |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1204 Change the active frame to the current selected node. This will |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1205 tell users where the current node is. |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
1206 """ |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1207 while node: |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
1208 try: |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1209 node_id = node.getAttribute('id') |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1210 except: |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1211 node = node.parent() |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1212 continue |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1213 |
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1214 try: |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1215 layer_idx, (start, end, tween_type) = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1216 self._dom.find_keyframe_from_group(node_id) |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
1217 except: |
1223 | 1218 pass |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1219 else: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1220 self._dom.set_active_layer_frame(layer_idx, start) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1221 break |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1222 |
1224
5d731460b32c
Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents:
1223
diff
changeset
|
1223 node = node.parent() |
1223 | 1224 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1225 pass |
1221
33aa2d63e240
When we select a new object, search the scene group which contain it and make it as the active frame.
wycc
parents:
1220
diff
changeset
|
1226 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1227 def insertKeyScene(self, layer_idx, frame_idx): |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1228 """ |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1229 Insert a new key scene into the stage. If the nth is always a |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1230 key scene, we will return without changing anything. If the |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1231 nth is a filled scene, we will break the original scene into |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1232 two parts. If the nth is out of any scene, we will append a |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1233 new scene. |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1234 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1235 """ |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1236 try: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1237 self._dom.add_key(layer_idx, frame_idx) |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1238 except ValueError: # existed key frame |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1239 pass |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1240 else: # new key frame |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1241 scene_group = self._dom.get_keyframe_group(layer_idx, frame_idx) |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1242 self._enterGroup(scene_group) |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1243 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1244 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1245 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1246 def removeKeyScene(self, layer_idx, frame_idx): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1247 self._dom.rm_key_n_tween(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1248 self.setCurrentScene(frame_idx) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1249 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1250 |
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
|
1251 def extendScene(self): |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1252 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1253 start, end, tween_type = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1254 self._dom.get_left_key(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1255 tween_len = frame_idx - start |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1256 self._dom.tween(layer_idx, start, tween_len, tween_type) |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1257 |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1258 scene_group = self._dom.get_keyframe_group(layer_idx, start) |
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1259 self._enterGroup(scene_gorup) |
956 | 1260 pass |
1261 | |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
1262 def setCurrentScene(self, idx): |
1123 | 1263 """ |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1264 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
|
1265 data. There are a couple of cases. |
1148 | 1266 1. If the type of the scene is normal, we display it when |
1267 it contains the current frame. Otherwise hide it. | |
1268 2. If the type of the scene is relocate or scale, we need | |
1269 to duplicate the scene group and then modify its | |
1270 transform matrix according to the definition of the | |
1271 scene. Then, hide the original scenr group and display | |
1272 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
|
1273 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
|
1274 |
1148 | 1275 For each layer, we will always use the duplicated scene |
1276 group whose name as dup. | |
1277 We will put the duplicated scene group inside it. We will | |
1278 create this group if it is not | |
1123 | 1279 available. |
1280 """ | |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
1281 self.current = idx |
1140 | 1282 self.tween.updateMapping() |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1283 for layer_idx in range(self._dom.get_layer_num()): |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1284 dup_group = self._dom.get_layer_dup_group(layer_idx) |
1123 | 1285 |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1286 all_key_tweens = self._dom.get_all_key_tween_of_layer(layer_idx) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1287 for start, stop, tween_type in all_key_tweens: |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1288 if start == idx: # at key frame |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1289 dup_group.setAttribute('style', 'display: none') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1290 scene_group = \ |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1291 self._dom.get_keyframe_group(layer_idx, idx) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1292 scene_group.setAttribute('style', '') |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1293 elif start < idx and end >= idx: # in Tween |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1294 scene_group = \ |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1295 self._dom.get_keyframe_group(layer_idx, idx) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1296 |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
1297 try: |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1298 next_scene_group = \ |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1299 self._dom.get_keyframe_group(layer_idx, end + 1) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1300 except: # no next key frame |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1301 next_scene_group = scene_group |
1180
bfd7d466a022
Fix yeiling error message when select a scene.
Thinker K.F. Li <thinker@codemud.net>
parents:
1179
diff
changeset
|
1302 pass |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
1303 |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1304 tween_obj_type = self._tween_obj_tween_types[tween_type] |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1305 nframes = stop - start + 1 |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1306 percent = float(idx - start) / nframes |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1307 self.tween.updateTweenContent(dup_group, |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1308 tween_obj_type, |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1309 scene_group, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1310 next_scene_group, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1311 percent) |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1312 pass |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1313 else: # this scene should not be showed. |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1314 scene_group = \ |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1315 self._dom.get_keyframe_group(layer_idx, idx) |
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1316 scene_group.setAttribute('style', '') |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1317 pass |
955
53b0f8dc2284
Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents:
943
diff
changeset
|
1318 pass |
956 | 1319 pass |
1320 pass | |
1232
6d4de488389e
Change setCurrentScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1231
diff
changeset
|
1321 |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1322 def _enterGroup(self, scene_group): |
1233
7f17a7e70d82
Integrate MBScene.entrGroup()
Thinker K.F. Li <thinker@codemud.net>
parents:
1232
diff
changeset
|
1323 self.desktop.setCurrentLayer(scene_group.spitem) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1324 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1325 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1326 def setTweenType(self, tween_type): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1327 tween_type_name = self._tween_type_names[tween_type] |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1328 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1329 self._disable_tween_type_selector = True |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1330 self.tweenTypeSelector.set_active(tween_type_name) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1331 self._disable_tween_type_selector = False |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1332 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1333 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1334 def selectSceneObject(self, layer_idx, frame_idx): |
1177
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
1335 try: |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1336 start, stop, tween_type = self._dom.get_key(frame_idx) |
1177
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
1337 except: |
ec1ea8555911
Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents:
1176
diff
changeset
|
1338 return |
1070
afa42d5836cc
Call setCurrentLayer to enter the current scene group.
wycc
parents:
1064
diff
changeset
|
1339 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1340 scene_group = self._dom.get_keyframe_group(layer_idx, start) |
1234
0f597a2073eb
Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents:
1233
diff
changeset
|
1341 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
|
1342 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
|
1343 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1344 |
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
|
1345 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
|
1346 # Search for the current scene |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1347 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1348 |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1349 try: |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1350 left_start, left_end, left_tween_type = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1351 self._dom.get_left_key(layer_idx, frame_idx) |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1352 except: |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1353 return |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1354 if left_end >= frame_idx: |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1355 return |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1356 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1357 self._dom.add_key(layer_idx, frame_idx) |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1358 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1359 scene_group = self._dom.get_keyframe_group(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1360 left_scene_group = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1361 self._dom.get_keyframe_group(layer_idx, left_frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1362 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1363 left_scene_group_id = left_scene_group.getAttribute('id') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1364 dup_group = self._duplicate_group(left_scene_group_id, scene_group) |
1195
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1365 |
cb2c611d1656
Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents:
1194
diff
changeset
|
1366 self.setCurrentScene(frame_idx) |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1367 pass |
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1368 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1369 ## \brief Duplicate children of a group. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1370 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1371 # Duplicate children of a group, and append them to another group. |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1372 # |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1373 def _duplicate_group(self, src_group, dst_group): |
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
|
1374 # Search for the duplicated group |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1375 root = self._root |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1376 doc = self._doc |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1377 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1378 dup_group = orig.duplicate(doc) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1379 for child in dup_group.childList(): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1380 dst_group.appendChild(child) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1381 pass |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1382 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1383 old_nodes = _DOM_iterator(src_group) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1384 new_nodes = _DOM_iterator(dst_group) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1385 for old_node in old_nodes: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
1386 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
|
1387 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
|
1388 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
|
1389 pass |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1390 pass |
956 | 1391 |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1392 def changeObjectLabel(self,w): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1393 o = self.desktop.selection.list()[0] |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1394 o.setAttribute("inkscape:label", self.nameEditor.get_text()) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1395 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1396 |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1397 def addNameEditor(self,hbox): |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1398 self.nameEditor = gtk.Entry(max=40) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1399 hbox.pack_start(self.nameEditor,expand=False,fill=False) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1400 self.editDone = gtk.Button('Set') |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1401 hbox.pack_start(self.editDone,expand=False,fill=False) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1402 self.editDone.connect('clicked', self.changeObjectLabel) |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1403 pass |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1404 |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1405 def addTweenTypeSelector(self, hbox): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1406 tweenbox = gtk.HBox() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1407 label = gtk.Label('Tween Type') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1408 tweenbox.pack_start(label) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1409 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1410 self.tweenTypeSelector = gtk.combo_box_new_text() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1411 self.tweenTypeSelector.append_text('normal') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1412 self.tweenTypeSelector.append_text('scale') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1413 self.tweenTypeSelector.set_active(0) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1414 tweenbox.pack_start(self.tweenTypeSelector, expand=False, fill=False) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1415 hbox.pack_start(tweenbox, expand=False, fill=False) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1416 self.tweenTypeSelector.connect('changed', self.onTweenTypeChange) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1417 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1418 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1419 def on_selection(self,w,obj): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1420 objs = self.desktop.selection.list() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1421 try: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1422 o = objs[0] |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1423 print o.getCenter() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1424 if o == self.last_select: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1425 return |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1426 except: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1427 self.nameEditor.set_text('') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1428 self.last_select = None |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1429 return |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1430 self.last_select = o |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1431 try: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1432 self.nameEditor.set_text(o.getAttribute("inkscape:label")) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1433 except: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1434 self.nameEditor.set_text('') |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1435 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1436 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1437 # The selection is a PYSPObject. Convert it to be PYNode |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1438 self.change_active_frame(self.last_select.repr.parent()) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1439 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1440 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1441 def onCellClick(self, layer_idx, frame_idx): |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1442 self._lockui = True |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1443 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1444 self.setCurrentScene(frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1445 self.selectSceneObject(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1446 |
1207
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1447 self._lockui = False |
489e6e474fdf
Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents:
1206
diff
changeset
|
1448 pass |
956 | 1449 |
1450 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
|
1451 self._lockui=True |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1452 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1453 self.insertKeyScene(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1454 self.selectSceneObject(layer_idx, frame_idx) |
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
|
1455 self._lockui=False |
956 | 1456 return |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1457 |
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
|
1458 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
|
1459 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
|
1460 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
|
1461 self._lockui = False |
956 | 1462 |
1463 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
|
1464 self._lockui = True |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1465 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1466 self.removeKeyScene(layer_idx, frame_idx) |
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
|
1467 self._lockui = False |
956 | 1468 return |
941
9ba94c577a6f
Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff
changeset
|
1469 |
956 | 1470 |
1471 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
|
1472 self._lockui = True |
956 | 1473 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
|
1474 self._lockui = False |
956 | 1475 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
|
1476 |
1147 | 1477 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
|
1478 """ |
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
|
1479 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
|
1480 """ |
1147 | 1481 if self.btnRun.get_label() == "Run": |
1482 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
|
1483 self._lockui = True |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1484 tmout = 1000 / self.framerate |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1485 self.last_update = glib.timeout_add(tmout, self.doRunNext) |
1147 | 1486 else: |
1487 self.btnRun.set_label("Run") | |
1488 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
|
1489 self._lockui = False |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1490 pass |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1491 pass |
1147 | 1492 |
1493 def doRunNext(self): | |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1494 if self.current > self._maxframe: |
1147 | 1495 self.current = 0 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1496 pass |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1497 try: |
1194
319414e4d87a
Fix the issue that is fault to switch scenes
Thinker K.F. Li <thinker@codemud.net>
parents:
1193
diff
changeset
|
1498 self.setCurrentScene(self.current) |
1161
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1499 except: |
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1500 traceback.print_exc() |
a7faab54e8f8
Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1160
diff
changeset
|
1501 raise |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1198
diff
changeset
|
1502 self.current = self.current + 1 |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1503 tmout = 1000 / self.framerate |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1504 self.last_update = glib.timeout_add(tmout, self.doRunNext) |
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1505 pass |
1174 | 1506 |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1507 def doInsertFrame(self, w): |
1219 | 1508 self.lockui=True |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1509 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1510 self._dom.add_frames(layer_idx, frame_idx, 1) |
1219 | 1511 self.lockui=False |
1512 | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1513 def doRemoveFrame(self, w): |
1219 | 1514 self.lockui=True |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1515 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1516 self._dom.rm_frames(layer_idx, frame_idx, 1) |
1219 | 1517 self.lockui=False |
1518 | |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1519 def onTweenTypeChange(self, w): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1520 if self._disable_tween_type_selector: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1521 return |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1522 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1523 layer_idx, frame_idx = self._dom.get_active_layer_frame() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1524 tween_type = self.tweenTypeSelector.get_active() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1525 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1526 start, end, old_tween_type = \ |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1527 self._dom.get_left_key(layer_idx, frame_idx) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1528 if end >= frame_idx and start != end: |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1529 # Length of tween > 1 and cover this frame |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1530 self._dom.chg_tween(tween_type) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1531 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1532 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1533 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1534 def onQuit(self, event): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1535 self.OK = False |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1536 gtk.main_quit() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1537 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1538 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1539 def onOK(self, event): |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1540 self.OK = True |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1541 gtk.main_quit() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1542 pass |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1543 |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1544 def _add_buttons(self, hbox): |
956 | 1545 btn = gtk.Button('Insert Key') |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1546 btn.connect('clicked', self.doInsertKeyScene) |
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1547 hbox.pack_start(btn, expand=False, fill=False) |
1174 | 1548 |
956 | 1549 btn=gtk.Button('Remove Key') |
1550 btn.connect('clicked', self.doRemoveScene) | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1551 hbox.pack_start(btn, expand=False, fill=False) |
1174 | 1552 |
956 | 1553 btn=gtk.Button('Extend scene') |
1554 btn.connect('clicked', self.doExtendScene) | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1555 hbox.pack_start(btn, expand=False, fill=False) |
1174 | 1556 |
1557 btn=gtk.Button('Duplicate Key') | |
1558 btn.connect('clicked', self.doDuplicateKeyScene) | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1559 hbox.pack_start(btn, expand=False, fill=False) |
1174 | 1560 |
1219 | 1561 btn=gtk.Button('insert') |
1562 btn.connect('clicked', self.doInsertFrame) | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1563 hbox.pack_start(btn, expand=False, fill=False) |
1219 | 1564 |
1565 btn=gtk.Button('remove') | |
1566 btn.connect('clicked', self.doRemoveFrame) | |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1567 hbox.pack_start(btn, expand=False, fill=False) |
1219 | 1568 |
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
|
1569 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
|
1570 btn.connect('clicked', self.doRun) |
1147 | 1571 self.btnRun = btn |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1572 hbox.pack_start(btn, expand=False, fill=False) |
1174 | 1573 |
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
|
1574 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
|
1575 self.addTweenTypeSelector(hbox) |
956 | 1576 pass |
1144
257beac7c982
Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents:
1142
diff
changeset
|
1577 |
956 | 1578 def show(self): |
1579 self.OK = True | |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1580 if not self.root: |
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1581 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
|
1582 pass |
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1583 |
1128
b65ac686a7c5
Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents:
1125
diff
changeset
|
1584 self.document = self.desktop.doc().rdoc |
1149
0ffef2df6201
Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents:
1148
diff
changeset
|
1585 self.tween = TweenObject(self.document, self.root) |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1586 self._dom.handle_doc_root(self.document, self.root) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1587 self._dom.register_active_frame_cb(self.onCellClick) |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1588 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1589 if self.top == None: |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1590 self.top = gtk.VBox(False, 0) |
1206
1d476b35dc79
Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
diff
changeset
|
1591 toplevel = self.desktop.getToplevel() |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1592 toplevel.child.child.pack_end(self.top, expand=False) |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1593 else: |
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1594 self.top.remove(self.startWindow) |
1150
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1595 pass |
6586cd10c92f
Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1149
diff
changeset
|
1596 |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1597 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
|
1598 self.startWindow = vbox |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1599 self.top.pack_start(vbox, expand=False) |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1600 frame_ui = self._dom.get_frame_ui_widget() |
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1601 vbox.pack_start(frame_ui, expand=False) |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1602 hbox=gtk.HBox(False, 0) |
1231
d28b1b840bfc
Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents:
1230
diff
changeset
|
1603 self._add_buttons(hbox) |
1222
03daff2d939c
Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents:
1220
diff
changeset
|
1604 vbox.pack_start(hbox, expand=False) |
981 | 1605 |
1064
16c69756ef5d
Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents:
1032
diff
changeset
|
1606 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
|
1607 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
|
1608 return False |
956 | 1609 pass |