Mercurial > MadButterfly
diff pyink/MBScene.py @ 1150:6586cd10c92f
Refactory frameline.py
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sun, 26 Dec 2010 19:17:12 +0800 |
parents | 0ffef2df6201 |
children | 71c72e8d6755 |
line wrap: on
line diff
--- a/pyink/MBScene.py Fri Dec 24 15:40:16 2010 +0800 +++ b/pyink/MBScene.py Sun Dec 26 19:17:12 2010 +0800 @@ -1,6 +1,6 @@ #!/usr/bin/python -# -*- indent-tabs-mode: t; tab-width: 8; python-indent: 4; -*- -# vim: sw=4:ts=8:sts=4 +# -*- indent-tabs-mode: t; tab-width: 8; python-indent: 4; fill-column: 79 -*- +# vim: sw=4:ts=8:sts=4:textwidth=79 import pygtk import gtk import glib @@ -12,6 +12,7 @@ import pybInkscape import math from tween import TweenObject +from frameline import frameline, frameruler # Please refer to # http://www.assembla.com/wiki/show/MadButterfly/Inkscape_extention @@ -141,6 +142,11 @@ pass class MBScene(): + _tween_types = (frameline.TWEEN_TYPE_NONE, + frameline.TWEEN_TYPE_MOVE, + frameline.TWEEN_TYPE_SHAPE) + _tween_type_names = ('normal', 'relocate', 'scale') + def __init__(self, desktop, win, root=None): self.desktop = desktop self.window = win @@ -157,6 +163,7 @@ self.root = root self.framerate=12 self.maxframe=0 + self._disable_tween_type_selector = False pass def show_selection(self,w,obj): @@ -267,7 +274,7 @@ node.appendChild(ns) for layer in range(0,len(self._framelines)): lobj = self._framelines[layer] - lobj.addScenes(rdoc,ns) + self.addScenes(lobj, ns) pass pass pass @@ -285,9 +292,6 @@ self.scenemap = None doc = self.root - #obs = pybInkscape.PYNodeObserver() - #obs = LayerAddRemoveWatcher(self) - #doc.addObserver(obs) addEventListener(doc,'DOMNodeInserted',self.updateUI,None) addEventListener(doc,'DOMNodeRemoved',self.updateUI,None) doc.childList() @@ -413,8 +417,7 @@ print 'Add key ', x self.last_line.add_keyframe(x,ns) self.update() - self.last_line.update() - + pass def removeKeyScene(self): nth = self.last_frame @@ -552,8 +555,7 @@ # Check the duplicated scene group and create it if it is not available try: - if layer.duplicateGroup: - layer.duplicateGroup.setAttribute("style","display:none") + layer.duplicateGroup.setAttribute("style","display:none") except: print "*"*40 layer.duplicateGroup = self.document.createElement("svg:g") @@ -574,23 +576,22 @@ s.ref.setAttribute("style","display:none") i = i + 1 continue + if nth == s.idx + 1: s.ref.setAttribute("style","") else: if nth > (s.idx+1) and nth <= (layer._keys[i+1].idx+1): if i+2 < len(layer._keys): - #s.ref.parent().appendChild(layer.duplicateGroup) s.ref.setAttribute("style","display:none") layer.duplicateGroup.setAttribute("style","") - self.tween.updateTweenContent(layer.duplicateGroup, layer.get_tween_type(s.idx),s, layer._keys[i+2], nth) + d = layer._keys[i + 2] + self.tween.\ + updateTweenContent(layer.duplicateGroup, + layer.get_tween_type(s.idx), + s, d, nth) else: layer.duplicateGroup.setAttribute("style","") - #layer.duplicateGroup = s.ref.duplicate(self.document) - #layer.duplicateGroup.setAttribute("style","") - #layer.duplicateGroup.setAttribute("inkscape:label","dup") - #layer.duplicateGroup.setAttribute("sodipodi:insensitive","1") s.ref.setAttribute("style","display:none") - #s.ref.parent().appendChild(layer.duplicateGroup) pass else: s.ref.setAttribute("style","display:none") @@ -599,21 +600,6 @@ pass pass - def DOMtoItem(self,obj): - """ - Find the corresponding PYSPObject object for a DOM object. - """ - return self.DOMtoItem_recursive(self.desktop.doc().root(),obj) - - def DOMtoItem_recursive(self,tree,obj): - nodes = tree.childList() - for s in nodes: - if s.getId() == obj.getAttribute('id'): - return s - d = self.DOMtoItem_recursive(s,obj) - if d != None: return d - - def enterGroup(self,obj): for l in self.layers: for s in l.node.childList(): @@ -648,14 +634,11 @@ pass pass - def setTweenType(self,typ): - if typ == 'normal': - self.tweenTypeSelector.set_active(0) - elif typ == 'relocate': - self.tweenTypeSelector.set_active(1) - elif typ == 'scale': - self.tweenTypeSelector.set_active(2) - pass + def setTweenType(self, tween_type): + sel_type = MBScene._tween_types.index(tween_type) + self._disable_tween_type_selector = True + self.tweenTypeSelector.set_active(sel_type) + self._disable_tween_type_selector = False pass def newCell(self,file): @@ -689,7 +672,6 @@ pass def _create_framelines(self): - import frameline self.scrollwin = gtk.ScrolledWindow() self.scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scrollwin.set_size_request(-1,150) @@ -700,7 +682,7 @@ vbox.show() self.scrollwin.add_with_viewport(vbox) - ruler = frameline.frameruler(nframes) + ruler = frameruler(nframes) ruler.set_size_request(nframes * 10, 20) ruler.show() hbox = gtk.HBox() @@ -715,7 +697,7 @@ # self._framelines = [] for i in range(len(self.layers)-1,-1,-1): - line = frameline.frameline(nframes) + line = frameline(nframes) hbox = gtk.HBox() label = gtk.Label(self.layers[i].node.getAttribute("inkscape:label")) label.set_size_request(100,0) @@ -746,7 +728,9 @@ frameline.add_keyframe(scene.start-1,scene.node) if scene.start != scene.end: frameline.add_keyframe(scene.end-1,scene.node) - frameline.tween(scene.start-1,scene.type) + tween_type_idx = self._tween_type_names.index(scene.type) + tween_type = self._tween_types[tween_type_idx] + frameline.tween(scene.start-1, tween_type) pass pass pass @@ -895,39 +879,25 @@ hbox.pack_start(btn,expand=False,fill=False) self.addNameEditor(hbox) self.addTweenTypeSelector(hbox) - pass - def onTweenTypeChange(self,w): - n = self.tweenTypeSelector.get_active() + def onTweenTypeChange(self, w): + if self._disable_tween_type_selector: + return + if self.last_line == None: return frameline = self.last_line i = 0 found = -1 - while i < len(frameline._keys): - s = frameline._keys[i] - if s.right_tween is False: - if self.last_frame == s.idx: - found = s.idx - break - else: - pass - i = i + 1 - continue - - if self.last_frame >= s.idx and self.last_frame <= frameline._keys[i+1].idx: - found = s.idx + for start_idx, stop_idx, tween_type in frameline.get_frame_blocks(): + if start_idx < stop_idx: + n = self.tweenTypeSelector.get_active() + new_tween_type = MBScene._tween_types[n] + self.last_line.set_tween_type(start_idx, new_tween_type) + self.update() break - else: - pass - i = i + 2 pass - pass - if found == -1: return - self.last_line.set_tween_type(found,self.tweenTypeSelector.get_active_text()) - self.last_line.update() - self.update() pass def addTweenTypeSelector(self,hbox): @@ -955,6 +925,24 @@ gtk.main_quit() pass + def addScenes(self, frameline, scenes_node): + doc = self.document + for start_idx, stop_idx, tween_type in frameline.get_frame_blocks(): + ref = frameline.get_frame_data(start_idx) + tween_type_idx = self._tween_types.index(tween_type) + tween_type_name = self._tween_type_names[tween_type_idx] + + scene_node = doc.createElement("ns0:scene") + scenes_node.appendChild(scene_node) + scene_node.setAttribute("start", str(start_idx + 1)) + if start_idx != stop_idx: + scene_node.setAttribute("end", str(stop_idx + 1)) + pass + scene_node.setAttribute("ref", ref.attribute("id")) + scene_node.setAttribute("type", tween_type_name) + pass + pass + def updateUI(self,node=None,arg=None): if self.lockui: return self.lockui = True @@ -984,6 +972,8 @@ self.desktop.getToplevel().child.child.pack_end(self.top,expand=False) else: self.top.remove(self.startWindow) + pass + vbox = gtk.VBox(False,0) self.startWindow = vbox self.top.pack_start(vbox,expand=False) @@ -992,10 +982,6 @@ self.addButtons(hbox) vbox.pack_start(hbox,expand=False) - # self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - # self.window.connect("destroy", gtk.main_quit) - # self.window.set_position(gtk.WIN_POS_MOUSE) - self.top.show_all() self.last_update = None return False