From f9064ef0e419219a7f1e3ad548406221721d3bdb Mon Sep 17 00:00:00 2001 From: jaroslawjanas Date: Mon, 29 Dec 2025 10:37:52 -0800 Subject: [PATCH] configurable jpg quality (#1205) --- gui/KCC.ui | 945 +++++++++++++++++--------------- kindlecomicconverter/KCC_gui.py | 10 + kindlecomicconverter/KCC_ui.py | 636 +++++++++++---------- 3 files changed, 850 insertions(+), 741 deletions(-) diff --git a/gui/KCC.ui b/gui/KCC.ui index 205a76b..431873f 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -7,7 +7,7 @@ 0 0 566 - 581 + 658 @@ -22,6 +22,483 @@ 5 + + + + + 0 + 30 + + + + + true + + + + false + + + Qt::AlignmentFlag::AlignJustify|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 30 + + + + <html><head/><body><p style='white-space:pre'>Shift+Click to edit directory.</p></body></html> + + + Metadata Editor + + + + :/Other/icons/editor.png:/Other/icons/editor.png + + + + + + + + 0 + 30 + + + + Support me on Ko-fi + + + + :/Brand/icons/kofi_symbol.png:/Brand/icons/kofi_symbol.png + + + + 19 + 16 + + + + + + + + + 0 + 30 + + + + Wiki + + + + :/Other/icons/wiki.png:/Other/icons/wiki.png + + + + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 300 + + + 1 + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + 99 + + + 5 + + + 0 + + + + + + + <html><head/><body><p>After calculating the cropping boundaries, &quot;back up&quot; a specified percentage amount.</p></body></html> + + + Preserve Margin % + + + + + + + Cropping power: + + + + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> + + + Custom height: + + + + + + + <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> + + + 6000 + + + + + + + + 0 + 0 + + + + <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> + + + Custom width: + + + + + + + <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> + + + 8000 + + + + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 30 + + + + + true + + + + <html><head/><body><p style='white-space:pre'>Shift+Click to select the output directory for this list.</p></body></html> + + + Convert + + + + :/Other/icons/convert.png:/Other/icons/convert.png + + + + + + + + 0 + 30 + + + + Clear list + + + + :/Other/icons/clear.png:/Other/icons/clear.png + + + + + + + + 0 + 28 + + + + <html><head/><body><p style='white-space:pre'>Target device.</p></body></html> + + + + + + + + 0 + 30 + + + + <html><head/><body><p style='white-space:pre'>Add CBR, CBZ, CB7 or PDF file to queue.</p></body></html> + + + Add input file(s) + + + + :/Other/icons/document_new.png:/Other/icons/document_new.png + + + + + + + + 0 + 0 + + + + <html><head/><body><p style='white-space:pre'>Add directory containing JPG, PNG or GIF files to queue.<br/><span style=" font-weight:600;">CBR, CBZ and CB7 files inside will not be processed!</span></p></body></html> + + + Add input folder(s) + + + + :/Other/icons/folder_new.png:/Other/icons/folder_new.png + + + + + + + + 0 + 28 + + + + <html><head/><body><p style='white-space:pre'>Output format.</p></body></html> + + + + + clearButton + deviceBox + convertButton + fileButton + directoryButton + formatBox + + + + + + + 0 + 150 + + + + <html><head/><body><p>Double click on source to open it in metadata editor.</p></body></html> + + + + + + QAbstractItemView::SelectionMode::NoSelection + + + QAbstractItemView::ScrollMode::ScrollPerPixel + + + QAbstractItemView::ScrollMode::ScrollPerPixel + + + + + + + + 0 + 0 + + + + false + + + <html><head/><body><p>Warning: chunk size greater than default may cause<br/>performance/battery issues, especially on older devices.</p></body></html> + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Chunk size MB: + + + + + + + 100 + + + 600 + + + 400 + + + + + + + + 0 + 0 + + + + Greater than default may cause performance issues on older ereaders. + + + + + + @@ -393,101 +870,17 @@ - - - - - - - - 0 - 150 - - - - <html><head/><body><p>Double click on source to open it in metadata editor.</p></body></html> - - - - - - QAbstractItemView::SelectionMode::NoSelection - - - QAbstractItemView::ScrollMode::ScrollPerPixel - - - QAbstractItemView::ScrollMode::ScrollPerPixel - - - - - - - false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - + + - <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> + The JPEG quality, on a scale from 0 (worst) to 95 (best). + +Default is 85 for most devices besides Kindle Scribe and Colorsoft, which are 90. + +Higher values are larger and higher quality, and may resolve blank page issues. - Custom height: - - - - - - - <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> - - - 6000 - - - - - - - - 0 - 0 - - - - <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> - - - Custom width: - - - - - - - <html><head/><body><p style='white-space:pre'>Resolution of the target device.</p></body></html> - - - 8000 + Custom JPEG Quality @@ -535,9 +928,18 @@ - - - + + + + + 0 + 0 + + + + false + + 0 @@ -551,363 +953,22 @@ 0 - - - - 0 - 30 - - - - <html><head/><body><p style='white-space:pre'>Shift+Click to edit directory.</p></body></html> - + - Metadata Editor - - - - :/Other/icons/editor.png:/Other/icons/editor.png + JPEG Quality: - - - - 0 - 30 - - - - Support me on Ko-fi - - - - :/Brand/icons/kofi_symbol.png:/Brand/icons/kofi_symbol.png - - - - 19 - 16 - - - - - - - - - 0 - 30 - - - - Wiki - - - - :/Other/icons/wiki.png:/Other/icons/wiki.png - - - - - - - - - - - 0 - 30 - - - - - true - - - - false - - - Qt::AlignmentFlag::AlignJustify|Qt::AlignmentFlag::AlignVCenter - - - - - - - false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - <html><head/><body><p>After calculating the cropping boundaries, &quot;back up&quot; a specified percentage amount.</p></body></html> - - - Preserve Margin % - - - - - - - Cropping power: - - - - - + - 300 - - - 1 - - - Qt::Orientation::Horizontal - - - - - - - - 0 - 0 - - - - 99 + 95 5 - 0 - - - - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 30 - - - - - true - - - - <html><head/><body><p style='white-space:pre'>Shift+Click to select the output directory for this list.</p></body></html> - - - Convert - - - - :/Other/icons/convert.png:/Other/icons/convert.png - - - - - - - - 0 - 30 - - - - Clear list - - - - :/Other/icons/clear.png:/Other/icons/clear.png - - - - - - - - 0 - 28 - - - - <html><head/><body><p style='white-space:pre'>Target device.</p></body></html> - - - - - - - - 0 - 30 - - - - <html><head/><body><p style='white-space:pre'>Add CBR, CBZ, CB7 or PDF file to queue.</p></body></html> - - - Add input file(s) - - - - :/Other/icons/document_new.png:/Other/icons/document_new.png - - - - - - - - 0 - 0 - - - - <html><head/><body><p style='white-space:pre'>Add directory containing JPG, PNG or GIF files to queue.<br/><span style=" font-weight:600;">CBR, CBZ and CB7 files inside will not be processed!</span></p></body></html> - - - Add input folder(s) - - - - :/Other/icons/folder_new.png:/Other/icons/folder_new.png - - - - - - - - 0 - 28 - - - - <html><head/><body><p style='white-space:pre'>Output format.</p></body></html> - - - - - clearButton - deviceBox - convertButton - fileButton - directoryButton - formatBox - - - - - - - 0 - 0 - - - - false - - - <html><head/><body><p>Warning: chunk size greater than default may cause<br/>performance/battery issues, especially on older devices.</p></body></html> - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - Chunk size MB: - - - - - - - 100 - - - 600 - - - 400 - - - - - - - - 0 - 0 - - - - Greater than default may cause performance issues on older ereaders. + 85 diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 186ed93..f17d13a 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -347,6 +347,8 @@ class WorkerThread(QThread): options.forcepng = True elif GUI.mozJpegBox.checkState() == Qt.CheckState.Checked: options.mozjpeg = True + if GUI.jpegQualityBox.isChecked(): + options.jpegquality = GUI.jpegQualitySpinBox.value() if GUI.currentMode > 2: options.customwidth = str(GUI.widthBox.value()) options.customheight = str(GUI.heightBox.value()) @@ -742,6 +744,12 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.croppingWidget.setVisible(False) self.changeCroppingPower(100) # 1.0 + def togglejpegqualityBox(self, value): + if value: + GUI.jpegQualityWidget.setVisible(True) + else: + GUI.jpegQualityWidget.setVisible(False) + def togglewebtoonBox(self, value): if value: self.addMessage('You can choose a taller device profile to get taller cuts in webtoon mode.', 'info') @@ -1026,6 +1034,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): 'disableProcessingBox': GUI.disableProcessingBox.checkState(), 'metadataTitleBox': GUI.metadataTitleBox.checkState(), 'mozJpegBox': GUI.mozJpegBox.checkState(), + 'jpegQualityBox': GUI.jpegQualityBox.checkState(), 'widthBox': GUI.widthBox.value(), 'heightBox': GUI.heightBox.value(), 'deleteBox': GUI.deleteBox.checkState(), @@ -1354,6 +1363,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.gammaBox.stateChanged.connect(self.togglegammaBox) GUI.croppingBox.stateChanged.connect(self.togglecroppingBox) GUI.croppingPowerSlider.valueChanged.connect(self.changeCroppingPower) + GUI.jpegQualityBox.stateChanged.connect(self.togglejpegqualityBox) GUI.webtoonBox.stateChanged.connect(self.togglewebtoonBox) GUI.qualityBox.stateChanged.connect(self.togglequalityBox) GUI.mozJpegBox.stateChanged.connect(self.toggleImageFormatBox) diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index 9cdd2d6..daa5092 100644 --- a/kindlecomicconverter/KCC_ui.py +++ b/kindlecomicconverter/KCC_ui.py @@ -26,7 +26,7 @@ class Ui_mainWindow(object): def setupUi(self, mainWindow): if not mainWindow.objectName(): mainWindow.setObjectName(u"mainWindow") - mainWindow.resize(566, 581) + mainWindow.resize(566, 658) icon = QIcon() icon.addFile(u":/Icon/icons/comic2ebook.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) mainWindow.setWindowIcon(icon) @@ -35,6 +35,253 @@ class Ui_mainWindow(object): self.gridLayout = QGridLayout(self.centralWidget) self.gridLayout.setObjectName(u"gridLayout") self.gridLayout.setContentsMargins(-1, -1, -1, 5) + self.progressBar = QProgressBar(self.centralWidget) + self.progressBar.setObjectName(u"progressBar") + self.progressBar.setMinimumSize(QSize(0, 30)) + font = QFont() + font.setBold(True) + self.progressBar.setFont(font) + self.progressBar.setVisible(False) + self.progressBar.setAlignment(Qt.AlignmentFlag.AlignJustify|Qt.AlignmentFlag.AlignVCenter) + + self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 2) + + self.toolWidget = QWidget(self.centralWidget) + self.toolWidget.setObjectName(u"toolWidget") + self.horizontalLayout = QHBoxLayout(self.toolWidget) + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.editorButton = QPushButton(self.toolWidget) + self.editorButton.setObjectName(u"editorButton") + self.editorButton.setMinimumSize(QSize(0, 30)) + icon1 = QIcon() + icon1.addFile(u":/Other/icons/editor.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.editorButton.setIcon(icon1) + + self.horizontalLayout.addWidget(self.editorButton) + + self.kofiButton = QPushButton(self.toolWidget) + self.kofiButton.setObjectName(u"kofiButton") + self.kofiButton.setMinimumSize(QSize(0, 30)) + icon2 = QIcon() + icon2.addFile(u":/Brand/icons/kofi_symbol.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.kofiButton.setIcon(icon2) + self.kofiButton.setIconSize(QSize(19, 16)) + + self.horizontalLayout.addWidget(self.kofiButton) + + self.wikiButton = QPushButton(self.toolWidget) + self.wikiButton.setObjectName(u"wikiButton") + self.wikiButton.setMinimumSize(QSize(0, 30)) + icon3 = QIcon() + icon3.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.wikiButton.setIcon(icon3) + + self.horizontalLayout.addWidget(self.wikiButton) + + + self.gridLayout.addWidget(self.toolWidget, 0, 0, 1, 2) + + self.croppingWidget = QWidget(self.centralWidget) + self.croppingWidget.setObjectName(u"croppingWidget") + self.croppingWidget.setVisible(False) + self.gridLayout_5 = QGridLayout(self.croppingWidget) + self.gridLayout_5.setObjectName(u"gridLayout_5") + self.gridLayout_5.setContentsMargins(0, 0, 0, 0) + self.croppingPowerSlider = QSlider(self.croppingWidget) + self.croppingPowerSlider.setObjectName(u"croppingPowerSlider") + self.croppingPowerSlider.setMaximum(300) + self.croppingPowerSlider.setSingleStep(1) + self.croppingPowerSlider.setOrientation(Qt.Orientation.Horizontal) + + self.gridLayout_5.addWidget(self.croppingPowerSlider, 0, 1, 1, 1) + + self.preserveMarginBox = QSpinBox(self.croppingWidget) + self.preserveMarginBox.setObjectName(u"preserveMarginBox") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.preserveMarginBox.sizePolicy().hasHeightForWidth()) + self.preserveMarginBox.setSizePolicy(sizePolicy) + self.preserveMarginBox.setMaximum(99) + self.preserveMarginBox.setSingleStep(5) + self.preserveMarginBox.setValue(0) + + self.gridLayout_5.addWidget(self.preserveMarginBox, 1, 1, 1, 1) + + self.preserveMarginLabel = QLabel(self.croppingWidget) + self.preserveMarginLabel.setObjectName(u"preserveMarginLabel") + + self.gridLayout_5.addWidget(self.preserveMarginLabel, 1, 0, 1, 1) + + self.croppingPowerLabel = QLabel(self.croppingWidget) + self.croppingPowerLabel.setObjectName(u"croppingPowerLabel") + + self.gridLayout_5.addWidget(self.croppingPowerLabel, 0, 0, 1, 1) + + + self.gridLayout.addWidget(self.croppingWidget, 9, 0, 1, 2) + + self.customWidget = QWidget(self.centralWidget) + self.customWidget.setObjectName(u"customWidget") + self.customWidget.setVisible(False) + self.gridLayout_3 = QGridLayout(self.customWidget) + self.gridLayout_3.setObjectName(u"gridLayout_3") + self.gridLayout_3.setContentsMargins(0, 0, 0, 0) + self.hLabel = QLabel(self.customWidget) + self.hLabel.setObjectName(u"hLabel") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.hLabel.sizePolicy().hasHeightForWidth()) + self.hLabel.setSizePolicy(sizePolicy1) + + self.gridLayout_3.addWidget(self.hLabel, 0, 2, 1, 1) + + self.widthBox = QSpinBox(self.customWidget) + self.widthBox.setObjectName(u"widthBox") + self.widthBox.setMaximum(6000) + + self.gridLayout_3.addWidget(self.widthBox, 0, 1, 1, 1) + + self.wLabel = QLabel(self.customWidget) + self.wLabel.setObjectName(u"wLabel") + sizePolicy1.setHeightForWidth(self.wLabel.sizePolicy().hasHeightForWidth()) + self.wLabel.setSizePolicy(sizePolicy1) + + self.gridLayout_3.addWidget(self.wLabel, 0, 0, 1, 1) + + self.heightBox = QSpinBox(self.customWidget) + self.heightBox.setObjectName(u"heightBox") + self.heightBox.setMaximum(8000) + + self.gridLayout_3.addWidget(self.heightBox, 0, 3, 1, 1) + + + self.gridLayout.addWidget(self.customWidget, 8, 0, 1, 2) + + self.buttonWidget = QWidget(self.centralWidget) + self.buttonWidget.setObjectName(u"buttonWidget") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.buttonWidget.sizePolicy().hasHeightForWidth()) + self.buttonWidget.setSizePolicy(sizePolicy2) + self.gridLayout_4 = QGridLayout(self.buttonWidget) + self.gridLayout_4.setObjectName(u"gridLayout_4") + self.gridLayout_4.setContentsMargins(0, 0, 0, 0) + self.convertButton = QPushButton(self.buttonWidget) + self.convertButton.setObjectName(u"convertButton") + self.convertButton.setMinimumSize(QSize(0, 30)) + self.convertButton.setFont(font) + icon4 = QIcon() + icon4.addFile(u":/Other/icons/convert.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.convertButton.setIcon(icon4) + + self.gridLayout_4.addWidget(self.convertButton, 1, 3, 1, 1) + + self.clearButton = QPushButton(self.buttonWidget) + self.clearButton.setObjectName(u"clearButton") + self.clearButton.setMinimumSize(QSize(0, 30)) + icon5 = QIcon() + icon5.addFile(u":/Other/icons/clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.clearButton.setIcon(icon5) + + self.gridLayout_4.addWidget(self.clearButton, 0, 3, 1, 1) + + self.deviceBox = QComboBox(self.buttonWidget) + self.deviceBox.setObjectName(u"deviceBox") + self.deviceBox.setMinimumSize(QSize(0, 28)) + + self.gridLayout_4.addWidget(self.deviceBox, 1, 1, 1, 1) + + self.fileButton = QPushButton(self.buttonWidget) + self.fileButton.setObjectName(u"fileButton") + self.fileButton.setMinimumSize(QSize(0, 30)) + icon6 = QIcon() + icon6.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.fileButton.setIcon(icon6) + + self.gridLayout_4.addWidget(self.fileButton, 0, 1, 1, 1) + + self.directoryButton = QPushButton(self.buttonWidget) + self.directoryButton.setObjectName(u"directoryButton") + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.directoryButton.sizePolicy().hasHeightForWidth()) + self.directoryButton.setSizePolicy(sizePolicy3) + icon7 = QIcon() + icon7.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.directoryButton.setIcon(icon7) + + self.gridLayout_4.addWidget(self.directoryButton, 0, 4, 1, 1) + + self.formatBox = QComboBox(self.buttonWidget) + self.formatBox.setObjectName(u"formatBox") + self.formatBox.setMinimumSize(QSize(0, 28)) + + self.gridLayout_4.addWidget(self.formatBox, 1, 4, 1, 1) + + self.clearButton.raise_() + self.deviceBox.raise_() + self.convertButton.raise_() + self.fileButton.raise_() + self.directoryButton.raise_() + self.formatBox.raise_() + + self.gridLayout.addWidget(self.buttonWidget, 3, 0, 1, 2) + + self.jobList = QListWidget(self.centralWidget) + self.jobList.setObjectName(u"jobList") + self.jobList.setMinimumSize(QSize(0, 150)) + self.jobList.setStyleSheet(u"") + self.jobList.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection) + self.jobList.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) + self.jobList.setHorizontalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) + + self.gridLayout.addWidget(self.jobList, 2, 0, 1, 2) + + self.chunkSizeWidget = QWidget(self.centralWidget) + self.chunkSizeWidget.setObjectName(u"chunkSizeWidget") + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.chunkSizeWidget.sizePolicy().hasHeightForWidth()) + self.chunkSizeWidget.setSizePolicy(sizePolicy4) + self.chunkSizeWidget.setVisible(False) + self.horizontalLayout_4 = QHBoxLayout(self.chunkSizeWidget) + self.horizontalLayout_4.setSpacing(0) + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) + self.chunkSizeLabel = QLabel(self.chunkSizeWidget) + self.chunkSizeLabel.setObjectName(u"chunkSizeLabel") + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.chunkSizeLabel.sizePolicy().hasHeightForWidth()) + self.chunkSizeLabel.setSizePolicy(sizePolicy5) + + self.horizontalLayout_4.addWidget(self.chunkSizeLabel) + + self.chunkSizeBox = QSpinBox(self.chunkSizeWidget) + self.chunkSizeBox.setObjectName(u"chunkSizeBox") + self.chunkSizeBox.setMinimum(100) + self.chunkSizeBox.setMaximum(600) + self.chunkSizeBox.setValue(400) + + self.horizontalLayout_4.addWidget(self.chunkSizeBox) + + self.chunkSizeWarnLabel = QLabel(self.chunkSizeWidget) + self.chunkSizeWarnLabel.setObjectName(u"chunkSizeWarnLabel") + sizePolicy5.setHeightForWidth(self.chunkSizeWarnLabel.sizePolicy().hasHeightForWidth()) + self.chunkSizeWarnLabel.setSizePolicy(sizePolicy5) + + self.horizontalLayout_4.addWidget(self.chunkSizeWarnLabel) + + + self.gridLayout.addWidget(self.chunkSizeWidget, 6, 0, 1, 1) + self.optionWidget = QWidget(self.centralWidget) self.optionWidget.setObjectName(u"optionWidget") self.gridLayout_2 = QGridLayout(self.optionWidget) @@ -42,11 +289,8 @@ class Ui_mainWindow(object): self.gridLayout_2.setContentsMargins(0, 0, 0, 0) self.titleEdit = QLineEdit(self.optionWidget) self.titleEdit.setObjectName(u"titleEdit") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.titleEdit.sizePolicy().hasHeightForWidth()) - self.titleEdit.setSizePolicy(sizePolicy) + sizePolicy4.setHeightForWidth(self.titleEdit.sizePolicy().hasHeightForWidth()) + self.titleEdit.setSizePolicy(sizePolicy4) self.titleEdit.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.titleEdit.setClearButtonEnabled(False) @@ -148,8 +392,8 @@ class Ui_mainWindow(object): self.authorEdit = QLineEdit(self.optionWidget) self.authorEdit.setObjectName(u"authorEdit") - sizePolicy.setHeightForWidth(self.authorEdit.sizePolicy().hasHeightForWidth()) - self.authorEdit.setSizePolicy(sizePolicy) + sizePolicy4.setHeightForWidth(self.authorEdit.sizePolicy().hasHeightForWidth()) + self.authorEdit.setSizePolicy(sizePolicy4) self.authorEdit.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.authorEdit.setClearButtonEnabled(False) @@ -196,11 +440,8 @@ class Ui_mainWindow(object): self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.defaultOutputFolderBox = QCheckBox(self.outputFolderWidget) self.defaultOutputFolderBox.setObjectName(u"defaultOutputFolderBox") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.defaultOutputFolderBox.sizePolicy().hasHeightForWidth()) - self.defaultOutputFolderBox.setSizePolicy(sizePolicy1) + sizePolicy.setHeightForWidth(self.defaultOutputFolderBox.sizePolicy().hasHeightForWidth()) + self.defaultOutputFolderBox.setSizePolicy(sizePolicy) self.defaultOutputFolderBox.setTristate(True) self.horizontalLayout_3.addWidget(self.defaultOutputFolderBox) @@ -208,66 +449,21 @@ class Ui_mainWindow(object): self.defaultOutputFolderButton = QPushButton(self.outputFolderWidget) self.defaultOutputFolderButton.setObjectName(u"defaultOutputFolderButton") self.defaultOutputFolderButton.setMinimumSize(QSize(0, 30)) - icon1 = QIcon() - icon1.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.defaultOutputFolderButton.setIcon(icon1) + self.defaultOutputFolderButton.setIcon(icon7) self.horizontalLayout_3.addWidget(self.defaultOutputFolderButton) self.gridLayout_2.addWidget(self.outputFolderWidget, 0, 2, 1, 1) + self.jpegQualityBox = QCheckBox(self.optionWidget) + self.jpegQualityBox.setObjectName(u"jpegQualityBox") + + self.gridLayout_2.addWidget(self.jpegQualityBox, 8, 0, 1, 1) + self.gridLayout.addWidget(self.optionWidget, 5, 0, 1, 2) - self.jobList = QListWidget(self.centralWidget) - self.jobList.setObjectName(u"jobList") - self.jobList.setMinimumSize(QSize(0, 150)) - self.jobList.setStyleSheet(u"") - self.jobList.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection) - self.jobList.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) - self.jobList.setHorizontalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) - - self.gridLayout.addWidget(self.jobList, 2, 0, 1, 2) - - self.customWidget = QWidget(self.centralWidget) - self.customWidget.setObjectName(u"customWidget") - self.customWidget.setVisible(False) - self.gridLayout_3 = QGridLayout(self.customWidget) - self.gridLayout_3.setObjectName(u"gridLayout_3") - self.gridLayout_3.setContentsMargins(0, 0, 0, 0) - self.hLabel = QLabel(self.customWidget) - self.hLabel.setObjectName(u"hLabel") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.hLabel.sizePolicy().hasHeightForWidth()) - self.hLabel.setSizePolicy(sizePolicy2) - - self.gridLayout_3.addWidget(self.hLabel, 0, 2, 1, 1) - - self.widthBox = QSpinBox(self.customWidget) - self.widthBox.setObjectName(u"widthBox") - self.widthBox.setMaximum(6000) - - self.gridLayout_3.addWidget(self.widthBox, 0, 1, 1, 1) - - self.wLabel = QLabel(self.customWidget) - self.wLabel.setObjectName(u"wLabel") - sizePolicy2.setHeightForWidth(self.wLabel.sizePolicy().hasHeightForWidth()) - self.wLabel.setSizePolicy(sizePolicy2) - - self.gridLayout_3.addWidget(self.wLabel, 0, 0, 1, 1) - - self.heightBox = QSpinBox(self.customWidget) - self.heightBox.setObjectName(u"heightBox") - self.heightBox.setMaximum(8000) - - self.gridLayout_3.addWidget(self.heightBox, 0, 3, 1, 1) - - - self.gridLayout.addWidget(self.customWidget, 8, 0, 1, 2) - self.gammaWidget = QWidget(self.centralWidget) self.gammaWidget.setObjectName(u"gammaWidget") self.gammaWidget.setVisible(False) @@ -290,196 +486,29 @@ class Ui_mainWindow(object): self.gridLayout.addWidget(self.gammaWidget, 7, 0, 1, 2) - self.toolWidget = QWidget(self.centralWidget) - self.toolWidget.setObjectName(u"toolWidget") - self.horizontalLayout = QHBoxLayout(self.toolWidget) - self.horizontalLayout.setObjectName(u"horizontalLayout") - self.horizontalLayout.setContentsMargins(0, 0, 0, 0) - self.editorButton = QPushButton(self.toolWidget) - self.editorButton.setObjectName(u"editorButton") - self.editorButton.setMinimumSize(QSize(0, 30)) - icon2 = QIcon() - icon2.addFile(u":/Other/icons/editor.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.editorButton.setIcon(icon2) + self.jpegQualityWidget = QWidget(self.centralWidget) + self.jpegQualityWidget.setObjectName(u"jpegQualityWidget") + sizePolicy1.setHeightForWidth(self.jpegQualityWidget.sizePolicy().hasHeightForWidth()) + self.jpegQualityWidget.setSizePolicy(sizePolicy1) + self.jpegQualityWidget.setVisible(False) + self.horizontalLayout_12 = QHBoxLayout(self.jpegQualityWidget) + self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") + self.horizontalLayout_12.setContentsMargins(0, 0, 0, 0) + self.jpegQualityLabel = QLabel(self.jpegQualityWidget) + self.jpegQualityLabel.setObjectName(u"jpegQualityLabel") - self.horizontalLayout.addWidget(self.editorButton) + self.horizontalLayout_12.addWidget(self.jpegQualityLabel) - self.kofiButton = QPushButton(self.toolWidget) - self.kofiButton.setObjectName(u"kofiButton") - self.kofiButton.setMinimumSize(QSize(0, 30)) - icon3 = QIcon() - icon3.addFile(u":/Brand/icons/kofi_symbol.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.kofiButton.setIcon(icon3) - self.kofiButton.setIconSize(QSize(19, 16)) + self.jpegQualitySpinBox = QSpinBox(self.jpegQualityWidget) + self.jpegQualitySpinBox.setObjectName(u"jpegQualitySpinBox") + self.jpegQualitySpinBox.setMaximum(95) + self.jpegQualitySpinBox.setSingleStep(5) + self.jpegQualitySpinBox.setValue(85) - self.horizontalLayout.addWidget(self.kofiButton) - - self.wikiButton = QPushButton(self.toolWidget) - self.wikiButton.setObjectName(u"wikiButton") - self.wikiButton.setMinimumSize(QSize(0, 30)) - icon4 = QIcon() - icon4.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.wikiButton.setIcon(icon4) - - self.horizontalLayout.addWidget(self.wikiButton) + self.horizontalLayout_12.addWidget(self.jpegQualitySpinBox) - self.gridLayout.addWidget(self.toolWidget, 0, 0, 1, 2) - - self.progressBar = QProgressBar(self.centralWidget) - self.progressBar.setObjectName(u"progressBar") - self.progressBar.setMinimumSize(QSize(0, 30)) - font = QFont() - font.setBold(True) - self.progressBar.setFont(font) - self.progressBar.setVisible(False) - self.progressBar.setAlignment(Qt.AlignmentFlag.AlignJustify|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 2) - - self.croppingWidget = QWidget(self.centralWidget) - self.croppingWidget.setObjectName(u"croppingWidget") - self.croppingWidget.setVisible(False) - self.gridLayout_5 = QGridLayout(self.croppingWidget) - self.gridLayout_5.setObjectName(u"gridLayout_5") - self.gridLayout_5.setContentsMargins(0, 0, 0, 0) - self.preserveMarginLabel = QLabel(self.croppingWidget) - self.preserveMarginLabel.setObjectName(u"preserveMarginLabel") - - self.gridLayout_5.addWidget(self.preserveMarginLabel, 1, 0, 1, 1) - - self.croppingPowerLabel = QLabel(self.croppingWidget) - self.croppingPowerLabel.setObjectName(u"croppingPowerLabel") - - self.gridLayout_5.addWidget(self.croppingPowerLabel, 0, 0, 1, 1) - - self.croppingPowerSlider = QSlider(self.croppingWidget) - self.croppingPowerSlider.setObjectName(u"croppingPowerSlider") - self.croppingPowerSlider.setMaximum(300) - self.croppingPowerSlider.setSingleStep(1) - self.croppingPowerSlider.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_5.addWidget(self.croppingPowerSlider, 0, 1, 1, 1) - - self.preserveMarginBox = QSpinBox(self.croppingWidget) - self.preserveMarginBox.setObjectName(u"preserveMarginBox") - sizePolicy1.setHeightForWidth(self.preserveMarginBox.sizePolicy().hasHeightForWidth()) - self.preserveMarginBox.setSizePolicy(sizePolicy1) - self.preserveMarginBox.setMaximum(99) - self.preserveMarginBox.setSingleStep(5) - self.preserveMarginBox.setValue(0) - - self.gridLayout_5.addWidget(self.preserveMarginBox, 1, 1, 1, 1) - - - self.gridLayout.addWidget(self.croppingWidget, 9, 0, 1, 2) - - self.buttonWidget = QWidget(self.centralWidget) - self.buttonWidget.setObjectName(u"buttonWidget") - sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth(self.buttonWidget.sizePolicy().hasHeightForWidth()) - self.buttonWidget.setSizePolicy(sizePolicy3) - self.gridLayout_4 = QGridLayout(self.buttonWidget) - self.gridLayout_4.setObjectName(u"gridLayout_4") - self.gridLayout_4.setContentsMargins(0, 0, 0, 0) - self.convertButton = QPushButton(self.buttonWidget) - self.convertButton.setObjectName(u"convertButton") - self.convertButton.setMinimumSize(QSize(0, 30)) - self.convertButton.setFont(font) - icon5 = QIcon() - icon5.addFile(u":/Other/icons/convert.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.convertButton.setIcon(icon5) - - self.gridLayout_4.addWidget(self.convertButton, 1, 3, 1, 1) - - self.clearButton = QPushButton(self.buttonWidget) - self.clearButton.setObjectName(u"clearButton") - self.clearButton.setMinimumSize(QSize(0, 30)) - icon6 = QIcon() - icon6.addFile(u":/Other/icons/clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.clearButton.setIcon(icon6) - - self.gridLayout_4.addWidget(self.clearButton, 0, 3, 1, 1) - - self.deviceBox = QComboBox(self.buttonWidget) - self.deviceBox.setObjectName(u"deviceBox") - self.deviceBox.setMinimumSize(QSize(0, 28)) - - self.gridLayout_4.addWidget(self.deviceBox, 1, 1, 1, 1) - - self.fileButton = QPushButton(self.buttonWidget) - self.fileButton.setObjectName(u"fileButton") - self.fileButton.setMinimumSize(QSize(0, 30)) - icon7 = QIcon() - icon7.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.fileButton.setIcon(icon7) - - self.gridLayout_4.addWidget(self.fileButton, 0, 1, 1, 1) - - self.directoryButton = QPushButton(self.buttonWidget) - self.directoryButton.setObjectName(u"directoryButton") - sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth(self.directoryButton.sizePolicy().hasHeightForWidth()) - self.directoryButton.setSizePolicy(sizePolicy4) - self.directoryButton.setIcon(icon1) - - self.gridLayout_4.addWidget(self.directoryButton, 0, 4, 1, 1) - - self.formatBox = QComboBox(self.buttonWidget) - self.formatBox.setObjectName(u"formatBox") - self.formatBox.setMinimumSize(QSize(0, 28)) - - self.gridLayout_4.addWidget(self.formatBox, 1, 4, 1, 1) - - self.clearButton.raise_() - self.deviceBox.raise_() - self.convertButton.raise_() - self.fileButton.raise_() - self.directoryButton.raise_() - self.formatBox.raise_() - - self.gridLayout.addWidget(self.buttonWidget, 3, 0, 1, 2) - - self.chunkSizeWidget = QWidget(self.centralWidget) - self.chunkSizeWidget.setObjectName(u"chunkSizeWidget") - sizePolicy.setHeightForWidth(self.chunkSizeWidget.sizePolicy().hasHeightForWidth()) - self.chunkSizeWidget.setSizePolicy(sizePolicy) - self.chunkSizeWidget.setVisible(False) - self.horizontalLayout_4 = QHBoxLayout(self.chunkSizeWidget) - self.horizontalLayout_4.setSpacing(0) - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) - self.chunkSizeLabel = QLabel(self.chunkSizeWidget) - self.chunkSizeLabel.setObjectName(u"chunkSizeLabel") - sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) - sizePolicy5.setHorizontalStretch(0) - sizePolicy5.setVerticalStretch(0) - sizePolicy5.setHeightForWidth(self.chunkSizeLabel.sizePolicy().hasHeightForWidth()) - self.chunkSizeLabel.setSizePolicy(sizePolicy5) - - self.horizontalLayout_4.addWidget(self.chunkSizeLabel) - - self.chunkSizeBox = QSpinBox(self.chunkSizeWidget) - self.chunkSizeBox.setObjectName(u"chunkSizeBox") - self.chunkSizeBox.setMinimum(100) - self.chunkSizeBox.setMaximum(600) - self.chunkSizeBox.setValue(400) - - self.horizontalLayout_4.addWidget(self.chunkSizeBox) - - self.chunkSizeWarnLabel = QLabel(self.chunkSizeWidget) - self.chunkSizeWarnLabel.setObjectName(u"chunkSizeWarnLabel") - sizePolicy5.setHeightForWidth(self.chunkSizeWarnLabel.sizePolicy().hasHeightForWidth()) - self.chunkSizeWarnLabel.setSizePolicy(sizePolicy5) - - self.horizontalLayout_4.addWidget(self.chunkSizeWarnLabel) - - - self.gridLayout.addWidget(self.chunkSizeWidget, 6, 0, 1, 1) + self.gridLayout.addWidget(self.jpegQualityWidget, 10, 0, 1, 1) mainWindow.setCentralWidget(self.centralWidget) self.statusBar = QStatusBar(mainWindow) @@ -531,6 +560,58 @@ class Ui_mainWindow(object): def retranslateUi(self, mainWindow): mainWindow.setWindowTitle(QCoreApplication.translate("mainWindow", u"Kindle Comic Converter", None)) +#if QT_CONFIG(tooltip) + self.editorButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Shift+Click to edit directory.

", None)) +#endif // QT_CONFIG(tooltip) + self.editorButton.setText(QCoreApplication.translate("mainWindow", u"Metadata Editor", None)) + self.kofiButton.setText(QCoreApplication.translate("mainWindow", u"Support me on Ko-fi", None)) + self.wikiButton.setText(QCoreApplication.translate("mainWindow", u"Wiki", None)) +#if QT_CONFIG(tooltip) + self.preserveMarginLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

After calculating the cropping boundaries, "back up" a specified percentage amount.

", None)) +#endif // QT_CONFIG(tooltip) + self.preserveMarginLabel.setText(QCoreApplication.translate("mainWindow", u"Preserve Margin %", None)) + self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", None)) +#if QT_CONFIG(tooltip) + self.hLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) +#endif // QT_CONFIG(tooltip) + self.hLabel.setText(QCoreApplication.translate("mainWindow", u"Custom height:", None)) +#if QT_CONFIG(tooltip) + self.widthBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.wLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) +#endif // QT_CONFIG(tooltip) + self.wLabel.setText(QCoreApplication.translate("mainWindow", u"Custom width:", None)) +#if QT_CONFIG(tooltip) + self.heightBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.convertButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Shift+Click to select the output directory for this list.

