def clone(name1, name2): """Clone symbol with name1 to name2. Doesn't chech that name1 is consistent symbol directory """ if not SymModule._ready: raise ValueError("not mounted") symdir1 = SymModule.DIR.hpath(name1) symdir2 = SymModule.DIR.hpath(name2) if not path.exists(symdir1): raise Exception("Source symbol does not exist") if path.exists(symdir2): raise Exception("Destination symbol already exists") # copy unmodified files shutil.copytree(symdir1, symdir2) # modify descr-file descr2 = path.join(symdir2, SymModule.DESCR) dc = DotCfg() with codecs.open(descr2, "r", encoding="utf8") as f: dc.parse(f) par = dc.get(u"date") if par: par.value = time.strftime("%Y-%m-%d %H:%M:%S") par = dc.get(u"author") if par: par.value = os.getenv("USER", os.getenv("USERNAME", "Unknown")) dc.flush()
def __init__(self, name, canvas, x, y): self.fs = self.files(name) if not self.fs: raise Exception(u"Inconsistent symbol (or mismatched location)") self.name = name self.c = canvas self._vlayers = [] self._rlayers = [] self._vilayers = [] # all visible only layers self.x = x self.y = y self.width = self.height = 0 self._pmenu = None # popup menu self.k = {} # keywords, for ex. "sid" (Signal IDeintifier) # Try to load keywords from descr. Keywords are options in # 'descr' file like: # k.something = some_value try: dc = DotCfg() with codecs.open(self.fs["descr"], "r", encoding="utf8") as f: dc.parse(f) for p in dc.paths: if len(p) == 2 and p[0] == u"k": self.k[p[1]] = dc.get(DOT.join(p)).value except: pass # create Vlayers for i,p in enumerate(self.fs["vlayers"]): g = GFigRender(self.c, BaseSymbol._GFIG_ENCODING) self._vlayers.append(Vlayer(self, i, g, p)) # create Rlayer imfilename = self.fs["gif"] or self.fs["tiff"] if not imfilename: raise ValueError(u"No symbol image found") for i,f in enumerate(_load_image_frames(imfilename)): if not getattr(f, "_noimage", False): ph = ImageTk.PhotoImage(f) self._rlayers.append(Rlayer(self, i, f, ph)) # size of symbol will be size of last frame (all are equals) self.width = f.size[0] self.height = f.size[1]
"# comment2\n" "obj = 10\n" "obj.dir = \n" "obj.opened = \n" "obj.saved = \n" "obj.color = #FF0000\n" "other.color = #4567FF\n" "other.weight = 200\n" "# speed is one of 1,2,3,4,5\n" "speed = 2\n" "# Some text\n" "text = aaa\\nbbb\n" ) items = ((1,"4800"), (2,"9600"), (3,"14400"), (4,"19200")) exp = ( Parameter("obj", comments="Object name..."), Parameter("obj.dir", comments="Directory...", editor=DirectoryEditor()), Parameter("obj.opened", comments="Opened file...", editor=OpenFileEditor()), Parameter("obj.saved", comments="Saved file...", editor=SaveFileEditor()), Parameter("obj.color", comments="Color...", editor=ColorEditor()), Parameter("other.color", comments="Color...", editor=ColorEditor()), Parameter("other.weight", comments="Weight...", editor=RangeEditor(max=200., step=5.5, format="%.1f", title="the title")), Parameter("speed", comments="Speed...", editor=ItemsChooserEditor(selectmode=Tix.EXTENDED, items=items)), Parameter("text", comments="Text...", editor=TextEditor()), ) dc = DotCfg(exp) dc.parse(sio) root = Tix.Tk() root.withdraw() tdc = TkDotCfg(root, dc)