Mercurial > MadButterfly
changeset 956:167e359c9d5b
Re-indent MBScene.py
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 17 Nov 2010 14:17:59 +0800 |
parents | 53b0f8dc2284 |
children | 8e3e46c26137 |
files | pyink/MBScene.py |
diffstat | 1 files changed, 567 insertions(+), 561 deletions(-) [+] |
line wrap: on
line diff
--- a/pyink/MBScene.py Wed Nov 17 13:30:32 2010 +0800 +++ b/pyink/MBScene.py Wed Nov 17 14:17:59 2010 +0800 @@ -43,607 +43,613 @@ pass class Scene: - def __init__(self, node, start,end): - self.node = node - self.start = int(start) - self.end = int(end) - pass + def __init__(self, node, start,end): + self.node = node + self.start = int(start) + self.end = int(end) pass + pass class MBScene(): - def __init__(self,desktop,win): - self.desktop = desktop - self.window = win - self.layer = [] - self.layer.append(Layer(None)) - self.scenemap = None - pass + def __init__(self,desktop,win): + self.desktop = desktop + self.window = win + self.layer = [] + self.layer.append(Layer(None)) + self.scenemap = None + pass - def confirm(self,msg): - vbox = gtk.VBox() - vbox.pack_start(gtk.Label(msg)) - self.button = gtk.Button('OK') - vbox.pack_start(self.button) - self.button.connect("clicked", self.onQuit) - self.window.add(vbox) - pass - - def dumpattr(self,n): - s = "" - for a,v in n.attrib.items(): - s = s + ("%s=%s" % (a,v)) - return s - - def dump(self,node,l=0): - print " " * l*2,"<", node.tag, self.dumpattr(node),">" - for n in node: - self.dump(n,l+1) - pass - print " " * l * 2,"/>" - pass - - def parseMetadata(self,node): - self.current = 1 - for n in node.childList(): - if n.repr.name() == 'ns0:scenes': - self.scenemap={} - cur = int(n.repr.attribute("current")) - self.current = cur - - for s in n.childList(): - print '--->',s.repr.name() - if s.repr.name() == 'ns0:scene': - try: - start = int(s.repr.attribute("start")) - except: - traceback.print_exc() - continue - try: - end = s.repr.attribute("end") - if end == None: - end = start - except: - end = start - pass - link = s.repr.attribute("ref") - self.scenemap[link] = [int(start),int(end)] - print "scene %d to %d" % (self.scenemap[link][0],self.scenemap[link][1]) - if cur >= start and cur <= end: - self.currentscene = link - pass - pass - pass - pass - pass - pass + def confirm(self,msg): + vbox = gtk.VBox() + vbox.pack_start(gtk.Label(msg)) + self.button = gtk.Button('OK') + vbox.pack_start(self.button) + self.button.connect("clicked", self.onQuit) + self.window.add(vbox) + pass + + def dumpattr(self,n): + s = "" + for a,v in n.attrib.items(): + s = s + ("%s=%s" % (a,v)) + pass + return s - - def parseScene(self): - """ - In this function, we will collect all items for the current scene and then relocate them back to the appropriate scene object. - """ - self.layer = [] - self.scenemap = None - doc = self.desktop.doc().root() - - for node in doc.childList(): - if node.repr.name() == 'svg:metadata': - self.parseMetadata(node) - pass - elif node.repr.name() == 'svg:g': - oldscene = None - #print layer.attrib.get("id") - lyobj = Layer(node) - self.layer.append(lyobj) - lyobj.current_scene = [] - for scene in node.childList(): - if scene.repr.name() == 'svg:g': - try: - scmap = self.scenemap[scene.getId()] - if scmap == None: - lyobj.current_scene.append(scene) - continue - if self.current <= scmap[1] and self.current >= scmap[0]: - oldscene = scene - pass - except: - lyobj.current_scene.append(scene) - continue - - lyobj.scene.append(Scene(scene,scmap[0],scmap[1])) - pass - else: - lyobj.current_scene.append(scene) - pass - pass + def dump(self,node,l=0): + print " " * l*2,"<", node.tag, self.dumpattr(node),">" + for n in node: + self.dump(n,l+1) + pass + print " " * l * 2,"/>" + pass + + def parseMetadata(self,node): + self.current = 1 + for n in node.childList(): + if n.repr.name() == 'ns0:scenes': + self.scenemap={} + cur = int(n.repr.attribute("current")) + self.current = cur - if oldscene != None: - # Put the objects back to the current scene - #for o in lyobj.current_scene: - #print o.tag - #oldscene.append(o) - pass + for s in n.childList(): + print '--->',s.repr.name() + if s.repr.name() == 'ns0:scene': + try: + start = int(s.repr.attribute("start")) + except: + traceback.print_exc() + continue + try: + end = s.repr.attribute("end") + if end == None: + end = start pass + except: + end = start + pass + link = s.repr.attribute("ref") + self.scenemap[link] = [int(start),int(end)] + print "scene %d to %d" % (self.scenemap[link][0],self.scenemap[link][1]) + if cur >= start and cur <= end: + self.currentscene = link + pass pass - - self.collectID() - self.dumpID() - pass - - def collectID(self): - self.ID = {} - root = self.desktop.doc().root() - for n in root.childList(): - self.collectID_recursive(n) - pass + pass pass - - def collectID_recursive(self,node): - self.ID[node.getId()] = 1 - for n in node.childList(): - self.collectID_recursive(n) - pass + pass + pass + + + def parseScene(self): + """ + In this function, we will collect all items for the current scene and then relocate them back to the appropriate scene object. + """ + self.layer = [] + self.scenemap = None + doc = self.desktop.doc().root() + + for node in doc.childList(): + if node.repr.name() == 'svg:metadata': + self.parseMetadata(node) pass - - def newID(self): - while True: - n = 's%d' % int(random.random()*10000) - #print "try %s" % n - if self.ID.has_key(n) == False: - return n + elif node.repr.name() == 'svg:g': + oldscene = None + #print layer.attrib.get("id") + lyobj = Layer(node) + self.layer.append(lyobj) + lyobj.current_scene = [] + for scene in node.childList(): + if scene.repr.name() == 'svg:g': + try: + scmap = self.scenemap[scene.getId()] + if scmap == None: + lyobj.current_scene.append(scene) + continue + if self.current <= scmap[1] and self.current >= scmap[0]: + oldscene = scene + pass + except: + lyobj.current_scene.append(scene) + continue + + lyobj.scene.append(Scene(scene,scmap[0],scmap[1])) pass - pass - - def dumpID(self): - for a,v in self.ID.items(): - print a + else: + lyobj.current_scene.append(scene) pass + pass + + if oldscene != None: + # Put the objects back to the current scene + # for o in lyobj.current_scene: + # print o.tag + # oldscene.append(o) + pass pass - - def getLayer(self, layer): - for l in self.layer: - if l.node.getId() == layer: - return l - pass - return None - - - def insertKeyScene(self): - """ - Insert a new key scene into the stage. If the nth is always a key scene, we will return without changing anything. - If the nth is a filled scene, we will break the original scene into two parts. If the nth is out of any scene, we will - append a new scene. + pass + + self.collectID() + self.dumpID() + pass + + def collectID(self): + self.ID = {} + root = self.desktop.doc().root() + for n in root.childList(): + self.collectID_recursive(n) + pass + pass + + def collectID_recursive(self,node): + self.ID[node.getId()] = 1 + for n in node.childList(): + self.collectID_recursive(n) + pass + pass + + def newID(self): + while True: + n = 's%d' % int(random.random()*10000) + #print "try %s" % n + if self.ID.has_key(n) == False: + return n + pass + pass + + def dumpID(self): + for a,v in self.ID.items(): + print a + pass + pass + + def getLayer(self, layer): + for l in self.layer: + if l.node.getId() == layer: + return l + pass + return None + + + def insertKeyScene(self): + """ + Insert a new key scene into the stage. If the nth is always a key scene, we will return without changing anything. + If the nth is a filled scene, we will break the original scene into two parts. If the nth is out of any scene, we will + append a new scene. - """ - nth = self.last_cell.nScene - layer = self.getLayer(self.last_cell.layer) - x = self.last_cell.nScene - y = self.last_cell.nLayer - if layer == None: return - for i in range(0,len(layer.scene)): - s = layer.scene[i] - if nth >= s.start and nth <= s.end: - if nth == s.start: return - newscene = Scene(DuplicateNode(s.node),nth,s.end) - newscene.node.setId(self.newID()) - layer.scene.insert(i+1,newscene) - layer.scene[i].end = nth-1 - btn = self.newCell('start.png') - btn.nScene = nth - btn.layer = layer - btn.nLayer = y - self.grid.remove(self.last_cell) - self.grid.attach(btn, x,x+1,y,y+1,0,0,0,0) - return - pass - - if len(layer.scene) > 0: - last = nth - lastscene = None - for s in layer.scene: - if s.end < nth and last < s.end: - last = s.end - lastscene = s - pass - pass - - for x in range(last+1, nth): - btn = self.newCell('fill.png') - btn.nScene = x - btn.layer = layer.node.getId() - btn.nLayer = y - self.grid.attach(btn, x, x+1, y , y+1,0,0,0,0) - pass - - if lastscene == None: - node = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') - node.setId(self.newID()) - newscene = Scene(node,nth,nth) - else: - lastscene.end = nth-1 - newscene = Scene(DuplicateNode(lastscene.node),nth,nth) - newscene.node.setId(self.newID()) - pass - - layer.scene.append(newscene) - btn = self.newCell('start.png') - x = self.last_cell.nScene - y = self.last_cell.nLayer + """ + nth = self.last_cell.nScene + layer = self.getLayer(self.last_cell.layer) + x = self.last_cell.nScene + y = self.last_cell.nLayer + if layer == None: return + for i in range(0,len(layer.scene)): + s = layer.scene[i] + if nth >= s.start and nth <= s.end: + if nth == s.start: return + newscene = Scene(DuplicateNode(s.node),nth,s.end) + newscene.node.setId(self.newID()) + layer.scene.insert(i+1,newscene) + layer.scene[i].end = nth-1 + btn = self.newCell('start.png') + btn.nScene = nth + btn.layer = layer + btn.nLayer = y + self.grid.remove(self.last_cell) + self.grid.attach(btn, x,x+1,y,y+1,0,0,0,0) + return + pass + + if len(layer.scene) > 0: + last = nth + lastscene = None + for s in layer.scene: + if s.end < nth and last < s.end: + last = s.end + lastscene = s + pass + pass + + for x in range(last+1, nth): + btn = self.newCell('fill.png') + btn.nScene = x + btn.layer = layer.node.getId() + btn.nLayer = y + self.grid.attach(btn, x, x+1, y , y+1,0,0,0,0) + pass + + if lastscene == None: + node = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') + node.setId(self.newID()) + newscene = Scene(node,nth,nth) + else: + lastscene.end = nth-1 + newscene = Scene(DuplicateNode(lastscene.node),nth,nth) + newscene.node.setId(self.newID()) + pass + + layer.scene.append(newscene) + btn = self.newCell('start.png') + x = self.last_cell.nScene + y = self.last_cell.nLayer + btn.nScene = nth + btn.layer = layer.node.getId() + btn.nLayer = y + self.grid.attach(btn, x, x+1, y, y+1,0,0,0,0) + else: + # This is the first scene in the layer + node = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') + node.repr.setId(self.newID()) + newscene = Scene(node,nth,nth) + layer.scene.append(newscene) + btn = self.newCell('start.png') + btn.nScene = nth + btn.layer = layer.node.getId() + btn.nLayer = y + self.grid.attach(btn, x, x+1, y, y+1,0,0,0,0) + pass + pass + + + def removeKeyScene(self): + nth = self.last_cell.nScene + try: + layer = self.getLayer(self.last_cell.layer) + except: + return + x = self.last_cell.nScene + y = self.last_cell.nLayer + for i in range(0,len(layer.scene)): + s = layer.scene[i] + if nth == s.start: + if i == 0: + for j in range(s.start,s.end+1): + btn = self.newCell('empty.png') btn.nScene = nth - btn.layer = layer.node.getId() + btn.layer = layer btn.nLayer = y - self.grid.attach(btn, x, x+1, y, y+1,0,0,0,0) + self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) + pass + layer.scene.remove(s) else: - # This is the first scene in the layer - node = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') - node.repr.setId(self.newID()) - newscene = Scene(node,nth,nth) - layer.scene.append(newscene) - btn = self.newCell('start.png') - btn.nScene = nth - btn.layer = layer.node.getId() - btn.nLayer = y - self.grid.attach(btn, x, x+1, y, y+1,0,0,0,0) - pass - pass - + if s.start == layer.scene[i-1].end+1: + # If the start of the delete scene segment is the end of the last scene segmenet, convert all scenes in the deleted + # scene segmenet to the last one + layer.scene[i-1].end = s.end + layer.scene.remove(s) + btn = self.newCell('fill.png') - def removeKeyScene(self): - nth = self.last_cell.nScene - try: - layer = self.getLayer(self.last_cell.layer) - except: - return - x = self.last_cell.nScene - y = self.last_cell.nLayer - for i in range(0,len(layer.scene)): - s = layer.scene[i] - if nth == s.start: - if i == 0: - for j in range(s.start,s.end+1): - btn = self.newCell('empty.png') - btn.nScene = nth - btn.layer = layer - btn.nLayer = y - self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) - pass - layer.scene.remove(s) - else: - if s.start == layer.scene[i-1].end+1: - # If the start of the delete scene segment is the end of the last scene segmenet, convert all scenes in the deleted - # scene segmenet to the last one - layer.scene[i-1].end = s.end - layer.scene.remove(s) - btn = self.newCell('fill.png') + btn.nScene = nth + btn.layer = layer + btn.nLayer = y + self.grid.attach(btn, x,x+1,y,y+1,0,0,0,0) + else: + # Convert all scenes into empty cell + layer.scene.remove(s) + for j in range(s.start,s.end+1): + btn = self.newCell('empty.png') + btn.nScene = nth + btn.layer = layer + btn.nLayer = y + self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) + pass + pass + pass + return + pass + pass - btn.nScene = nth - btn.layer = layer - btn.nLayer = y - self.grid.attach(btn, x,x+1,y,y+1,0,0,0,0) - else: - # Convert all scenes into empty cell - layer.scene.remove(s) - for j in range(s.start,s.end+1): - btn = self.newCell('empty.png') - btn.nScene = nth - btn.layer = layer - btn.nLayer = y - self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) - pass - pass - pass - return - pass - pass - - def extendScene(self): - nth = self.last_cell.nScene - try: - layer = self.getLayer(self.last_cell.layer) - except: - traceback.print_exc() - return - x = self.last_cell.nScene - y = self.last_cell.nLayer - if layer == None: - return + def extendScene(self): + nth = self.last_cell.nScene + try: + layer = self.getLayer(self.last_cell.layer) + except: + traceback.print_exc() + return + x = self.last_cell.nScene + y = self.last_cell.nLayer + if layer == None: + return - for i in range(0,len(layer.scene)-1): - s = layer.scene[i] - if nth >= layer.scene[i].start and nth <= layer.scene[i].end: - return - pass - - for i in range(0,len(layer.scene)-1): - s = layer.scene[i] - if nth >= layer.scene[i].start and nth < layer.scene[i+1].start: - for j in range(layer.scene[i].end+1, nth+1): - btn = self.newCell('fill.png') - btn.nScene = nth - btn.nLayer = y - btn.layer = self.last_cell.layer - self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) - layer.scene[i].end = nth - return - pass - if len(layer.scene) > 0 and nth > layer.scene[len(layer.scene)-1].end: - for j in range(layer.scene[len(layer.scene)-1].end+1, nth+1): - btn = self.newCell('fill.png') - btn.nScene = nth - btn.nLayer = y - btn.layer = self.last_cell.layer - self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) - pass - layer.scene[len(layer.scene)-1].end = nth - pass - pass - - def setCurrentScene(self,nth): - self.current = nth - for layer in self.layer: - for s in layer.scene: - if nth >= s.start and nth <= s.end: - s.node.repr.setAttribute("style","",True) - #print "Put the elemenets out" - layer.nodes = [] - - #for o in s.node: - #print " ",o.tag - # layer.nodes.append(o) - #for o in s.node: - # s.node.remove(o) - else: - s.node.repr.setAttribute("style","display:none",True) - pass - pass - pass - pass - - def generate(self): - newdoc = deepcopy(self.document) - root = newdoc.getroot() - has_scene = False - for n in root: - if n.tag == '{http://www.w3.org/2000/svg}metadata': - for nn in n: - if nn.tag == '{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scenes': - nn.clear() - nn.set("current", "%d" % self.current) - scenes = [] - for l in self.layer: - for s in l.scene: - id = s.node.get("id") - scene = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') - scene.set("ref", id) - if s.start == s.end: - scene.set("start", "%d" % s.start) - else: - scene.set("start", "%d" % s.start) - scene.set("end", "%d" % s.end) - pass + for i in range(0,len(layer.scene)-1): + s = layer.scene[i] + if nth >= layer.scene[i].start and nth <= layer.scene[i].end: + return + pass - scenes.append(scene) - pass - pass - for s in scenes: - nn.append(s) - pass - has_scene = True - pass - pass - if has_scene == False: - scenes = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scenes') - scenes.set("current","%d" % self.current) - for l in self.layer: - for s in l.scene: - scene = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') - scene.set("ref", s.node.get("id")) - if s.start == s.end: - scene.set("start", "%d" % s.start) - else: - scene.set("start", "%d" % s.start) - scene.set("end", "%d" % s.end) - pass - scenes.append(scene) - pass - pass - n.append(scenes) - if n.tag == '{http://www.w3.org/2000/svg}g': - root.remove(n) - pass + for i in range(0,len(layer.scene)-1): + s = layer.scene[i] + if nth >= layer.scene[i].start and nth < layer.scene[i+1].start: + for j in range(layer.scene[i].end+1, nth+1): + btn = self.newCell('fill.png') + btn.nScene = nth + btn.nLayer = y + btn.layer = self.last_cell.layer + self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) + layer.scene[i].end = nth + return + pass + if len(layer.scene) > 0 and nth > layer.scene[len(layer.scene)-1].end: + for j in range(layer.scene[len(layer.scene)-1].end+1, nth+1): + btn = self.newCell('fill.png') + btn.nScene = nth + btn.nLayer = y + btn.layer = self.last_cell.layer + self.grid.attach(btn, j,j+1,y,y+1,0,0,0,0) + pass + layer.scene[len(layer.scene)-1].end = nth + pass + pass + pass + + def setCurrentScene(self,nth): + self.current = nth + for layer in self.layer: + for s in layer.scene: + if nth >= s.start and nth <= s.end: + s.node.repr.setAttribute("style","",True) + # print "Put the elemenets out" + layer.nodes = [] + + # for o in s.node: + # print " ",o.tag + # layer.nodes.append(o) + # for o in s.node: + # s.node.remove(o) + else: + s.node.repr.setAttribute("style","display:none",True) pass - - for l in self.layer: - # Duplicate all attribute of the layer - lnode = etree.Element("{http://www.w3.org/2000/svg}g") - for a,v in l.node.attrib.items(): - lnode.set(a,v) - pass - for n in l.nodes: - lnode.append(n) - pass - root.append(lnode) - for s in l.scene: - snode = etree.Element("{http://www.w3.org/2000/svg}g") - for a,v in s.node.attrib.items(): - snode.set(a,v) - pass - for n in s.node: - snode.append(deepcopy(n)) - pass - lnode.append(snode) - pass - pass - self.document = newdoc + pass pass - - def newCell(self,file): - img = gtk.Image() - img.set_from_file(file) - btn = gtk.EventBox() - btn.add(img) - btn.connect("button_press_event", self.cellSelect) - btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) - return btn + pass + pass - def showGrid(self): - max = 0 - for layer in self.layer: - for s in layer.scene: - if s.end > max: - max = s.end - pass - pass - pass - max = 50 + def generate(self): + newdoc = deepcopy(self.document) + root = newdoc.getroot() + has_scene = False + for n in root: + if n.tag == '{http://www.w3.org/2000/svg}metadata': + for nn in n: + if nn.tag == '{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scenes': + nn.clear() + nn.set("current", "%d" % self.current) + scenes = [] + for l in self.layer: + for s in l.scene: + id = s.node.get("id") + scene = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') + scene.set("ref", id) + if s.start == s.end: + scene.set("start", "%d" % s.start) + else: + scene.set("start", "%d" % s.start) + scene.set("end", "%d" % s.end) + pass - self.grid = gtk.Table(len(self.layer)+1, 50) - self.scrollwin = gtk.ScrolledWindow() - self.scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.scrollwin.add_with_viewport(self.grid) - self.scrollwin.set_size_request(-1,150) - for i in range(1,max): - self.grid.attach(gtk.Label('%d'% i), i,i+1,0,1,0,0,0,0) + scenes.append(scene) + pass + pass + for s in scenes: + nn.append(s) + pass + has_scene = True pass - for i in range(1,len(self.layer)+1): - print "Layer", i - l = self.layer[i-1] - #self.grid.attach(gtk.Label(l.node.get('{http://www.inkscape.org/namespaces/inkscape}label')), 0, 1, i, i+1,0,0,10,0) + pass + if has_scene == False: + scenes = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scenes') + scenes.set("current","%d" % self.current) + for l in self.layer: for s in l.scene: - btn = self.newCell('start.png') - btn.nScene = s.start - btn.layer = l.node.getId() - btn.nLayer = i - - self.grid.attach(btn, s.start, s.start+1, i, i+1,0,0,0,0) - for j in range(s.start+1,s.end+1): - btn = self.newCell('fill.png') - self.grid.attach(btn, j, j+1, i , i+1,0,0,0,0) - btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) - btn.nScene = j - btn.layer = l.node.getId() - btn.nLayer = i - pass - pass - if len(l.scene) == 0: - start = 0 - else: - start = l.scene[len(l.scene)-1].end + scene = etree.Element('{http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd}scene') + scene.set("ref", s.node.get("id")) + if s.start == s.end: + scene.set("start", "%d" % s.start) + else: + scene.set("start", "%d" % s.start) + scene.set("end", "%d" % s.end) pass - - for j in range(start,max): - btn = self.newCell('empty.png') - self.grid.attach(btn, j+1, j+2,i,i+1,0,0,0,0) - btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) - btn.nScene = j+1 - btn.layer = l.node.getId() - btn.nLayer = i - pass + scenes.append(scene) + pass pass - self.last_cell = None + n.append(scenes) + pass pass + if n.tag == '{http://www.w3.org/2000/svg}g': + root.remove(n) + pass + pass - def cellSelect(self, cell, data): - if self.last_cell: - self.last_cell.modify_bg(gtk.STATE_NORMAL, self.last_cell.get_colormap().alloc_color("gray")) - pass - - self.last_cell = cell - cell.modify_bg(gtk.STATE_NORMAL, cell.get_colormap().alloc_color("green")) + for l in self.layer: + # Duplicate all attribute of the layer + lnode = etree.Element("{http://www.w3.org/2000/svg}g") + for a,v in l.node.attrib.items(): + lnode.set(a,v) + pass + for n in l.nodes: + lnode.append(n) + pass + root.append(lnode) + for s in l.scene: + snode = etree.Element("{http://www.w3.org/2000/svg}g") + for a,v in s.node.attrib.items(): + snode.set(a,v) + pass + for n in s.node: + snode.append(deepcopy(n)) + pass + lnode.append(snode) pass - - def doEditScene(self,w): - self.setCurrentScene(self.last_cell.nScene) - pass + pass + self.document = newdoc + pass - def doInsertKeyScene(self,w): - #self.insertKeyScene() - #self.grid.show_all() - return + def newCell(self,file): + img = gtk.Image() + img.set_from_file(file) + btn = gtk.EventBox() + btn.add(img) + btn.connect("button_press_event", self.cellSelect) + btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) + return btn + + def showGrid(self): + max = 0 + for layer in self.layer: + for s in layer.scene: + if s.end > max: + max = s.end + pass + pass + pass + max = 50 - def doRemoveScene(self,w): - return - self.removeKeyScene() - self.grid.show_all() - self.generate() + self.grid = gtk.Table(len(self.layer)+1, 50) + self.scrollwin = gtk.ScrolledWindow() + self.scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scrollwin.add_with_viewport(self.grid) + self.scrollwin.set_size_request(-1,150) + for i in range(1,max): + self.grid.attach(gtk.Label('%d'% i), i,i+1,0,1,0,0,0,0) + pass + for i in range(1,len(self.layer)+1): + print "Layer", i + l = self.layer[i-1] + #self.grid.attach(gtk.Label(l.node.get('{http://www.inkscape.org/namespaces/inkscape}label')), 0, 1, i, i+1,0,0,10,0) + for s in l.scene: + btn = self.newCell('start.png') + btn.nScene = s.start + btn.layer = l.node.getId() + btn.nLayer = i + + self.grid.attach(btn, s.start, s.start+1, i, i+1,0,0,0,0) + for j in range(s.start+1,s.end+1): + btn = self.newCell('fill.png') + self.grid.attach(btn, j, j+1, i , i+1,0,0,0,0) + btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) + btn.nScene = j + btn.layer = l.node.getId() + btn.nLayer = i + pass pass - - def doExtendScene(self,w): - self.extendScene() - self.grid.show_all() + if len(l.scene) == 0: + start = 0 + else: + start = l.scene[len(l.scene)-1].end pass + + for j in range(start,max): + btn = self.newCell('empty.png') + self.grid.attach(btn, j+1, j+2,i,i+1,0,0,0,0) + btn.modify_bg(gtk.STATE_NORMAL, btn.get_colormap().alloc_color("gray")) + btn.nScene = j+1 + btn.layer = l.node.getId() + btn.nLayer = i + pass + pass + self.last_cell = None + pass + + def cellSelect(self, cell, data): + if self.last_cell: + self.last_cell.modify_bg(gtk.STATE_NORMAL, self.last_cell.get_colormap().alloc_color("gray")) + pass - def addButtons(self,hbox): - btn = gtk.Button('Edit') - btn.connect('clicked', self.doEditScene) - hbox.pack_start(btn,expand=False,fill=False) - btn = gtk.Button('Insert Key') - btn.connect('clicked',self.doInsertKeyScene) - hbox.pack_start(btn,expand=False,fill=False) - btn=gtk.Button('Remove Key') - btn.connect('clicked', self.doRemoveScene) - hbox.pack_start(btn,expand=False,fill=False) - btn=gtk.Button('Extend scene') - btn.connect('clicked', self.doExtendScene) - hbox.pack_start(btn,expand=False,fill=False) - pass - - def onQuit(self, event): - self.OK = False - gtk.main_quit() - pass - - def onOK(self,event): - self.OK = True - gtk.main_quit() - pass + self.last_cell = cell + cell.modify_bg(gtk.STATE_NORMAL, cell.get_colormap().alloc_color("green")) + pass + + def doEditScene(self,w): + self.setCurrentScene(self.last_cell.nScene) + pass + + def doInsertKeyScene(self,w): + # self.insertKeyScene() + # self.grid.show_all() + return + + def doRemoveScene(self,w): + # self.removeKeyScene() + # self.grid.show_all() + # self.generate() + return - def onConfirmDelete(self): - if self.scenemap == None: - vbox = gtk.VBox(False,0) - vbox.pack_start(gtk.Label('Convert the SVG into a MadButterfly SVG file. All current element will be delted')) - hbox = gtk.HBox(False,0) - self.button = gtk.Button('OK') - hbox.pack_start(self.button,expand=False,fill=False) - self.button.connect('clicked', self.onOK) - self.button = gtk.Button('Cancel') - hbox.pack_start(self.button,expand=False,fill=False) - self.button.connect("clicked", self.onQuit) - vbox.pack_start(hbox,expand=False,fill=False) - self.window.add(vbox) - self.window.show_all() - gtk.main() - self.window.remove(vbox) - pass - pass + + def doExtendScene(self,w): + self.extendScene() + self.grid.show_all() + pass + + def addButtons(self,hbox): + btn = gtk.Button('Edit') + btn.connect('clicked', self.doEditScene) + hbox.pack_start(btn,expand=False,fill=False) + btn = gtk.Button('Insert Key') + btn.connect('clicked',self.doInsertKeyScene) + hbox.pack_start(btn,expand=False,fill=False) + btn=gtk.Button('Remove Key') + btn.connect('clicked', self.doRemoveScene) + hbox.pack_start(btn,expand=False,fill=False) + btn=gtk.Button('Extend scene') + btn.connect('clicked', self.doExtendScene) + hbox.pack_start(btn,expand=False,fill=False) + pass + + def onQuit(self, event): + self.OK = False + gtk.main_quit() + pass + + def onOK(self,event): + self.OK = True + gtk.main_quit() + pass - def show(self): - self.OK = True - self.parseScene() - self.showGrid() - vbox = gtk.VBox(False,0) - self.desktop.getToplevel().child.child.pack_end(vbox,expand=False) - self.window = vbox - #self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - #self.window.connect("destroy", gtk.main_quit) - #self.window.set_position(gtk.WIN_POS_MOUSE) - if self.scenemap == None: - self.onConfirmDelete() - pass - if self.OK: - vbox = gtk.VBox(False,0) - self.window.pack_start(vbox,expand=False) - vbox.pack_start(self.scrollwin,expand=False) - self.vbox = vbox - hbox=gtk.HBox(False,0) - self.addButtons(hbox) - vbox.pack_start(hbox,expand=False) - else: - return + def onConfirmDelete(self): + if self.scenemap == None: + vbox = gtk.VBox(False,0) + vbox.pack_start(gtk.Label('Convert the SVG into a MadButterfly SVG file. All current element will be delted')) + hbox = gtk.HBox(False,0) + self.button = gtk.Button('OK') + hbox.pack_start(self.button,expand=False,fill=False) + self.button.connect('clicked', self.onOK) + self.button = gtk.Button('Cancel') + hbox.pack_start(self.button,expand=False,fill=False) + self.button.connect("clicked", self.onQuit) + vbox.pack_start(hbox,expand=False,fill=False) + self.window.add(vbox) + self.window.show_all() + gtk.main() + self.window.remove(vbox) + pass + pass - #self.window.set_size_request(600,200) + def show(self): + self.OK = True + self.parseScene() + self.showGrid() + vbox = gtk.VBox(False,0) + self.desktop.getToplevel().child.child.pack_end(vbox,expand=False) + self.window = vbox + # self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + # self.window.connect("destroy", gtk.main_quit) + # self.window.set_position(gtk.WIN_POS_MOUSE) + if self.scenemap == None: + self.onConfirmDelete() + pass + if self.OK: + vbox = gtk.VBox(False,0) + self.window.pack_start(vbox,expand=False) + vbox.pack_start(self.scrollwin,expand=False) + self.vbox = vbox + hbox=gtk.HBox(False,0) + self.addButtons(hbox) + vbox.pack_start(hbox,expand=False) + else: + return - self.window.show_all() - pass + # self.window.set_size_request(600,200) + + self.window.show_all() pass + pass