", None)) +#endif // QT_CONFIG(tooltip) + self.convertButton.setText(QCoreApplication.translate("mainWindow", u"Convert", None)) + self.clearButton.setText(QCoreApplication.translate("mainWindow", u"Clear list", None)) +#if QT_CONFIG(tooltip) + self.deviceBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Target device.

", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.fileButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Add CBR, CBZ, CB7 or PDF file to queue.

", None)) +#endif // QT_CONFIG(tooltip) + self.fileButton.setText(QCoreApplication.translate("mainWindow", u"Add input file(s)", None)) +#if QT_CONFIG(tooltip) + self.directoryButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Add directory containing JPG, PNG or GIF files to queue.
CBR, CBZ and CB7 files inside will not be processed!

", None)) +#endif // QT_CONFIG(tooltip) + self.directoryButton.setText(QCoreApplication.translate("mainWindow", u"Add input folder(s)", None)) +#if QT_CONFIG(tooltip) + self.formatBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Output format.

", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.jobList.setToolTip(QCoreApplication.translate("mainWindow", u"

Double click on source to open it in metadata editor.

", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.chunkSizeWidget.setToolTip(QCoreApplication.translate("mainWindow", u"

Warning: chunk size greater than default may cause
performance/battery issues, especially on older devices.

