annotate pyink/MBScene.py @ 1535:9aff42a7e2b9 tip

Fix issue of add/remove a frame at a scene before all key frames of a layer. When you added or removed a frame at a scene before all key frames of a layer, frameline was not updated correctly. It seems nothing happened, but domview is updated. This changeset fix this issue by correcting logic for boundary case.
author Thinker K.F. Li <thinker@codemud.net>
date Fri, 30 Sep 2011 22:07:28 +0800
parents 82d3a6b5d1c4
children
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 import traceback
1064
16c69756ef5d Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents: 1032
diff changeset
8 import pybInkscape
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
9 from tween import scenes_director
1258
2609b219703d Move initialize of consistency_checker to domview_ui_with_workers
Thinker K.F. Li <thinker@codemud.net>
parents: 1255
diff changeset
10 from domview_ui import create_domview_ui
1253
07e0cb1e051d Add class consistency_checker for domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1251
diff changeset
11 from data_monitor import data_monitor
941
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
12
1517
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
13 ## \page design_scribboo Designs of Scribboo
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
14 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
15 # \image html scribboo_arch.png
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
16 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
17 # The idea of Scribboo is that domview_ui is responsible for synchronizing
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
18 # domview and framelines. domview is responsible for managing data model
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
19 # provided by Inkscape for SVG documents. All access to data model use APIs
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
20 # provided by domview. domview_ui is a decorator of domview. It does not only
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
21 # delegate calls to domview, but also make sure that framelines are always up
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
22 # to date and keep consistent with data model provided by domview.
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
23 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
24 # MBScene implements most feature about editing scenes. It uses domview_ui to
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
25 # manage and control scenes. With MBScene, you can create, delete, and change
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
26 # scenes. It also provide the capability of tweening animation.
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
27 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
28 # comp_dock is responsible for managing components and actions. You can see a
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
29 # list of components and a list of actions. These two list boxes are
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
30 # implemented by comp_dock.
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
31 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
32 # FSM_window is responsible for implementation of FSM editor. All features
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
33 # provided by FSM editor is a part of FSM_window. It also use domview_ui to
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
34 # access data model.
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
35 #
31a21656c0a8 Describe designs of Scribboo
Thinker K.F. Li <thinker@codemud.net>
parents: 1455
diff changeset
36
957
8e3e46c26137 Break long lines
Thinker K.F. Li <thinker@codemud.net>
parents: 956
diff changeset
37 # Please refer to
8e3e46c26137 Break long lines
Thinker K.F. Li <thinker@codemud.net>
parents: 956
diff changeset
38 # http://www.assembla.com/wiki/show/MadButterfly/Inkscape_extention
8e3e46c26137 Break long lines
Thinker K.F. Li <thinker@codemud.net>
parents: 956
diff changeset
39 # 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
40
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
41
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
42 # Algorithm:
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
43 #
955
53b0f8dc2284 Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents: 943
diff changeset
44 # 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
45 # layer and scene.
53b0f8dc2284 Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents: 943
diff changeset
46 # - 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
47 # column of the grid.
53b0f8dc2284 Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents: 943
diff changeset
48 # - 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
49 # grid.
53b0f8dc2284 Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents: 943
diff changeset
50 # - 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
51 # 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
52 # 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
53 # 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
54 # for this purpose.
53b0f8dc2284 Add tailing 'pass' commands to close indents
Thinker K.F. Li <thinker@codemud.net>
parents: 943
diff changeset
55 # - 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
56 # 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
57 # 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
58 # 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
59 # 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
60 # 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
61 # - 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
62 # 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
63 #
941
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
64
1209
41d13feeecc4 Doc MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1208
diff changeset
65 ## \brief MBScene connect GUI and DOM-tree
41d13feeecc4 Doc MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1208
diff changeset
66 #
1244
b241f9768833 Remove MBScene_ from the prefix of class names.
Thinker K.F. Li <thinker@codemud.net>
parents: 1243
diff changeset
67 # This method accepts user actions and involves domview_ui to update
1242
1b1eb8f9a866 Rename *_dom to *_domview and *_framelines to *_frameline_stack
Thinker K.F. Li <thinker@codemud.net>
parents: 1241
diff changeset
68 # data on the document.
1209
41d13feeecc4 Doc MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1208
diff changeset
69 #
1255
a8e01435e84e Add more doc for MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
70 # This class is protected by \ref data_monitor, meta-class.
a8e01435e84e Add more doc for MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1253
diff changeset
71 #
1234
0f597a2073eb Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 1233
diff changeset
72 class MBScene(object):
1248
2f9fa5d59e67 Add data_monitor meta-class to monitor accessing on domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
73 __metaclass__ = data_monitor
2f9fa5d59e67 Add data_monitor meta-class to monitor accessing on domview_ui.
Thinker K.F. Li <thinker@codemud.net>
parents: 1246
diff changeset
74
1157
3a891dccabd8 Remove the locate tween. It is a special case for the scale tween
wycc
parents: 1155
diff changeset
75 _tween_type_names = ('normal', 'scale')
1150
6586cd10c92f Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents: 1149
diff changeset
76
1204
78925515836f Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 1203
diff changeset
77 _num_frames_of_line = 100
78925515836f Add methods for managing framelines
Thinker K.F. Li <thinker@codemud.net>
parents: 1203
diff changeset
78
1149
0ffef2df6201 Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents: 1148
diff changeset
79 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
80 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
81
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
82 self.desktop = desktop
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
83 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
84 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
85 self.last_update = None
1249
16a1166c3850 Add more method being monitored
Thinker K.F. Li <thinker@codemud.net>
parents: 1248
diff changeset
86 pybInkscape.inkscape.connect('change_selection', self.do_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
87 self.last_select = None
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
88 self._director = None
1140
d4dbcb93aee0 Separate the tween from the main module.
wycc
parents: 1136
diff changeset
89 self.document = None
1237
b5cceb2b87bb Sucessful extend and duplicate
Thinker K.F. Li <thinker@codemud.net>
parents: 1236
diff changeset
90 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>
parents: 1205 1186
diff changeset
91 self.framerate = 12
1150
6586cd10c92f Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents: 1149
diff changeset
92 self._disable_tween_type_selector = False
1236
2eeac97853eb Running animation successful
Thinker K.F. Li <thinker@codemud.net>
parents: 1235
diff changeset
93 self.current = 0
941
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
94
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
95 self._domviewui = create_domview_ui()
1265
ca301f6abef7 Support undo for insert key frame/rm keyframe. We will refresh all layers and scenes since it is not feasible to collect these changes and update the layers and scenes. We may scan two level only in the future to improve the performance.
wycc
parents: 1264
diff changeset
96 self._locker = self._domviewui
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
97 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
98
1224
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
99 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
100 """
1224
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
101 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
102 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
103 """
1224
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
104 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
105 try:
1224
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
106 node_id = node.getAttribute('id')
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
107 except:
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
108 node = node.parent()
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
109 continue
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
110
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
111 try:
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
112 layer_idx, (start, end, tween_type) = \
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
113 self._domviewui.find_key_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
114 except:
1223
Thinker K.F. Li <thinker@codemud.net>
parents: 1222 1221
diff changeset
115 pass
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
116 else:
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
117 self._domviewui.set_active_layer_frame(layer_idx, start)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
118 break
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
119
1224
5d731460b32c Remove search_by_id() from frameline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1223
diff changeset
120 node = node.parent()
1223
Thinker K.F. Li <thinker@codemud.net>
parents: 1222 1221
diff changeset
121 pass
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
122 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
123
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
124 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
125 """
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
126 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
127 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
128 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
129 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
130 new scene.
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
131
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
132 """
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
133 try:
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
134 self._domviewui.mark_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
135 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
136 pass
1207
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
137 pass
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
138
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
139 def removeKeyScene(self, layer_idx, frame_idx):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
140 self._domviewui.unmark_key(layer_idx, frame_idx)
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
141 self._director.show_scene(frame_idx)
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
142 pass
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
143
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
144 def extendScene(self):
1334
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
145 # Create a tween
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
146 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
147 start, end, tween_type = \
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
148 self._domviewui.get_left_key(layer_idx, frame_idx)
1334
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
149 tween_len = frame_idx - start
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
150 self._domviewui.tween(layer_idx, start, tween_len, tween_type)
1287
f6a28f473494 Change the exten dScene to create an key frame which link back to the previous key frame.
wycc
parents: 1268
diff changeset
151
f6a28f473494 Change the exten dScene to create an key frame which link back to the previous key frame.
wycc
parents: 1268
diff changeset
152 # Create a key frame which link to the previous key frame
f6a28f473494 Change the exten dScene to create an key frame which link back to the previous key frame.
wycc
parents: 1268
diff changeset
153 self._domviewui.mark_key(layer_idx, frame_idx)
1294
Thinker K.F. Li <thinker@codemud.net>
parents: 1289
diff changeset
154 self._domviewui.clone_key_group(layer_idx, start, frame_idx)
1287
f6a28f473494 Change the exten dScene to create an key frame which link back to the previous key frame.
wycc
parents: 1268
diff changeset
155 self._director.show_scene(frame_idx)
f6a28f473494 Change the exten dScene to create an key frame which link back to the previous key frame.
wycc
parents: 1268
diff changeset
156 self.selectSceneObject(layer_idx, frame_idx)
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
157 pass
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
158
1234
0f597a2073eb Enter the group after insert/extend a key frame
Thinker K.F. Li <thinker@codemud.net>
parents: 1233
diff changeset
159 def _enterGroup(self, scene_group):
1532
4a92b639a1cd Clear selection set when switching current scene.
Thinker K.F. Li <thinker@codemud.net>
parents: 1531
diff changeset
160 self.desktop.selection.clear()
1233
7f17a7e70d82 Integrate MBScene.entrGroup()
Thinker K.F. Li <thinker@codemud.net>
parents: 1232
diff changeset
161 self.desktop.setCurrentLayer(scene_group.spitem)
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
162 pass
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
163
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
164 def setTweenType(self, tween_type):
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
165 self._disable_tween_type_selector = True
1240
84bcd398cccc Fix bug of removing keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1239
diff changeset
166 self.tweenTypeSelector.set_active(tween_type)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
167 self._disable_tween_type_selector = False
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
168 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
169
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
170 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
171 try:
1242
1b1eb8f9a866 Rename *_dom to *_domview and *_framelines to *_frameline_stack
Thinker K.F. Li <thinker@codemud.net>
parents: 1241
diff changeset
172 start, stop, tween_type = \
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
173 self._domviewui.get_key(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
174 except:
1455
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
175 dup_group = self._domviewui.get_layer_dup_group(layer_idx)
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
176 self._enterGroup(dup_group)
1177
ec1ea8555911 Stop selectSceneObject() from using private variable _keys of frameline
Thinker K.F. Li <thinker@codemud.net>
parents: 1176
diff changeset
177 return
1070
afa42d5836cc Call setCurrentLayer to enter the current scene group.
wycc
parents: 1064
diff changeset
178
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
179 scene_group = self._domviewui.get_key_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
180 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
181 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
182 pass
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
183
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
184 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
185 # Search for the current scene
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
186 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
1334
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
187 try:
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
188 self.removeKeyScene(layer_idx, frame_idx)
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
189 except: # no key and tween
38403fdb0c6c Fix bug of duplicateKeyScene()
Thinker K.F. Li <thinker@codemud.net>
parents: 1329
diff changeset
190 pass
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
191
1195
cb2c611d1656 Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1194
diff changeset
192 try:
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
193 left_start, left_end, left_tween_type = \
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
194 self._domviewui.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
195 except:
cb2c611d1656 Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1194
diff changeset
196 return
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
197 if left_end >= frame_idx:
1195
cb2c611d1656 Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1194
diff changeset
198 return
cb2c611d1656 Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1194
diff changeset
199
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
200 self._domviewui.mark_key(layer_idx, frame_idx)
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
201 self._domviewui.copy_key_group(layer_idx, left_start, frame_idx)
1195
cb2c611d1656 Fix bug of duplicating a keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1194
diff changeset
202
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
203 self._director.show_scene(frame_idx)
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
204 pass
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
205
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
206 def _drop_undo(self):
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
207 self.document.commit() # commit the transation and drop change log.
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
208 self.document.beginTransaction()
1267
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
209
1207
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
210 def addNameEditor(self,hbox):
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
211 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
212 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
213 self.editDone = gtk.Button('Set')
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
214 hbox.pack_start(self.editDone,expand=False,fill=False)
1249
16a1166c3850 Add more method being monitored
Thinker K.F. Li <thinker@codemud.net>
parents: 1248
diff changeset
215 self.editDone.connect('clicked', self.do_changeObjectLabel)
1207
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
216 pass
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
217
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
218 def addTweenTypeSelector(self, hbox):
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
219 tweenbox = gtk.HBox()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
220 label = gtk.Label('Tween Type')
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
221 tweenbox.pack_start(label)
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
222
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
223 self.tweenTypeSelector = gtk.combo_box_new_text()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
224 self.tweenTypeSelector.append_text('normal')
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
225 self.tweenTypeSelector.append_text('scale')
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
226 self.tweenTypeSelector.set_active(0)
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
227 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
228 hbox.pack_start(tweenbox, expand=False, fill=False)
1249
16a1166c3850 Add more method being monitored
Thinker K.F. Li <thinker@codemud.net>
parents: 1248
diff changeset
229 self.tweenTypeSelector.connect('changed', self.do_TweenTypeChange)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
230 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
231
1267
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
232 def do_changeObjectLabel(self,w):
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
233 o = self.desktop.selection.list()[0]
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
234 o.setAttribute("inkscape:label", self.nameEditor.get_text())
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
235 pass
2318a094a277 Move function around to separate do_* from others
Thinker K.F. Li <thinker@codemud.net>
parents: 1266
diff changeset
236
1249
16a1166c3850 Add more method being monitored
Thinker K.F. Li <thinker@codemud.net>
parents: 1248
diff changeset
237 def do_selection(self,w,obj):
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
238 objs = self.desktop.selection.list()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
239 try:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
240 o = objs[0]
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
241 print o.getCenter()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
242 if o == self.last_select:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
243 return
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
244 except:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
245 self.nameEditor.set_text('')
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
246 self.last_select = None
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
247 return
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
248 self.last_select = o
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
249 try:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
250 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
251 except:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
252 self.nameEditor.set_text('')
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
253 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
254
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
255 # 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
256 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
257 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
258
1251
fb5ad43c13eb Rename onCellClick to do_CellClick
Thinker K.F. Li <thinker@codemud.net>
parents: 1250
diff changeset
259 def do_CellClick(self, layer_idx, frame_idx):
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
260 self._director.show_scene(frame_idx)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
261 self.selectSceneObject(layer_idx, frame_idx)
1431
60f2c9a24cdb Keep the same active layer and frame when switching back a timeline.
Thinker K.F. Li <thinker@codemud.net>
parents: 1338
diff changeset
262 self._domviewui.remember_current_frame(layer_idx, frame_idx)
1207
489e6e474fdf Change names of methods and grouping methods
Thinker K.F. Li <thinker@codemud.net>
parents: 1206
diff changeset
263 pass
1263
1a54486c2987 Add undo points
wycc
parents: 1258
diff changeset
264
1528
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
265 def doAddLayer(self, w):
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
266 domview = self._domviewui
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
267 layer_num = domview.get_layer_num()
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
268 domview.insert_layer(layer_num)
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
269 pass
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
270
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
271 def doRemoveLayer(self, w):
1529
af8dd27bf450 Remove layer from button
Thinker K.F. Li <thinker@codemud.net>
parents: 1528
diff changeset
272 domview = self._domviewui
af8dd27bf450 Remove layer from button
Thinker K.F. Li <thinker@codemud.net>
parents: 1528
diff changeset
273 layer_idx, frame_idx = domview.get_current_frame()
1531
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
274 if layer_idx == 0: # never remove first layer (default)
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
275 return
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
276
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
277 # We must switch current layer to another one before removing a layer
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
278 # group node. It avoids a crash since inkscape does not know the group
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
279 # node of the layer is removed, and it would emit a signal on this node
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
280 # later.
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
281 self.selectSceneObject(layer_idx - 1, frame_idx)
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
282
5a3597eba722 Switch current layer away before removing a layer.
Thinker K.F. Li <thinker@codemud.net>
parents: 1529
diff changeset
283 self._domviewui.remember_current_frame(layer_idx - 1, frame_idx)
1529
af8dd27bf450 Remove layer from button
Thinker K.F. Li <thinker@codemud.net>
parents: 1528
diff changeset
284 domview.rm_layer(layer_idx)
1528
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
285 pass
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
286
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
287 def doInsertKeyScene(self,w):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
288 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
289 self.insertKeyScene(layer_idx, frame_idx)
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
290 self.selectSceneObject(layer_idx, frame_idx)
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
291 self._drop_undo()
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
292 return
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
293
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
294 def doDuplicateKeyScene(self,w):
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
295 self.duplicateKeyScene()
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
296 self._drop_undo()
1266
d4559e7f82cd Remove _lockui
Thinker K.F. Li <thinker@codemud.net>
parents: 1265
diff changeset
297 pass
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
298
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
299 def doRemoveScene(self,w):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
300 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
301 self.removeKeyScene(layer_idx, frame_idx)
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
302 self._drop_undo()
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
303 return
941
9ba94c577a6f Add scene editor. This vewrsion can only switch scene. It can not change the scene yet.
wycc
parents:
diff changeset
304
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
305 def doExtendScene(self,w):
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
306 self.extendScene()
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
307 self._drop_undo()
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
308 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
309
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
310 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
311 """
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
312 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
313 """
1533
82d3a6b5d1c4 Clear selection before running timeline
Thinker K.F. Li <thinker@codemud.net>
parents: 1532
diff changeset
314 if self.btnRun.get_label() == "Run": # Go running
82d3a6b5d1c4 Clear selection before running timeline
Thinker K.F. Li <thinker@codemud.net>
parents: 1532
diff changeset
315 self.desktop.selection.clear()
82d3a6b5d1c4 Clear selection before running timeline
Thinker K.F. Li <thinker@codemud.net>
parents: 1532
diff changeset
316
1324
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
317 #
1325
e155064f6c7e More comment
Thinker K.F. Li <thinker@codemud.net>
parents: 1324
diff changeset
318 # Make dup groups empty.
e155064f6c7e More comment
Thinker K.F. Li <thinker@codemud.net>
parents: 1324
diff changeset
319 # It forces TweenObject to re-generate content from scratch.
1324
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
320 #
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
321 nlayers = self._domviewui.get_layer_num()
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
322 for layer_idx in range(nlayers):
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
323 layer_dup = self._domviewui.get_layer_dup_group(layer_idx)
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
324 for child in layer_dup.childList():
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
325 layer_dup.removeChild(child)
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
326 pass
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
327 pass
740b3239030e Clear dup group before running animation.
Thinker K.F. Li <thinker@codemud.net>
parents: 1323
diff changeset
328
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
329 self.btnRun.set_label("Stop")
1206
1d476b35dc79 Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents: 1205 1186
diff changeset
330 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>
parents: 1205 1186
diff changeset
331 self.last_update = glib.timeout_add(tmout, self.doRunNext)
1533
82d3a6b5d1c4 Clear selection before running timeline
Thinker K.F. Li <thinker@codemud.net>
parents: 1532
diff changeset
332 else: # Stop running
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
333 self.btnRun.set_label("Run")
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
334 glib.source_remove(self.last_update)
1161
a7faab54e8f8 Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1160
diff changeset
335 pass
1206
1d476b35dc79 Merge and move code of tracking max frame number to MBScene_dom_monitor
Thinker K.F. Li <thinker@codemud.net>
parents: 1205 1186
diff changeset
336 pass
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
337
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
338 def doRunNext(self):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
339 if self.current > self._domviewui.get_max_frame():
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
340 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>
parents: 1205 1186
diff changeset
341 pass
1161
a7faab54e8f8 Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1160
diff changeset
342 try:
1245
ccbf0c5d01d1 Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents: 1244
diff changeset
343 self._director.show_scene(self.current)
1161
a7faab54e8f8 Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1160
diff changeset
344 except:
a7faab54e8f8 Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1160
diff changeset
345 traceback.print_exc()
a7faab54e8f8 Fix broken of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1160
diff changeset
346 raise
1199
25e1579ed3d1 Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents: 1198
diff changeset
347 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>
parents: 1205 1186
diff changeset
348 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>
parents: 1205 1186
diff changeset
349 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>
parents: 1205 1186
diff changeset
350 pass
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
351
1222
03daff2d939c Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents: 1220
diff changeset
352 def doInsertFrame(self, w):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
353 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
354 self._domviewui.insert_frames(layer_idx, frame_idx, 1)
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
355 self._drop_undo()
1219
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
356
1222
03daff2d939c Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents: 1220
diff changeset
357 def doRemoveFrame(self, w):
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
358 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
359 self._domviewui.rm_frames(layer_idx, frame_idx, 1)
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
360 self._drop_undo()
1219
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
361
1249
16a1166c3850 Add more method being monitored
Thinker K.F. Li <thinker@codemud.net>
parents: 1248
diff changeset
362 def do_TweenTypeChange(self, w):
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
363 if self._disable_tween_type_selector:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
364 return
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
365
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
366 layer_idx, frame_idx = self._domviewui.get_active_layer_frame()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
367 tween_type = self.tweenTypeSelector.get_active()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
368
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
369 start, end, old_tween_type = \
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
370 self._domviewui.get_left_key(layer_idx, frame_idx)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
371 if end >= frame_idx and start != end:
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
372 # Length of tween > 1 and cover this frame
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
373 self._domviewui.chg_tween(layer_idx, start, tween_type=tween_type)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
374 pass
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
375 self._drop_undo()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
376 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
377
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
378 def onQuit(self, event):
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
379 self.OK = False
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
380 gtk.main_quit()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
381 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
382
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
383 def onOK(self, event):
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
384 self.OK = True
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
385 gtk.main_quit()
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
386 pass
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
387
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
388 def _add_buttons(self, hbox):
1528
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
389 btn = gtk.Button('Add a Layer')
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
390 btn.connect('clicked', self.doAddLayer)
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
391 hbox.pack_start(btn, expand=False, fill=False)
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
392
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
393 btn = gtk.Button('Remove the Layer')
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
394 btn.connect('clicked', self.doRemoveLayer)
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
395 hbox.pack_start(btn, expand=False, fill=False)
b7d70341ee57 Insert layer with unique name
Thinker K.F. Li <thinker@codemud.net>
parents: 1517
diff changeset
396
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
397 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
398 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
399 hbox.pack_start(btn, expand=False, fill=False)
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
400
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
401 btn=gtk.Button('Remove Key')
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
402 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
403 hbox.pack_start(btn, expand=False, fill=False)
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
404
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
405 btn=gtk.Button('Extend scene')
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
406 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
407 hbox.pack_start(btn, expand=False, fill=False)
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
408
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
409 btn=gtk.Button('Duplicate Key')
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
410 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
411 hbox.pack_start(btn, expand=False, fill=False)
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
412
1219
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
413 btn=gtk.Button('insert')
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
414 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
415 hbox.pack_start(btn, expand=False, fill=False)
1219
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
416
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
417 btn=gtk.Button('remove')
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
418 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
419 hbox.pack_start(btn, expand=False, fill=False)
1219
b5e648a317eb Add insert and remove frame function.
wycc
parents: 1217
diff changeset
420
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
421 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
422 btn.connect('clicked', self.doRun)
1147
5cfa73d7e80f Add the Run button to simulate the animation
wycc
parents: 1146
diff changeset
423 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
424 hbox.pack_start(btn, expand=False, fill=False)
1174
96a7abce774a Add functions to insert and remove frame.
wycc
parents: 1171
diff changeset
425
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
426 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
427 self.addTweenTypeSelector(hbox)
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
428 pass
1144
257beac7c982 Add blank line between methods.
Thinker K.F. Li <thinker@codemud.net>
parents: 1142
diff changeset
429
1314
2aa3770f02bf Fix issue of events for setting cursor of treeview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1304
diff changeset
430 def do_show(self):
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
431 self.OK = True
1237
b5cceb2b87bb Sucessful extend and duplicate
Thinker K.F. Li <thinker@codemud.net>
parents: 1236
diff changeset
432 if not self._root:
b5cceb2b87bb Sucessful extend and duplicate
Thinker K.F. Li <thinker@codemud.net>
parents: 1236
diff changeset
433 self._root = self.desktop.doc().root().repr
1149
0ffef2df6201 Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents: 1148
diff changeset
434 pass
0ffef2df6201 Rename MBScene.dom to MBScene.root
Thinker K.F. Li <thinker@codemud.net>
parents: 1148
diff changeset
435
1128
b65ac686a7c5 Switch to the DOM-like API. The SPObject become the base of the DOM-like API.
wycc
parents: 1125
diff changeset
436 self.document = self.desktop.doc().rdoc
1240
84bcd398cccc Fix bug of removing keyframe
Thinker K.F. Li <thinker@codemud.net>
parents: 1239
diff changeset
437
1304
94e6594dea59 Make comp_dock being instantiated by domview_ui
Thinker K.F. Li <thinker@codemud.net>
parents: 1303
diff changeset
438 self._domviewui.set_desktop(self.desktop)
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
439 self._domviewui.handle_doc_root(self.document, self._root)
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
440 self._domviewui.register_active_frame_callback(self.do_CellClick)
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
441 self._director = scenes_director(self._domviewui)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
442
1064
16c69756ef5d Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents: 1032
diff changeset
443 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
444 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>
parents: 1205 1186
diff changeset
445 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
446 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
447 else:
16c69756ef5d Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents: 1032
diff changeset
448 self.top.remove(self.startWindow)
1150
6586cd10c92f Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents: 1149
diff changeset
449 pass
6586cd10c92f Refactory frameline.py
Thinker K.F. Li <thinker@codemud.net>
parents: 1149
diff changeset
450
1222
03daff2d939c Add a space after every comma in an argument list
Thinker K.F. Li <thinker@codemud.net>
parents: 1220
diff changeset
451 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
452 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
453 self.top.pack_start(vbox, expand=False)
1264
ff410dcdea02 Rename _domview to _domviewui
wycc
parents: 1263
diff changeset
454 frame_ui = self._domviewui.get_frame_ui_widget()
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
455 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
456 hbox=gtk.HBox(False, 0)
1231
d28b1b840bfc Integrate MBDOM_UI to MBScene
Thinker K.F. Li <thinker@codemud.net>
parents: 1230
diff changeset
457 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
458 vbox.pack_start(hbox, expand=False)
981
9e7865906bfc Add MadButterfly name space
wycc
parents: 980
diff changeset
459
1064
16c69756ef5d Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents: 1032
diff changeset
460 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
461 self.last_update = None
1337
05ced4a389bf Fix issue of mixing actions for initialiaztion with user actions
Thinker K.F. Li <thinker@codemud.net>
parents: 1334
diff changeset
462
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
463 self._drop_undo()
1455
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
464
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
465 self.desktop.connectCurrentLayerChanged(self.handle_change_layer)
1338
d0e6f350b3fd Clear change log to prevent from undo/redo.
Thinker K.F. Li <thinker@codemud.net>
parents: 1337
diff changeset
466
1064
16c69756ef5d Add NodeObserver to monitor the change of the layer and update it in the scene editor.
wycc
parents: 1032
diff changeset
467 return False
1314
2aa3770f02bf Fix issue of events for setting cursor of treeview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1304
diff changeset
468
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
469 ## \brief To handle context menu event.
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
470 #
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
471 def do_make_component_from_group(self, node):
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
472 node_parent_group = node.parent()
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
473
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
474 comp_name = 'Component ' + node.getAttribute('id')
1329
2b051e474b0f Avoid component name confliction
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
475 i = 0
2b051e474b0f Avoid component name confliction
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
476 while comp_name in self._domviewui.all_comp_names():
2b051e474b0f Avoid component name confliction
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
477 comp_name = 'Component %s - %d' % (comp_name, i)
2b051e474b0f Avoid component name confliction
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
478 i = i + 1
2b051e474b0f Avoid component name confliction
Thinker K.F. Li <thinker@codemud.net>
parents: 1328
diff changeset
479 pass
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
480 self._domviewui.add_component_from_group(comp_name, node)
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
481
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
482 self._domviewui.link_to_component(comp_name, node_parent_group)
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
483 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
484
1455
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
485 ## \brief Handle event that user change layers.
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
486 #
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
487 # This method is always being called for chaning layer event.
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
488 # So, we should do some check at beginning for re-entry condition.
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
489 #
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
490 def handle_change_layer(self, node):
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
491 layer = self.desktop.currentLayer()
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
492 node = layer.repr
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
493
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
494 #
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
495 # Only scene group and dup group are allowed.
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
496 #
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
497 try:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
498 scene_group_attr = node.getAttribute('scene_group')
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
499 except KeyError:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
500 pass
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
501 else:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
502 if scene_group_attr == 'true':
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
503 return
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
504 pass
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
505
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
506 try:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
507 label = node.getAttribute('inkscape:label')
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
508 except KeyError:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
509 pass
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
510 else:
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
511 if label == 'dup':
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
512 return
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
513 pass
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
514 # It is not a scene or dup group.
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
515
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
516 layer_idx, frame_idx = self._domviewui.get_current_frame()
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
517 self.selectSceneObject(layer_idx, frame_idx)
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
518 pass
8ea0d32a1864 Prevent user from escaping from scene or dup group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1431
diff changeset
519
1328
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
520 ## \brief Add menu item to context menu.
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
521 #
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
522 # This method is called by pyink.pyink_context_menu() to notify the
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
523 # creation of context menu for a node.
407f321f0d7c Add a svg:use after transform a group to a component
Thinker K.F. Li <thinker@codemud.net>
parents: 1325
diff changeset
524 #
1323
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
525 def context_menu(self, spitem, menu_factory):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
526 node = spitem.repr
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
527 if node.name() != 'svg:g':
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
528 return # not a group
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
529
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
530 if self._domviewui.is_graph_node(node):
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
531 menu_item_handler = \
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
532 lambda *args: self.do_make_component_from_group(node)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
533 menu_factory.add_item_label('Make a component',
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
534 menu_item_handler)
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
535 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
536 pass
ffbbd3aa218d Make a component from a group.
Thinker K.F. Li <thinker@codemud.net>
parents: 1314
diff changeset
537
1314
2aa3770f02bf Fix issue of events for setting cursor of treeview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1304
diff changeset
538 def show(self):
2aa3770f02bf Fix issue of events for setting cursor of treeview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1304
diff changeset
539 self.do_show()
2aa3770f02bf Fix issue of events for setting cursor of treeview.
Thinker K.F. Li <thinker@codemud.net>
parents: 1304
diff changeset
540 pass
956
167e359c9d5b Re-indent MBScene.py
Thinker K.F. Li <thinker@codemud.net>
parents: 955
diff changeset
541 pass