# HG changeset patch # User Silverwing # Date 2020-06-22 21:55:45 # Node ID d1a9a47788f8b94d29474f6bb5cd66f642d36908 # Parent 71854a68aa1c7978415bc9e0fda04770acd2f492 Progress bar for mass formatting diff --git a/floppyemu/__init__.py b/floppyemu/__init__.py --- a/floppyemu/__init__.py +++ b/floppyemu/__init__.py @@ -20,15 +20,21 @@ def get_or_create_empty_image(index, tem return filename -def format_images(device, indexes, temp_path, size=1440): +def format_images(device, indexes, temp_path, size=1440, callback=None): for ipair in indexes: if isinstance(ipair, int): image = get_or_create_empty_image(ipair, temp_path, size) write_image(device, image, ipair) + os.remove(image) + if callback: + callback(indexes, ipair) else: for i in range(ipair[0], ipair[1]): image = get_or_create_empty_image(i, temp_path, size) write_image(device, image, i) + os.remove(image) + if callback: + callback(ipair, i) def write_image(device, path, index=0): diff --git a/forms/format_dlgs.py b/forms/format_dlgs.py --- a/forms/format_dlgs.py +++ b/forms/format_dlgs.py @@ -1,4 +1,5 @@ from PyQt5 import QtWidgets +from PyQt5.QtWidgets import QApplication from floppyemu import format_images from ui import format_dialog, format_one_dialog @@ -21,15 +22,25 @@ class FormatManyDialog(QtWidgets.QDialog def accept(self): try: if self.rb_size_720.isChecked(): - format_images(self.__device, ((self.sb_from.value(), self.sb_to.value() + 1),), self.__temp_path, 720) + size = 720 elif self.rb_size_1440.isChecked(): - format_images(self.__device, ((self.sb_from.value(), self.sb_to.value() + 1),), self.__temp_path, 1440) + size = 1440 else: QtWidgets.QMessageBox.critical( self, 'Error', 'Please choose image size before proceeding' ) return + + self.rb_size_720.setDisabled(True) + self.rb_size_1440.setDisabled(True) + self.sb_from.setDisabled(True) + self.sb_to.setDisabled(True) + self.buttonBox.setDisabled(True) + format_images( + self.__device, ((self.sb_from.value(), self.sb_to.value() + 1),), self.__temp_path, size, + self.__update_progress + ) except PermissionError: QtWidgets.QMessageBox.critical( self, 'Permission error', @@ -40,6 +51,11 @@ class FormatManyDialog(QtWidgets.QDialog super().accept() + def __update_progress(self, indices, index): + self.progressBar.setMaximum(indices[1] - indices[0]) + self.progressBar.setValue(index - indices[0]) + QApplication.instance().processEvents() + class FormatOneDialog(QtWidgets.QDialog, format_one_dialog.Ui_Dialog): def __init__(self, index, device, temp_path, parent=None): diff --git a/ui/format_dialog.py b/ui/format_dialog.py --- a/ui/format_dialog.py +++ b/ui/format_dialog.py @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidge class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") - Dialog.resize(400, 96) + Dialog.resize(400, 119) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setSpacing(0) @@ -19,16 +19,16 @@ class Ui_Dialog(object): self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.sb_to = QtWidgets.QSpinBox(Dialog) + self.sb_to.setMaximum(999) self.sb_to.setObjectName("sb_to") - self.sb_to.setMaximum(999) self.gridLayout.addWidget(self.sb_to, 1, 1, 1, 1) self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setMaximumSize(QtCore.QSize(16777215, 16)) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 1, 1, 1) self.sb_from = QtWidgets.QSpinBox(Dialog) + self.sb_from.setMaximum(999) self.sb_from.setObjectName("sb_from") - self.sb_from.setMaximum(999) self.gridLayout.addWidget(self.sb_from, 1, 0, 1, 1) self.label = QtWidgets.QLabel(Dialog) self.label.setMaximumSize(QtCore.QSize(16777215, 16)) @@ -42,6 +42,11 @@ class Ui_Dialog(object): self.rb_size_1440.setObjectName("rb_size_1440") self.gridLayout.addWidget(self.rb_size_1440, 2, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) + self.progressBar = QtWidgets.QProgressBar(Dialog) + self.progressBar.setMaximum(50) + self.progressBar.setProperty("value", 0) + self.progressBar.setObjectName("progressBar") + self.verticalLayout.addWidget(self.progressBar) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) diff --git a/ui/format_dialog.ui b/ui/format_dialog.ui --- a/ui/format_dialog.ui +++ b/ui/format_dialog.ui @@ -7,7 +7,7 @@ 0 0 400 - 96 + 119 @@ -52,7 +52,11 @@ - + + + 999 + + @@ -87,6 +91,16 @@ + + + 50 + + + 0 + + + + Qt::Horizontal