", None)) +#endif // QT_CONFIG(tooltip) + self.chunkSizeLabel.setText(QCoreApplication.translate("mainWindow", u"Chunk size MB:", None)) + self.chunkSizeWarnLabel.setText(QCoreApplication.translate("mainWindow", u"Greater than default may cause performance issues on older ereaders.", None)) #if QT_CONFIG(tooltip) self.titleEdit.setToolTip(QCoreApplication.translate("mainWindow", u"

Default Title

", None)) #endif // QT_CONFIG(tooltip) @@ -644,57 +725,14 @@ class Ui_mainWindow(object): #endif // QT_CONFIG(tooltip) self.defaultOutputFolderButton.setText("") #if QT_CONFIG(tooltip) - self.jobList.setToolTip(QCoreApplication.translate("mainWindow", u"

Double click on source to open it in metadata editor.

", None)) -#endif // QT_CONFIG(tooltip) -#if QT_CONFIG(tooltip) - self.hLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) -#endif // QT_CONFIG(tooltip) - self.hLabel.setText(QCoreApplication.translate("mainWindow", u"Custom height:", None)) -#if QT_CONFIG(tooltip) - self.widthBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) -#endif // QT_CONFIG(tooltip) -#if QT_CONFIG(tooltip) - self.wLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) -#endif // QT_CONFIG(tooltip) - self.wLabel.setText(QCoreApplication.translate("mainWindow", u"Custom width:", None)) -#if QT_CONFIG(tooltip) - self.heightBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Resolution of the target device.

