def filewidget_selection_changed(self, selected=None, deselected=None): current_widget = self.filewidget.currentWidget() indexes = current_widget.selectedIndexes() selected_files = set(index.internalPointer() for index in indexes) directory = self.directory total_size = selected_size = 0 for pathobj in directory: try: total_size += pathobj.size if pathobj in selected_files and not pathobj.isdir(): selected_size += pathobj.size except OSError: pass format_args = ( (len(selected_files), len(directory)) + format_size(selected_size) + format_size(total_size) ) selection_str = "%s out of %s (%.1f%s out of %.1f%s)" % format_args active_filter = self.filewidget.filters.get(current_widget) if active_filter: selection_str += ' [ filtered ]' if self.directory.bad_filenames: selection_str += ' [{0} corrupt filenames]'.format( len(self.directory.bad_filenames) ) self.selection_status_label.setText(selection_str)
def update_fsop(self, fsop, key, value): if key == "buildtree": status_str = u"Preparing... " if value: status_str += u"done!" self.filename_label.setText( status_str ) if key == "status": if value is None: self.speed = (fsop.bytes_written - self._prev_bytes_written) / 150. self.speed *= 1000 self._prev_bytes_written = fsop.bytes_written else: self.file_index, self.file_count = value fmt_args = format_size(fsop.bytes_written) + \ format_size(fsop.total_bytes) + \ format_size(self.speed) self.progressbar.setFormat( "%.2f%s of %.2f%s (%.2f%s/s)" % fmt_args ) if fsop.total_bytes: self.progressbar.setValue( (fsop.bytes_written / fsop.total_bytes) * 1000 ) if key in ("copy", "delete"): base_path = { 'delete': lambda: fsop.relpath, 'copy': lambda: fsop.destination, 'move': lambda: fsop.destination, }[key]() self.filename_label.setText( "{0}/{1} {2} {3}".format( self.file_index, self.file_count, key.capitalize(), base_path.relpathto(value) ) ) if key == "done": self.timer.stop() self.file_index += 1 self.update_fsop(fsop, "status", None) QTimer.singleShot(1000, self.done)
def filewidget_dir_changed(self, newpath=None): """ Updates the selection & free space status when the directory is changed """ if newpath is None: newpath = self.directory.path directory = self.directory free = directory.bytes_free total = directory.bytes_avaiable self.path_combo.setEditText(newpath) freespace_str = "%.1f%s free out of %.1f%s" % (format_size(free) + format_size(total)) self.free_space_label.setText(freespace_str) self.filewidget_selection_changed()
def setFileinfo(self, type_, short_filename, filename): setText = lambda field, s: getattr( self, type_ + "_" + field ).setText(s) setText("filename", short_filename) setText("size", "%.2f%s" % format_size(filename.size)) setText("mtime", format_timestamp(filename.mtime, '%Y-%m-%d %H:%M'))
def filewidget_clicked(self, idx): filename = idx.internalPointer() if filename.isdir(): sizetext = "<DIR>" else: try: sizetext = "%.2f%s" % format_size(filename.size) except OSError: sizetext = "<broken symlink>" try: res = get_picture_resolution(filename) except IOError: text = sizetext else: text = "%sx%s (%s)" % ((res) + (sizetext,)) self.filesize_label.setText(text) self.filename_label.setText(filename.name)
def _data(self, index, role): row = index.row() column = index.column() column_name = self.columns[column] filepath = index.internalPointer() obj = self.overrides.get((filepath, column, role), None) if obj is not None: return obj if filepath is None: import sys logger['DirModel'].error( "Fatal model error, requested index '%s' not found", row ) QApplication.instance().exit() sys.exit() # Handle broken symlinks if not filepath.realpath().exists(): if column_name == 'Filename': if role == Qt.DisplayRole: return self.formatFilename(filepath.name) elif role == Qt.DecorationRole: return self.icon_for(filepath) elif role == Qt.EditRole: return filepath.name elif column_name == 'Modified' and role == Qt.DisplayRole: return "0000-00-00 00:00" elif column_name == 'Size' and role == Qt.DisplayRole: return "0" if role == Qt.BackgroundRole and self.color_directories: if filepath.isdir(): return QPalette().color(QPalette.AlternateBase) if column_name == 'Filename': if role == Qt.DisplayRole: return self.formatFilename(filepath.name) elif role == Qt.DecorationRole: return self.icon_for(filepath) elif role == Qt.EditRole: return filepath.name elif column_name == 'Size' and not filepath.isdir(): if role == Qt.DisplayRole: try: size_str = "%.2f%s" % format_size(filepath.size) except OSError: size_str = "" return size_str elif column_name == 'Modified': if role == Qt.DisplayRole: date_obj = datetime.fromtimestamp(filepath.mtime) date_str = date_obj.strftime('%Y-%m-%d %H:%M') return date_str return QVariant()