Mercurial > MadButterfly
changeset 1242:1b1eb8f9a866
Rename *_dom to *_domview and *_framelines to *_frameline_stack
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 10 Jan 2011 16:09:18 +0800 |
parents | e64f5bd2270c |
children | d5f70928e9f1 |
files | pyink/MBScene.py |
diffstat | 1 files changed, 89 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- a/pyink/MBScene.py Mon Jan 10 13:37:33 2011 +0800 +++ b/pyink/MBScene.py Mon Jan 10 16:09:18 2011 +0800 @@ -96,9 +96,9 @@ # # This class monitors DOM-tree to maintain _maxframe and maps for node ID to # node and scene group ID to scene node. -class MBScene_dom_monitor(object): +class MBScene_domview_monitor(object): def __init__(self, *args, **kws): - super(MBScene_dom_monitor, self).__init__() + super(MBScene_domview_monitor, self).__init__() self._maxframe = 0 self._id2node = {} # map ID to the node in the DOM tree. @@ -348,19 +348,19 @@ pass -## \brief Layer of MBScene to manipulate DOM tree. +## \brief This layer provide a data view to the DOM-tree. # # This class maintains layers information, and provides functions to create, # change and destroy scene node and scene group. A scene node is a 'ns0:scene' # in 'ns0:scenes' tag. A scene group is respective 'svg:g' for a scene. # -class MBScene_dom(MBScene_dom_monitor): +class MBScene_domview(MBScene_domview_monitor): # Declare variables, here, for keeping tracking _doc = None _root = None def __init__(self, *args, **kws): - super(MBScene_dom, self).__init__() + super(MBScene_domview, self).__init__() pass ## \brief Create a scenes node if not existed. @@ -409,7 +409,7 @@ self._root = root self._layers = [] - self._start_monitor() # start MBScene_dom_monitor + self._start_monitor() # start MBScene_domview_monitor self._init_metadata() self._parse_all_layers() pass @@ -647,9 +647,15 @@ return self._maxframe pass -## \brief Maintain frameline list for MBScene. +## \brief Maintain a stack of frameline UI component. # -class MBScene_framelines(object): +# Every layer is assocated with a frameline. Framelines are showed/stacked in +# virtical. Framelines of lower layers are placed at lower position on the +# screen. This class provide a set of API to access framelines with layer and +# frame index number. You access/set content of frameline by specifing layer +# index and frame index. +# +class MBScene_frameline_stack(object): _frameline_tween_types = (frameline.TWEEN_TYPE_NONE, frameline.TWEEN_TYPE_SHAPE) _num_frames_of_line = 100 @@ -657,7 +663,7 @@ _framelines = None def __init__(self, *args, **kws): - super(MBScene_framelines, self).__init__(*args, **kws) + super(MBScene_frameline_stack, self).__init__(*args, **kws) self._last_mouse_over_frameline = None self._last_active_frameline = None @@ -988,29 +994,29 @@ ## \brief Bridge of DOM-tree to syncrhonize data-model and UI. # # This class is a wrapper -class MBDOM_UI(object): +class MBScene_domview_ui(object): _tween_type_names = ('normal', 'scale') def __init__(self): - super(MBDOM_UI, self).__init__() - self._fl_mgr = MBScene_framelines() - self._dom = MBScene_dom() + super(MBScene_domview_ui, self).__init__() + self._fl_stack = MBScene_frameline_stack() + self._dom = MBScene_domview() pass ## \brief Update content of a frameline from scenes of respective layer. # def _update_frameline_content(self, layer_idx): - fl_mgr = self._fl_mgr + fl_stack = self._fl_stack scene_nodes = self._dom.get_all_scene_node_of_layer(layer_idx) for scene_node in scene_nodes: start, end, tween_name = self._dom._parse_one_scene(scene_node) - fl_mgr.mark_keyframe(layer_idx, start) - fl_mgr.set_keyframe_data(layer_idx, start, scene_node) + fl_stack.mark_keyframe(layer_idx, start) + fl_stack.set_keyframe_data(layer_idx, start, scene_node) if start != end: tween_type = self._tween_type_names.index(tween_name) tween_len = end - start + 1 - fl_mgr.tween(layer_idx, start, tween_len, tween_type) + fl_stack.tween(layer_idx, start, tween_len, tween_type) pass pass pass @@ -1025,8 +1031,8 @@ layer_group_node = self._dom.get_layer_group(layer_idx) label = layer_group_node.getAttribute('inkscape:label') - self._fl_mgr._add_frameline(layer_idx) - self._fl_mgr.set_layer_label(layer_idx, label) + self._fl_stack._add_frameline(layer_idx) + self._fl_stack.set_layer_label(layer_idx, label) self._update_frameline_content(layer_idx) pass @@ -1036,9 +1042,9 @@ # def handle_doc_root(self, doc, root): self._dom.handle_doc_root(doc, root) - self._fl_mgr._init_framelines() + self._fl_stack._init_framelines() self._add_frameline_for_every_layer() - self._fl_mgr._show_framelines() + self._fl_stack._show_framelines() pass ## \brief Mark given frame as a key frame. @@ -1050,8 +1056,8 @@ scene_node = self._dom.add_scene_node(key_idx, key_idx) self._dom.chg_scene_node(scene_node, ref=scene_group_id) - self._fl_mgr.mark_keyframe(layer_idx, key_idx) - self._fl_mgr.set_keyframe_data(layer_idx, key_idx, scene_node) + self._fl_stack.mark_keyframe(layer_idx, key_idx) + self._fl_stack.set_keyframe_data(layer_idx, key_idx, scene_node) pass ## \brief Tweening a key frame. @@ -1061,10 +1067,10 @@ # def tween(self, layer_idx, key_frame_idx, tween_len, tween_type=TweenObject.TWEEN_TYPE_NORMAL): - self._fl_mgr.tween(layer_idx, key_frame_idx, tween_len, tween_type) + self._fl_stack.tween(layer_idx, key_frame_idx, tween_len, tween_type) end_frame_idx = key_frame_idx + tween_len - 1 - scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) + scene_node = self._fl_stack.get_keyframe_data(layer_idx, key_frame_idx) tween_name = self._tween_type_names[tween_type] self._dom.chg_scene_node(scene_node, end=end_frame_idx, tween_type=tween_name) @@ -1074,9 +1080,9 @@ # def chg_tween(self, layer_idx, key_frame_idx, tween_len=None, tween_type=None): - scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) + scene_node = self._fl_stack.get_keyframe_data(layer_idx, key_frame_idx) start, end, old_tween_type = \ - self._fl_mgr.get_key_tween(layer_idx, key_frame_idx) + self._fl_stack.get_key_tween(layer_idx, key_frame_idx) if tween_len is not None: end = start + tween_len - 1 @@ -1092,16 +1098,16 @@ pass tween_len = end - start + 1 - self._fl_mgr.tween(layer_idx, start, tween_len, tween_type) + self._fl_stack.tween(layer_idx, start, tween_len, tween_type) pass ## \brief Unmark a frame from a key frame. # def unmark_key(self, layer_idx, key_frame_idx): - scene_node = self._fl_mgr.get_keyframe_data(layer_idx, key_frame_idx) + scene_node = self._fl_stack.get_keyframe_data(layer_idx, key_frame_idx) self._dom.rm_scene_node_n_group(scene_node) - self._fl_mgr.unmark_keyframe(layer_idx, key_frame_idx) + self._fl_stack.unmark_keyframe(layer_idx, key_frame_idx) pass ## \brief Insert frames at specified position. @@ -1109,7 +1115,7 @@ # All frame at and after given position will shift right. # def insert_frames(self, layer_idx, frame_idx, num): - self._fl_mgr.insert_frames(layer_idx, frame_idx, num) + self._fl_stack.insert_frames(layer_idx, frame_idx, num) self._dom.insert_frames(layer_idx, frame_idx, num) pass @@ -1119,7 +1125,7 @@ # \ref num frames are removed. # def rm_frames(self, layer_idx, frame_idx, num): - self._fl_mgr.insert_frames(layer_idx, frame_idx, num) + self._fl_stack.insert_frames(layer_idx, frame_idx, num) self._dom.rm_frames(layer_idx, frame_idx, num) pass @@ -1130,20 +1136,20 @@ # def insert_layer(self, layer_idx): self._dom.insert_layer(layer_idx) - self._fl_mgr._add_frameline(layer_idx) - self._fl_mgr._show_framelines() + self._fl_stack._add_frameline(layer_idx) + self._fl_stack._show_framelines() pass ## \brief Remove given layer. # def rm_layer(self, layer_idx): self._dom.rm_layer(layer_idx) - self._fl_mgr._remove_frameline(layer_idx) - self._fl_mgr._show_framelines() + self._fl_stack._remove_frameline(layer_idx) + self._fl_stack._show_framelines() pass def set_active_layer_frame(self, layer_idx, frame_idx): - self._fl_mgr.active_frame(layer_idx, frame_idx) + self._fl_stack.active_frame(layer_idx, frame_idx) pass ## \bref Return current active frame and its layer. @@ -1151,7 +1157,7 @@ # \return (layer_idx, frame_idx) of active frame, or (-1, -1) when no # active one. def get_active_layer_frame(self): - layer_idx, frame_idx = self._fl_mgr.get_active_layer_frame() + layer_idx, frame_idx = self._fl_stack.get_active_layer_frame() return layer_idx, frame_idx def get_layer_num(self): @@ -1162,7 +1168,7 @@ # The given frame index must be exactly a key frame. # def get_key_group(self, layer_idx, frame_idx): - scene_node = self._fl_mgr.get_keyframe_data(layer_idx, frame_idx) + scene_node = self._fl_stack.get_keyframe_data(layer_idx, frame_idx) scene_group_id = scene_node.getAttribute('ref') scene_group_node = self._dom.get_node(scene_group_id) return scene_group_node @@ -1182,31 +1188,31 @@ # def get_key(self, layer_idx, frame_idx): start, end, tween_type = \ - self._fl_mgr.get_key_tween(layer_idx, frame_idx) + self._fl_stack.get_key_tween(layer_idx, frame_idx) return start, end, tween_type def get_left_key(self, layer_idx, frame_idx): start, end, tween_type = \ - self._fl_mgr.get_left_key_tween(layer_idx, frame_idx) + self._fl_stack.get_left_key_tween(layer_idx, frame_idx) return start, end, tween_type ## \brief Return information of key frames in the given layer. # def get_layer_keys(self, layer_idx): - key_tweens = self._fl_mgr.get_all_key_tween_of_layer(layer_idx) + key_tweens = self._fl_stack.get_all_key_tween_of_layer(layer_idx) return key_tweens ## \brief Return widget showing frames and layers. # def get_frame_ui_widget(self): - return self._fl_mgr._frameline_box + return self._fl_stack._frameline_box ## \brief Register a callback for activating a frame event. # # The callback function is called when a frame is activated. # def register_active_frame_callback(self, cb): - self._fl_mgr.register_active_frame_callback(cb) + self._fl_stack.register_active_frame_callback(cb) pass ## \brief Get duplicate group of a layer. @@ -1255,9 +1261,8 @@ ## \brief MBScene connect GUI and DOM-tree # -# This class connect behavior of GUI to the DOM-tree. All about GUI is -# implemented by this class. It use API provided by MBScene_dom to reflect -# actions to the DOM-tree. +# This method accepts user actions and involves MBScene_domview_ui to update +# data on the document. # class MBScene(object): _tween_obj_tween_types = (TweenObject.TWEEN_TYPE_NORMAL, @@ -1283,7 +1288,7 @@ self._disable_tween_type_selector = False self.current = 0 - self._dom = MBDOM_UI() + self._domview = MBScene_domview_ui() pass def change_active_frame(self, node): @@ -1300,11 +1305,11 @@ try: layer_idx, (start, end, tween_type) = \ - self._dom.find_key_from_group(node_id) + self._domview.find_key_from_group(node_id) except: pass else: - self._dom.set_active_layer_frame(layer_idx, start) + self._domview.set_active_layer_frame(layer_idx, start) break node = node.parent() @@ -1321,24 +1326,24 @@ """ try: - self._dom.mark_key(layer_idx, frame_idx) + self._domview.mark_key(layer_idx, frame_idx) except ValueError: # existed key frame pass pass def removeKeyScene(self, layer_idx, frame_idx): - self._dom.unmark_key(layer_idx, frame_idx) + self._domview.unmark_key(layer_idx, frame_idx) self.setCurrentScene(frame_idx) pass def extendScene(self): - layer_idx, frame_idx = self._dom.get_active_layer_frame() + layer_idx, frame_idx = self._domview.get_active_layer_frame() start, end, tween_type = \ - self._dom.get_left_key(layer_idx, frame_idx) + self._domview.get_left_key(layer_idx, frame_idx) tween_len = frame_idx - start + 1 - self._dom.tween(layer_idx, start, tween_len, tween_type) + self._domview.tween(layer_idx, start, tween_len, tween_type) - scene_group = self._dom.get_key_group(layer_idx, start) + scene_group = self._domview.get_key_group(layer_idx, start) self._enterGroup(scene_group) pass @@ -1363,25 +1368,25 @@ """ self.current = idx self.tween.updateMapping() - for layer_idx in range(self._dom.get_layer_num()): - dup_group = self._dom.get_layer_dup_group(layer_idx) + for layer_idx in range(self._domview.get_layer_num()): + dup_group = self._domview.get_layer_dup_group(layer_idx) dup_group.setAttribute('style', 'display: none') - all_key_tweens = self._dom.get_layer_keys(layer_idx) + all_key_tweens = self._domview.get_layer_keys(layer_idx) for start, end, tween_type in all_key_tweens: if start == idx: # at key frame scene_group = \ - self._dom.get_key_group(layer_idx, start) + self._domview.get_key_group(layer_idx, start) scene_group.setAttribute('style', '') elif start < idx and end >= idx: # in Tween dup_group.setAttribute('style', '') scene_group = \ - self._dom.get_key_group(layer_idx, start) + self._domview.get_key_group(layer_idx, start) scene_group.setAttribute('style', 'display: none') try: next_scene_group = \ - self._dom.get_key_group(layer_idx, end + 1) + self._domview.get_key_group(layer_idx, end + 1) except: # no next key frame next_scene_group = scene_group pass @@ -1397,7 +1402,7 @@ pass else: # this scene should not be showed. scene_group = \ - self._dom.get_key_group(layer_idx, start) + self._domview.get_key_group(layer_idx, start) scene_group.setAttribute('style', 'display: none') pass pass @@ -1416,32 +1421,33 @@ def selectSceneObject(self, layer_idx, frame_idx): try: - start, stop, tween_type = self._dom.get_key(layer_idx, frame_idx) + start, stop, tween_type = \ + self._domview.get_key(layer_idx, frame_idx) except: return - scene_group = self._dom.get_key_group(layer_idx, start) + scene_group = self._domview.get_key_group(layer_idx, start) self._enterGroup(scene_group) self.setTweenType(tween_type) pass def duplicateKeyScene(self): # Search for the current scene - layer_idx, frame_idx = self._dom.get_active_layer_frame() + layer_idx, frame_idx = self._domview.get_active_layer_frame() try: left_start, left_end, left_tween_type = \ - self._dom.get_left_key(layer_idx, frame_idx) + self._domview.get_left_key(layer_idx, frame_idx) except: return if left_end >= frame_idx: return - self._dom.mark_key(layer_idx, frame_idx) + self._domview.mark_key(layer_idx, frame_idx) - scene_group = self._dom.get_key_group(layer_idx, frame_idx) + scene_group = self._domview.get_key_group(layer_idx, frame_idx) left_scene_group = \ - self._dom.get_key_group(layer_idx, left_start) + self._domview.get_key_group(layer_idx, left_start) dup_group = self._duplicate_group(left_scene_group, scene_group) @@ -1532,7 +1538,7 @@ def doInsertKeyScene(self,w): self._lockui=True - layer_idx, frame_idx = self._dom.get_active_layer_frame() + layer_idx, frame_idx = self._domview.get_active_layer_frame() self.insertKeyScene(layer_idx, frame_idx) self.selectSceneObject(layer_idx, frame_idx) self._lockui=False @@ -1545,7 +1551,7 @@ def doRemoveScene(self,w): self._lockui = True - layer_idx, frame_idx = self._dom.get_active_layer_frame() + layer_idx, frame_idx = self._domview.get_active_layer_frame() self.removeKeyScene(layer_idx, frame_idx) self._lockui = False return @@ -1574,7 +1580,7 @@ pass def doRunNext(self): - if self.current > self._dom.get_max_frame(): + if self.current > self._domview.get_max_frame(): self.current = 0 pass try: @@ -1589,28 +1595,28 @@ def doInsertFrame(self, w): self.lockui=True - layer_idx, frame_idx = self._dom.get_active_layer_frame() - self._dom.insert_frames(layer_idx, frame_idx, 1) + layer_idx, frame_idx = self._domview.get_active_layer_frame() + self._domview.insert_frames(layer_idx, frame_idx, 1) self.lockui=False def doRemoveFrame(self, w): self.lockui=True - layer_idx, frame_idx = self._dom.get_active_layer_frame() - self._dom.rm_frames(layer_idx, frame_idx, 1) + layer_idx, frame_idx = self._domview.get_active_layer_frame() + self._domview.rm_frames(layer_idx, frame_idx, 1) self.lockui=False def onTweenTypeChange(self, w): if self._disable_tween_type_selector: return - layer_idx, frame_idx = self._dom.get_active_layer_frame() + layer_idx, frame_idx = self._domview.get_active_layer_frame() tween_type = self.tweenTypeSelector.get_active() start, end, old_tween_type = \ - self._dom.get_left_key(layer_idx, frame_idx) + self._domview.get_left_key(layer_idx, frame_idx) if end >= frame_idx and start != end: # Length of tween > 1 and cover this frame - self._dom.chg_tween(layer_idx, start, tween_type=tween_type) + self._domview.chg_tween(layer_idx, start, tween_type=tween_type) pass pass @@ -1667,8 +1673,8 @@ self.document = self.desktop.doc().rdoc self.tween = TweenObject(self.document, self._root) - self._dom.handle_doc_root(self.document, self._root) - self._dom.register_active_frame_callback(self.onCellClick) + self._domview.handle_doc_root(self.document, self._root) + self._domview.register_active_frame_callback(self.onCellClick) if self.top == None: self.top = gtk.VBox(False, 0) @@ -1681,7 +1687,7 @@ vbox = gtk.VBox(False, 0) self.startWindow = vbox self.top.pack_start(vbox, expand=False) - frame_ui = self._dom.get_frame_ui_widget() + frame_ui = self._domview.get_frame_ui_widget() vbox.pack_start(frame_ui, expand=False) hbox=gtk.HBox(False, 0) self._add_buttons(hbox)