def __updateSum(self, ctrl, ctrl_nr): size=sizeAdj=0 for key, data in ctrl.data.obj.items(): size+=data.size sizeAdj+=data.sizeAdj if ctrl_nr==1: self.lp1_size.SetValue(hlp.intToStringWithCommas(size)) self.lp1_sizeAdj.SetValue(hlp.intToStringWithCommas(sizeAdj)) if sizeAdj<self.size: self.lp1_sizeAdj.SetBackgroundColour("YELLOW") self.lp1_sizeAdj.SetToolTip(wx.ToolTip("Not enough files to fill target")) else: self.lp1_sizeAdj.SetBackgroundColour(wx.NullColor) self.lp1_sizeAdj.SetToolTip(wx.ToolTip.Enable(False)) else: self.lp2_sizeAdj.SetValue(hlp.intToStringWithCommas(sizeAdj)) remSize=self.size-sizeAdj self.lp2_sizeRem.SetValue(hlp.intToStringWithCommas(remSize)) if remSize<0: self.lp2_sizeRem.SetBackgroundColour("YELLOW") self.lp2_sizeRem.SetToolTip(wx.ToolTip("Files do not fit on target")) else: self.lp2_sizeRem.SetBackgroundColour(wx.NullColor) self.lp2_sizeRem.SetToolTip(wx.ToolTip.Enable(False))
def executeCMDs(self): progBarVal=0 cnt=len(self.fileDict) self.messages.SetValue("") if self.jobType==0: cmd=["cp", "-rp"] elif self.jobType==1: cmd=["mv"] else: self.EndModal(wx.ID_CANCEL) if DEBUG_FS==True: countup=bnls=0 formatstrg="{0:15} {1:15} {2:15} {3:15} {4:15} {5:5} {6:15}" # nach filename sortiert über "self.fileDict" iterieren for k in OrderedDict(sorted(self.fileDict.items(), key=lambda t: t[1].filename)): v=self.fileDict[k] cmdToExecute=cmd+[k, self.targetFolder] # Kommando zusammensetzen self.messages.AppendText( self.listToString(cmdToExecute)+"\n") self.currentBytes.SetValue( hlp.intToStringWithCommas(v.sizeAdj)) self.objRemain.SetValue( hlp.intToStringWithCommas(cnt)) self.bytesRemain.SetValue( hlp.intToStringWithCommas(self.sumBytesToCopy-progBarVal)) wx.Yield() if DEBUG_FS==True: szv=os.statvfs(self.targetFolder) sv=szv.f_bavail*szv.f_bsize # Dateisystem-Restgröße vor dem copy self.executeSingleCMD(cmdToExecute) if self.abortTransfer==True: # Abbruch-Wunsch weiterreichen break cnt-=1 progBarVal+=v.sizeAdj # Fortschritt abhängig von der aktuellen Dateigröße... self.progBar.SetValue(progBarVal//self.gauge_devisor) # ...darstellen wx.Yield() if DEBUG_FS==True: countup+=1 # Nummer der bearbeiteten Datei szn=os.statvfs(self.targetFolder) sn=szn.f_bavail*szn.f_bsize # Dateisystem-Restgröße nach dem copy delta1=(sv-sn) # bei letztem copy belegte Byte delta2=delta1-v.sizeAdj # Differenz der belegten Byte zur Dateigröße (also der Fehler) bn=os.path.basename(k) # Dateiname der gerade kopierten Datei bnls+=len(bn) # Länge der bisher kopierten Dateinamen print formatstrg.format(sv, sn, delta1, v.sizeAdj, delta2, countup, bn) self.currentBytes.SetValue( "0") self.objRemain.SetValue( "0") self.bytesRemain.SetValue( "0") self.ok.Enable() # Schließen des Dialoges freischalten self.cancel.Disable() # der Cancel-Button wird jetzt nicht mehr gebraucht
def insertInDestPathList(self, index, name, comment, size, blocksize, addblock, folder, final): i=self.destPathList.InsertStringItem(index, name) self.destPathList.SetStringItem(i, 1, comment) self.destPathList.SetStringItem(i, 2, hlp.intToStringWithCommas(size)) self.destPathList.SetStringItem(i, 3, hlp.intToStringWithCommas(blocksize)) self.destPathList.SetStringItem(i, 4, str(addblock)) self.destPathList.SetStringItem(i, 5, folder) if final==0: self.destPathList.SetStringItem(i, 6, "no") else: self.destPathList.SetStringItem(i, 6, "yes") self.destPathList.SetItemData(i, index)
def fillListCtrl(self, ctrl, ctrl_nr=1): ctrl.DeleteAllItems() ctrl.Refresh() self.__updateSum(ctrl, ctrl_nr) index=0 for key, data in ctrl.data.obj.items(): ctrl.InsertStringItem(index, str(data.index)) # dummy if ctrl_nr==1: if data.isFolder==True: # Ordner mit Folder-Icon einfügen if data.hasErrors==True: ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.errico) else: ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.c1ifldr) elif data.isFile==True: if self.addblock==0 and data.size>4294967295: ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.errico) else: # Datei mit File-Icon einfügen ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.c1ifile) if ctrl_nr==1: # Datei einfügen ctrl.SetStringItem(index, 2, data.filename) else: if data.isFolder==True: if data.hasErrors==True: ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.errico) else: ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.c1ifldr) elif data.isFile==True: ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.c1ifile) if ctrl_nr==1: ctrl.SetStringItem(index, 3, hlp.intToStringWithCommas(data.size)) ctrl.SetStringItem(index, 4, hlp.intToStringWithCommas(data.sizeAdj)) else: ctrl.SetStringItem(index, 3, hlp.intToStringWithCommas(data.sizeAdj)) ctrl.SetItemImage(index, 1) ctrl.SetItemData(index, data.index) index+=1 ctrl.SetItemState(0, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
def edit_dest(self, event): it=self.destPathList.GetFirstSelected() while it>-1: # solange es selektierte Sätze gibt data=self.getFromDestPath(it) dlg=AddOrEditDestProfile(self, data[0]) if dlg.ShowModal()!=wx.ID_OK: dlg.Destroy() else: data=dlg.getData() dlg.Destroy() self.destPathList.SetStringItem(it, 0, data[0]) self.destPathList.SetStringItem(it, 1, data[1]) self.destPathList.SetStringItem(it, 2, hlp.intToStringWithCommas(data[2])) self.destPathList.SetStringItem(it, 3, hlp.intToStringWithCommas(data[3])) self.destPathList.SetStringItem(it, 4, str(data[4])) self.destPathList.SetStringItem(it, 5, data[5]) if data[6]==0: self.destPathList.SetStringItem(it, 6, "no") else: self.destPathList.SetStringItem(it, 6, "yes") self.db.insertOrUpdateDest(data[0], data[1], data[2], data[3], data[4], data[5], data[6]) it=self.destPathList.GetNextSelected(it)
def choose_destBut(self, event=0): lastProfile=cfgfile.getLastSelectedDestProfile() # merken, um es bei NO im Folgedialog ggf. zurücksetzen zu können dlg=DestProfileCustomizationDialog.DestProfileCustomizationDialog(self, self.targetFolder, self.size, self.blockSize, self.addblock) if dlg.ShowModal()!=wx.ID_OK: dlg.Destroy() return targetFolder, size, blockSize, addblock=dlg.getData() dlg.Destroy() if (self.blockSize>0 and self.blockSize!=blockSize) or (self.addblock!=None and self.addblock!=addblock): # Blocksize wurde verändert!!! if len(self.list_panel1.list_ctrl.data.obj)>0 or len(self.list_panel2.list_ctrl.data.obj)>0: # es befinden sich schon Objekte in mind. einem der ListCtrls rc=wx.MessageBox("Blocksize or filesystems changed!\nRemove all files from both lists?", "Confirm", wx.YES_NO, self) if rc!=wx.YES: cfgfile.setLastSelectedDestProfile(lastProfile) return self.deleteAllFromListCtrl1(0) self.deleteAllFromListCtrl2(0) self.base_profile.SetValue("") self.targetFolder=targetFolder self.size=size self.blockSize=blockSize self.addblock=addblock self.__updateSum(self.list_panel1.list_ctrl, 1) self.__updateSum(self.list_panel2.list_ctrl, 2) self.blksize.SetValue(hlp.intToStringWithCommas(self.blockSize)) self.targtFldr.SetValue(targetFolder) if self.isEmptyFolder(targetFolder)!=True: self.targtFldr.SetBackgroundColour("YELLOW") self.targtFldr.SetToolTip(wx.ToolTip("Folder not empty!")) else: self.targtFldr.SetBackgroundColour(wx.NullColor) self.targtFldr.SetToolTip(wx.ToolTip.Enable(False)) self.enableListCtrl1()
def InitUI(self): self.sumBytesToCopy=sbtc=self.getSizeSum(self.fileDict) while sbtc>10000: sbtc/=10 self.gauge_devisor*=10 txt1=wx.StaticText(self, label="Number of objects:") self.objToCopy=wx.TextCtrl(self, wx.ID_ANY, "", size=(50, -1), style=wx.TE_READONLY) self.objToCopy.SetValue(hlp.intToStringWithCommas(len(self.fileDict))) txt2=wx.StaticText(self, label="Bytes in total:") self.bytesToCopy=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY) self.bytesToCopy.SetValue(hlp.intToStringWithCommas(self.sumBytesToCopy)) txt3=wx.StaticText(self, label="Bytes current:") self.currentBytes=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY) txt4=wx.StaticText(self, label="Remaining objects:") self.objRemain=wx.TextCtrl(self, wx.ID_ANY, "", size=(50, -1), style=wx.TE_READONLY) txt5=wx.StaticText(self, label="Remaining bytes:") self.bytesRemain=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY) self.messages=wx.TextCtrl(self, wx.ID_ANY, "", size=(-1, 200), \ style=wx.TE_READONLY|wx.TE_MULTILINE|wx.HSCROLL) self.progBar=wx.Gauge(self, wx.ID_ANY, self.sumBytesToCopy//self.gauge_devisor, size=(1000, -1)) self.ok=wx.Button(self, wx.ID_OK, "&Ok") self.cancel=wx.Button(self, wx.ID_CANCEL, "&Cancel") self.ok.Bind(wx.EVT_BUTTON, self.okBut) self.cancel.Bind(wx.EVT_BUTTON, self.cancelBut) vsizer=wx.BoxSizer(wx.VERTICAL) gsizer=wx.GridBagSizer(4, 4) sl=wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT st=wx.RIGHT gsizer.Add(txt1, (0, 0), (1, 1), sl|wx.TOP, 4) gsizer.Add(self.objToCopy, (0, 1), (1, 1), st|wx.TOP, 4) gsizer.Add(txt2, (0, 2), (1, 1), sl|wx.TOP, 4) gsizer.Add(self.bytesToCopy, (0, 3), (1, 1), st|wx.TOP, 4) gsizer.Add(wx.StaticLine(self), (1, 0), (1, 6), wx.ALL|wx.EXPAND, 4) gsizer.Add(txt3, (2, 0), (1, 1), sl|wx.BOTTOM, 4) gsizer.Add(self.currentBytes, (2, 1), (1, 1), st|wx.BOTTOM, 4) gsizer.Add(txt4, (2, 2), (1, 1), sl|wx.BOTTOM, 4) gsizer.Add(self.objRemain, (2, 3), (1, 1), st|wx.BOTTOM, 4) gsizer.Add(txt5, (2, 4), (1, 1), sl|wx.BOTTOM, 4) gsizer.Add(self.bytesRemain, (2, 5), (1, 1), st|wx.BOTTOM, 4) # eigener Sizer für Gauge, damit das nur horizontal EXPANDed wird hsizer1=wx.BoxSizer(wx.HORIZONTAL) hsizer1.Add(self.progBar, 1) hsizer2=wx.BoxSizer(wx.HORIZONTAL) hsizer2.Add(self.ok, 0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4) hsizer2.Add(self.cancel, 0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4) vsizer.Add(gsizer, 0, wx.LEFT|wx.RIGHT|wx.EXPAND, 4) vsizer.Add(self.messages, 1, wx.ALL|wx.EXPAND, 4) vsizer.Add(hsizer1, 0, wx.ALL|wx.EXPAND, 4) vsizer.Add(hsizer2, 0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4) self.SetSizer(vsizer) vsizer.Fit(self) self.ok.Disable() self.cancel.SetFocus()
def InitUI(self): txt1=wx.StaticText(self, label="Profilename:") self.name=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1)) txt2=wx.StaticText(self, label="Comment:") self.comment=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1)) txt3=wx.StaticText(self, label="Size:") self.size=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1)) txt4=wx.StaticText(self, label="Blocksize:") self.blocksize=wx.TextCtrl(self, wx.ID_ANY, "", size=(100, -1)) self.addBlock1=wx.CheckBox(self, wx.ID_ANY, "Joliet + Rock Ridge (genisoimage)") self.addBlock2=wx.CheckBox(self, wx.ID_ANY, "UDF 1.02 (genisoimage)") self.addBlock3=wx.CheckBox(self, wx.ID_ANY, "UDF 2.01 (mkudffs)") sel=wx.Button(self, wx.ID_ANY, "Select &Folder", style=wx.BU_EXACTFIT) self.folder=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1)) self.final=wx.RadioBox(self, wx.ID_ANY, "<Folder> is the...", \ choices=["starting point for the target folder", "target folder"], \ style=wx.RA_SPECIFY_ROWS) ok=wx.Button(self, wx.ID_OK, "&Ok") cancel=wx.Button(self, wx.ID_CANCEL, "&Cancel") sel.Bind(wx.EVT_BUTTON, self.selBut) ok.Bind(wx.EVT_BUTTON, self.okBut) cancel.Bind(wx.EVT_BUTTON, self.cancelBut) self.addBlock1.Bind(wx.EVT_CHECKBOX, self.joliet) self.addBlock2.Bind(wx.EVT_CHECKBOX, self.udf102) self.addBlock3.Bind(wx.EVT_CHECKBOX, self.udf201) sizer=wx.GridBagSizer(4, 4) sl=wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT st=wx.RIGHT sizer.Add(txt1, (0, 0), (1, 1), sl|wx.TOP, 4) sizer.Add(self.name, (0, 1), (1, 2), st|wx.TOP|wx.EXPAND, 4) sizer.Add(txt2, (1, 0), (1, 1), sl, 4) sizer.Add(self.comment, (1, 1), (1, 2), st|wx.EXPAND, 4) sizer.Add(txt3, (2, 0), (1, 1), sl, 4) sizer.Add(self.size, (2, 1), (1, 2), st, 4) sizer.Add(txt4, (3, 0), (1, 1), sl, 4) sizer.Add(self.blocksize, (3, 1), (1, 1), st, 4) sizer.Add(self.addBlock1, (4, 1), (1, 1), st, 4) sizer.Add(self.addBlock2, (5, 1), (1, 1), st, 4) sizer.Add(self.addBlock3, (6, 1), (1, 1), st, 4) sizer.Add(sel, (7, 0), (1, 1), sl, 4) sizer.Add(self.folder, (7, 1), (1, 2), st|wx.EXPAND, 4) sizer.Add(self.final, (8, 1), (1, 2), st, 4) sizer.AddGrowableCol(1, 1) hsizer=wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(ok, 0, wx.RIGHT, 4) hsizer.Add(cancel, 0, wx.LEFT, 4) sizer.Add(hsizer, (9, 1), (1, 2), wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4) if self.data!=[]: self.name.SetValue(self.data[0]) self.name.Disable() # der Key darf nicht verändert werden self.comment.SetValue(self.data[1]) self.size.SetValue(hlp.intToStringWithCommas(self.data[2])) self.blocksize.SetValue(hlp.intToStringWithCommas(self.data[3])) self.setAddBlock(self.data[4]) self.folder.SetValue(self.data[5]) self.final.SetSelection(self.data[6]) ok.SetFocus() else: self.name.SetFocus() self.SetSizer(sizer) sizer.Fit(self)