def OnDrop(self, *args): """This method is used by the DragAndDrop mixin.""" self._dragging = False dropindex, dragindex = map(self.GetIndexOfItem, args) if not dropindex: return # HACK: Select dragitem here so the right item is selected during the # dialog if IsInvalidPath fails. The correct item is reselected later. self.SelectItem(args[1]) path = self.GetFilePath() if IsInvalidPath(self, path): return lst = self.GetChildItems((0,)) fromindex = dragindex[1] if len(dragindex) > 1 else 0 toindex = dropindex[1] if len(dropindex) > 1 else -1 toindex += fromindex > toindex lst.insert(toindex, lst.pop(fromindex)) self.RefreshItems() self.item = self.GetItemByIndex((0, min(toindex, len(lst)-1))) self.SelectItem(self.item) save_flames(path, *(i[0] for i in self.GetDataGen())) self.parent.parent.DumpChanges()
def CheckForChanges(self, itemdata, lst): if any(data.HasChanged() for data,_ in lst): path = itemdata[-1] dlg = wx.MessageDialog(self, 'Save changes to %s?' % path, 'Fr0st',wx.YES_NO|wx.CANCEL) result = dlg.ShowModal() if result == wx.ID_YES: fr0stlib.save_flames(path, *(data[-1] for data,_ in lst)) dlg.Destroy() return result
def save_flames(self, path, *flames): if not flames: raise ValueError("You must specify at least 1 flame to set.") if os.path.exists(path): dlg = wx.MessageDialog(self, "%s already exists. Do you want to overwrite?" % path, 'Fr0st',wx.YES_NO) if dlg.ShowModal() != wx.ID_YES: return lst = [s if type(s) is str else s.to_string() for s in flames] self.tree.SetFlames(path, *lst) fr0stlib.save_flames(path, *lst)
def CheckForChanges(self): datalist = list(self.GetDataGen()) if any(i.HasChanged() for i in datalist): path = self.GetFilePath() dlg = wx.MessageDialog(self, 'Save changes to %s?' % path, 'Fr0st',wx.YES_NO|wx.CANCEL) result = dlg.ShowModal() if result == wx.ID_YES: if IsInvalidPath(self, path): return wx.ID_CANCEL save_flames(path, *(i[-1] for i in datalist)) dlg.Destroy() return result
def OnFlameSaveAs(self,e): flame = self.flame path = self.tree.GetFilePath() dlg = SaveDialog(self, path=path, name=flame.name) if dlg.ShowModal() == wx.ID_OK: newpath = dlg.GetPath() flame.name = str(dlg.GetName()) if path == newpath: self.OnFlameNew2(string=flame.to_string()) else: if os.path.exists(newpath): lst = fr0stlib.load_flame_strings(newpath) else: lst = [] lst.append(flame.to_string()) fr0stlib.save_flames(newpath, *lst) dlg.Destroy()
def SaveFlame(self, path=None, confirm=True): if path is None: path = self.tree.GetFilePath() lst = self.tree.GetDataList() if self.tree.parentselected: for data, item in zip(lst, self.tree.GetItemChildren()): data.Reset() self.tree.SetItemText(item, data.name) else: data = self.tree.itemdata data.Reset() self.tree.SetItemText(self.tree.item, data.name) fr0stlib.save_flames(path, *(data[0] for data in lst)) # Make sure Undo and Redo get set correctly. self.SetFlame(self.flame, rezoom=False)
def OnFlameSaveAs(self, e): path = self.tree.GetFilePath() flame = self.flame dlg = SaveDialog(self, path=path, name=flame.name) if dlg.ShowModal() == wx.ID_OK: newpath = dlg.GetPath() if IsInvalidPath(self, newpath): return flame.name = str(dlg.GetName()) if path == newpath: self.OnFlameNew(flame=flame) else: if os.path.exists(newpath): lst = fr0stlib.load_flamestrings(newpath) else: lst = [] lst.append(flame.to_string()) save_flames(newpath, *lst) dlg.Destroy()
def OnDelete(self, e): path = self.tree.GetFilePath() if IsInvalidPath(self, path): return index = self.tree.GetIndexOfItem(self.tree.item)[-1] children = self.tree.GetChildItems((0,)) children.pop(index) if not children: # Make sure the flamefile is never empty. self.parent.OnFlameNew() self.tree.RefreshItems() index = min(index, len(children) - 1) # Select parent before selecting flame to ensure GUI is always updated. self.tree.SelectItem(self.tree.itemparent) self.tree.SelectItem(self.tree.GetItemByIndex((0,index))) save_flames(path, *(i[0] for i in self.tree.GetDataGen())) self.parent.DumpChanges()
def new_save_flames(path, *flames, **kwds): refresh = kwds.pop('refresh', True) confirm = kwds.pop('confirm', True) if kwds: raise TypeError('Got unexpected keyword argument: %s' % tuple(kwds)[0]) if not flames: raise ValueError("You must specify at least 1 flame to set.") if os.path.exists(path) and confirm: dlg = wx.MessageDialog(self, "%s already exists. Do you want to overwrite?" % path, 'Fr0st',wx.YES_NO) if dlg.ShowModal() != wx.ID_YES: return lst = [s if type(s) is str else s.to_string() for s in flames] save_flames(path, *lst) if refresh: self.tree.SetFlames(path, *lst)
def SaveFlame(self, path=None): path = path or self.tree.GetFilePath() if IsInvalidPath(self, path): return lst = list(self.tree.GetDataGen()) if self.tree.parentselected: for data, item in zip(lst, self.tree.GetItemChildren()): data.Reset() self.tree.SetItemText(item, data.name) else: data = self.tree.itemdata data.Reset() self.tree.SetItemText(self.tree.item, data.name) save_flames(path, *(data[0] for data in lst)) self.DumpChanges() # Make sure Undo and Redo get set correctly. self.SetFlame(self.flame, rezoom=False)
def OnDrop(self, *args): """This method is used by the DragAndDrop mixin.""" dropindex, dragindex = map(self.GetIndexOfItem, args) if not dropindex: return lst = self.GetChildItems((0,)) fromindex = dragindex[1] if len(dragindex) > 1 else 0 toindex = dropindex[1] +1 if len(dropindex) > 1 else 0 lst.insert(toindex, lst.pop(fromindex)) self.RefreshItems() index = (0, min(toindex, len(lst)-1)) self.SelectItem(self.GetItemByIndex(index)) self._dragging = False fr0stlib.save_flames(self.GetFilePath(), *(data[0] for data in self.GetDataList()))