", None)) + self.jpegQualityBox.setToolTip(QCoreApplication.translate("mainWindow", u"The JPEG quality, on a scale from 0 (worst) to 95 (best). \n" +"\n" +"Default is 85 for most devices besides Kindle Scribe and Colorsoft, which are 90.\n" +"\n" +"Higher values are larger and higher quality, and may resolve blank page issues.", None)) #endif // QT_CONFIG(tooltip) + self.jpegQualityBox.setText(QCoreApplication.translate("mainWindow", u"Custom JPEG Quality", None)) self.gammaLabel.setText(QCoreApplication.translate("mainWindow", u"Gamma: Auto", None)) -#if QT_CONFIG(tooltip) - self.editorButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Shift+Click to edit directory.

", None)) -#endif // QT_CONFIG(tooltip) - self.editorButton.setText(QCoreApplication.translate("mainWindow", u"Metadata Editor", None)) - self.kofiButton.setText(QCoreApplication.translate("mainWindow", u"Support me on Ko-fi", None)) - self.wikiButton.setText(QCoreApplication.translate("mainWindow", u"Wiki", None)) -#if QT_CONFIG(tooltip) - self.preserveMarginLabel.setToolTip(QCoreApplication.translate("mainWindow", u"

After calculating the cropping boundaries, "back up" a specified percentage amount.

