Beispiel #1
0
    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()
Beispiel #2
0
 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
Beispiel #3
0
 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)
Beispiel #4
0
 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
Beispiel #5
0
 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()
Beispiel #6
0
    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)
Beispiel #7
0
 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()
Beispiel #8
0
 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()
Beispiel #9
0
        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)
Beispiel #10
0
        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)
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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()))