Mercurial > MadButterfly
diff inkscape/MB_EditButton.py @ 248:1958bb2a87a2
* Check if the selected element is a group ot not. A symbol or button must be a group.
* Reimplement the button editor. We will use another instance of the inkscape to edit the content of a button.
author | wycc |
---|---|
date | Sat, 03 Jan 2009 08:43:29 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inkscape/MB_EditButton.py Sat Jan 03 08:43:29 2009 +0800 @@ -0,0 +1,158 @@ +#!/usr/bin/python +import inkex +import pygtk +import gtk +from copy import deepcopy +from lxml import etree +import os +import tempfile + +class ConvertToButton(inkex.Effect): + def effect(self): + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.set_position(gtk.WIN_POS_MOUSE) + self.defaultname = 'input symbol name here' + if self.fillcontent() == False: + self.window.show_all() + self.window.connect("delete_event", gtk.main_quit) + gtk.main() + def onQuit(self,data): + gtk.main_quit() + def onAssign(self,data): + text = self.text.get_text() + if text != self.defaultname: + self.node.set("mbname",text) + gtk.main_quit() + + 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) + 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) + print " " * l * 2,"/>" + + def hide_frame(self,frame): + frame.set('style','display:none') + def show_frame(self,frame): + frame.set('style','') + + def EditNormalButton(self,event,node): + self.EditButton(node,'_normal') + + def EditActiveButton(self,event,node): + self.EditButton(node,'_active') + + def EditClickButton(self,event,node): + self.EditButton(node,'_click') + + def EditFrame(self,node): + # Generate a SVG file with node and invoke inkscape to edit it + svg = etree.Element('svg') + for n in node: + svg.append(deepcopy(n)) + fd,fname = tempfile.mkstemp(suffix='.svg') + f = os.fdopen(fd,"w") + f.write(etree.tostring(svg)) + f.close() + os.system("inkscape %s >/dev/null 2>/dev/null" % fname) + svg = etree.parse(fname) + os.unlink(fname) + newnode=[] + for n in svg.getroot(): + if n.tag == '{http://www.w3.org/2000/svg}g': + newnode.append(n) + if n.tag == '{http://www.w3.org/2000/svg}rect': + newnode.append(n) + if n.tag == '{http://www.w3.org/2000/svg}text': + newnode.append(n) + return newnode + + + + + def duplicateAttribute(self,new,old): + for k,v in old.attrib.items(): + new.set(k,v) + + + def EditButton(self,node,mode): + name = node.get('mbname') + for frame in node: + if frame.get('mbname') == name+mode: + newnode = self.EditFrame(frame) + oldframe = deepcopy(frame) + frame.clear() + self.duplicateAttribute(frame,oldframe) + for n in newnode: + frame.append(n) + return + def DisplayNormalButton(self,event,node): + self.displayButton(node,'_normal') + def DisplayActiveButton(self,event,node): + self.displayButton(node,'_active') + def DisplayClickButton(self,event,node): + self.displayButton(node,'_click') + def displayButton(self,node,mode): + name = node.get('mbname') + for n in node: + if n.get('mbname') == name+mode: + n.set('style','') + else: + n.set('style','display:none') + gtk.main_quit() + + + + def fillcontent(self): + if len(self.selected) != 1: + self.confirm('Please select one group only') + return False + for id,node in self.selected.iteritems(): + #self.dump(node) + name = node.get("mbname") + if name == None: + self.confirm("The MadButterFly symbol is not defined yet. Please convert it to the symbol before convert it to button.") + return False + type = node.get("mbtype") + if type != 'button': + self.confirm('This is not a button') + return False + hbox = gtk.HBox() + self.window.add(hbox) + button = gtk.Button('Edit Normal') + hbox.pack_start(button) + button.connect("clicked", self.EditNormalButton,node) + button = gtk.Button('Edit Active') + hbox.pack_start(button) + button.connect("clicked", self.EditActiveButton,node) + button = gtk.Button('Edit Click') + hbox.pack_start(button) + button.connect("clicked", self.EditClickButton,node) + button = gtk.Button('Display Normal') + hbox.pack_start(button) + button.connect("clicked", self.DisplayNormalButton,node) + button = gtk.Button('Display Active') + hbox.pack_start(button) + button.connect("clicked", self.DisplayActiveButton,node) + button = gtk.Button('Display Click') + hbox.pack_start(button) + button.connect("clicked", self.DisplayClickButton,node) + return False + + +a=ConvertToButton() +a.affect() + +# vim: set ts=4