", None)) -#endif // QT_CONFIG(tooltip) - self.preserveMarginLabel.setText(QCoreApplication.translate("mainWindow", u"Preserve Margin %", None)) - self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", None)) -#if QT_CONFIG(tooltip) - self.convertButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Shift+Click to select the output directory for this list.

", None)) -#endif // QT_CONFIG(tooltip) - self.convertButton.setText(QCoreApplication.translate("mainWindow", u"Convert", None)) - self.clearButton.setText(QCoreApplication.translate("mainWindow", u"Clear list", None)) -#if QT_CONFIG(tooltip) - self.deviceBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Target device.

", None)) -#endif // QT_CONFIG(tooltip) -#if QT_CONFIG(tooltip) - self.fileButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Add CBR, CBZ, CB7 or PDF file to queue.

", None)) -#endif // QT_CONFIG(tooltip) - self.fileButton.setText(QCoreApplication.translate("mainWindow", u"Add input file(s)", None)) -#if QT_CONFIG(tooltip) - self.directoryButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Add directory containing JPG, PNG or GIF files to queue.
CBR, CBZ and CB7 files inside will not be processed!

", None)) -#endif // QT_CONFIG(tooltip) - self.directoryButton.setText(QCoreApplication.translate("mainWindow", u"Add input folder(s)", None)) -#if QT_CONFIG(tooltip) - self.formatBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Output format.

", None)) -#endif // QT_CONFIG(tooltip) -#if QT_CONFIG(tooltip) - self.chunkSizeWidget.setToolTip(QCoreApplication.translate("mainWindow", u"

Warning: chunk size greater than default may cause
performance/battery issues, especially on older devices.

", None)) -#endif // QT_CONFIG(tooltip) - self.chunkSizeLabel.setText(QCoreApplication.translate("mainWindow", u"Chunk size MB:", None)) - self.chunkSizeWarnLabel.setText(QCoreApplication.translate("mainWindow", u"Greater than default may cause performance issues on older ereaders.", None)) + self.jpegQualityLabel.setText(QCoreApplication.translate("mainWindow", u"JPEG Quality:", None)) # retranslateUi