diff --git a/gui/KCC.ui b/gui/KCC.ui index 6fdfd99..d7af4f6 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -6,8 +6,8 @@ 0 0 - 482 - 448 + 519 + 572 @@ -22,6 +22,350 @@ 5 + + + + + + + QAbstractItemView::SelectionMode::NoSelection + + + QAbstractItemView::ScrollMode::ScrollPerPixel + + + QAbstractItemView::ScrollMode::ScrollPerPixel + + + + + + + + 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 + + + + Wiki + + + + :/Other/icons/wiki.png:/Other/icons/wiki.png + + + + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 30 + + + + <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 directory + + + + :/Other/icons/folder_new.png:/Other/icons/folder_new.png + + + + + + + + 0 + 30 + + + + <html><head/><body><p style='white-space:pre'>Add CBR, CBZ, CB7 or PDF file to queue.</p></body></html> + + + Add file + + + + :/Other/icons/document_new.png:/Other/icons/document_new.png + + + + + + + + 0 + 28 + + + + <html><head/><body><p style='white-space:pre'>Target device.</p></body></html> + + + + + + + + 0 + 28 + + + + <html><head/><body><p style='white-space:pre'>Output format.</p></body></html> + + + + + + + + 0 + 30 + + + + + true + + + + <html><head/><body><p style='white-space:pre'>Shift+Click to select the output directory.</p></body></html> + + + Convert + + + + :/Other/icons/convert.png:/Other/icons/convert.png + + + + + + + + 0 + 30 + + + + Clear list + + + + :/Other/icons/clear.png:/Other/icons/clear.png + + + + + directoryButton + clearButton + fileButton + deviceBox + convertButton + formatBox + + + + + + + 0 + 30 + + + + + true + + + + false + + + Qt::AlignmentFlag::AlignJustify|Qt::AlignmentFlag::AlignVCenter + + + + + + + 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> + + + 2160 + + + + + + + + 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> + + + 3840 + + + + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Cropping power: + + + + + + + 300 + + + 1 + + + Qt::Orientation::Horizontal + + + + + + @@ -260,10 +604,20 @@ + + + + <html><head/><body><p><span style=" font-weight:700; text-decoration: underline;">Unchecked<br/></span>Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.</p><p><span style=" font-weight:700; text-decoration: underline;">Checked</span><br/>Output file size specified in &quot;Chunk size MB&quot; before split occurs.</p></body></html> + + + Chunk size + + + - + false @@ -304,188 +658,24 @@ - - - - false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Cropping power: - - - - - - - 300 - - - 1 - - - Qt::Orientation::Horizontal - - - - - - - - + + - + 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 - 30 - - - - <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 directory - - - - :/Other/icons/folder_new.png:/Other/icons/folder_new.png - - - - - - - - 0 - 30 - - - - <html><head/><body><p style='white-space:pre'>Add CBR, CBZ, CB7 or PDF file to queue.</p></body></html> - - - Add file - - - - :/Other/icons/document_new.png:/Other/icons/document_new.png - - - - - - - - 0 - 28 - - - - <html><head/><body><p style='white-space:pre'>Target device.</p></body></html> - - - - - - - - 0 - 28 - - - - <html><head/><body><p style='white-space:pre'>Output format.</p></body></html> - - - - - - - - 0 - 30 - - - - - true - - - - <html><head/><body><p style='white-space:pre'>Shift+Click to select the output directory.</p></body></html> - - - Convert - - - - :/Other/icons/convert.png:/Other/icons/convert.png - - - - - - - - 0 - 30 - - - - Clear list - - - - :/Other/icons/clear.png:/Other/icons/clear.png - - - - - directoryButton - clearButton - fileButton - deviceBox - convertButton - formatBox - - - - - 0 @@ -499,149 +689,41 @@ 0 - - - - 0 - 30 - - - - <html><head/><body><p style='white-space:pre'>Shift+Click to edit directory.</p></body></html> + + + + 0 + 0 + - Metadata Editor - - - - :/Other/icons/editor.png:/Other/icons/editor.png + Chunk size MB: - - - - 0 - 30 - + + + 100 - - Wiki + + 600 - - - :/Other/icons/wiki.png:/Other/icons/wiki.png + + 400 - - - - - - - - - - QAbstractItemView::SelectionMode::NoSelection - - - QAbstractItemView::ScrollMode::ScrollPerPixel - - - QAbstractItemView::ScrollMode::ScrollPerPixel - - - - - - - - 0 - 30 - - - - - true - - - - false - - - Qt::AlignmentFlag::AlignJustify|Qt::AlignmentFlag::AlignVCenter - - - - - - - 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> - - - 2160 - - - - - - - - 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> - - - 3840 + Greater than default may cause performance issues on older ereaders. @@ -672,18 +754,23 @@ borderBox outputSplit colorBox - croppingBox mozJpegBox maximizeStrips + croppingBox + spreadShiftBox deleteBox disableProcessingBox + chunkSizeBox + noRotateBox + interPanelCropBox + reduceRainbowBox + heightBox + croppingPowerSlider editorButton wikiButton jobList gammaSlider widthBox - heightBox - croppingPowerSlider diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 457d42f..db299b5 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -278,6 +278,8 @@ class WorkerThread(QThread): options.output = GUI.targetDirectory if GUI.authorEdit.text(): options.author = str(GUI.authorEdit.text()) + if GUI.chunkSizeCheckBox.isChecked(): + options.targetsize = int(GUI.chunkSizeBox.value()) for i in range(GUI.jobList.count()): # Make sure that we don't consider any system message as job to do @@ -605,6 +607,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.rotateBox.setChecked(False) GUI.upscaleBox.setEnabled(False) GUI.upscaleBox.setChecked(True) + GUI.chunkSizeCheckBox.setEnabled(False) + GUI.chunkSizeCheckBox.setChecked(False) else: profile = GUI.profiles[str(GUI.deviceBox.currentText())] if profile['PVOptions']: @@ -612,6 +616,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.mangaBox.setEnabled(True) GUI.rotateBox.setEnabled(True) GUI.upscaleBox.setEnabled(True) + GUI.chunkSizeCheckBox.setEnabled(True) def togglequalityBox(self, value): profile = GUI.profiles[str(GUI.deviceBox.currentText())] @@ -624,6 +629,9 @@ class KCCGUI(KCC_ui.Ui_mainWindow): else: GUI.upscaleBox.setEnabled(True) GUI.upscaleBox.setChecked(profile['DefaultUpscale']) + + def togglechunkSizeCheckBox(self, value): + GUI.chunkSizeWidget.setVisible(value) def changeGamma(self, value): valueRaw = int(5 * round(float(value) / 5)) @@ -677,6 +685,12 @@ class KCCGUI(KCC_ui.Ui_mainWindow): else: GUI.outputSplit.setEnabled(False) GUI.outputSplit.setChecked(False) + if (GUI.formats[str(GUI.formatBox.currentText())]['format'] == 'EPUB-200MB' or + GUI.formats[str(GUI.formatBox.currentText())]['format'] == 'MOBI+EPUB-200MB'): + GUI.chunkSizeCheckBox.setEnabled(False) + GUI.chunkSizeCheckBox.setChecked(False) + elif not GUI.webtoonBox.isChecked(): + GUI.chunkSizeCheckBox.setEnabled(True) def stripTags(self, html): s = HTMLStripper() @@ -804,7 +818,9 @@ class KCCGUI(KCC_ui.Ui_mainWindow): 'spreadShiftBox': GUI.spreadShiftBox.checkState().value, 'noRotateBox': GUI.noRotateBox.checkState().value, 'maximizeStrips': GUI.maximizeStrips.checkState().value, - 'gammaSlider': float(self.gammaValue) * 100}) + 'gammaSlider': float(self.gammaValue) * 100, + 'chunkSizeCheckBox': GUI.chunkSizeCheckBox.checkState().value, + 'chunkSizeBox': GUI.chunkSizeBox.value()}) self.settings.sync() self.tray.hide() @@ -1090,6 +1106,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.croppingPowerSlider.valueChanged.connect(self.changeCroppingPower) GUI.webtoonBox.stateChanged.connect(self.togglewebtoonBox) GUI.qualityBox.stateChanged.connect(self.togglequalityBox) + GUI.chunkSizeCheckBox.stateChanged.connect(self.togglechunkSizeCheckBox) GUI.deviceBox.activated.connect(self.changeDevice) GUI.formatBox.activated.connect(self.changeFormat) MW.progressBarTick.connect(self.updateProgressbar) @@ -1142,6 +1159,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow): if GUI.croppingPowerSlider.isEnabled(): GUI.croppingPowerSlider.setValue(int(self.options[option])) self.changeCroppingPower(int(self.options[option])) + elif str(option) == "chunkSizeBox": + GUI.chunkSizeBox.setValue(int(self.options[option])) else: try: if getattr(GUI, option).isEnabled(): diff --git a/kindlecomicconverter/KCC_rc.py b/kindlecomicconverter/KCC_rc.py index fd040f5..6ba25c0 100644 --- a/kindlecomicconverter/KCC_rc.py +++ b/kindlecomicconverter/KCC_rc.py @@ -11612,51 +11612,51 @@ qt_resource_struct = b"\ \x00\x00\x00X\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x02.\xed\ -\x00\x00\x01\x95\x8bV),\ +\x00\x00\x01\x95\xcf\xe3\x00\xfc\ \x00\x00\x01\xfe\x00\x00\x00\x00\x00\x01\x00\x02\x83\x87\ -\x00\x00\x01\x95\x8bV)&\ +\x00\x00\x01\x95\xcf\xe3\x00\xfb\ \x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x02Y\x8c\ -\x00\x00\x01\x95\x8bV)&\ +\x00\x00\x01\x95\xcf\xe3\x00\xfb\ \x00\x00\x01\xd6\x00\x00\x00\x00\x00\x01\x00\x02N)\ -\x00\x00\x01\x95\x8bV),\ +\x00\x00\x01\x95\xcf\xe3\x00\xfb\ \x00\x00\x00X\x00\x02\x00\x00\x00\x04\x00\x00\x00\x0c\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x01(\x97\ -\x00\x00\x01\x95\x8bV),\ +\x00\x00\x01\x95\xcf\xe3\x00\xfc\ \x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x011\xef\ -\x00\x00\x01\x95\x8bV)5\ +\x00\x00\x01\x95\xcf\xe3\x00\xfd\ \x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x90\ -\x00\x00\x01\x95\x8bV),\ +\x00\x00\x01\x95\xcf\xe3\x00\xfc\ \x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x01:\x05\ -\x00\x00\x01\x95\x8bV)4\ +\x00\x00\x01\x95\xcf\xe3\x00\xfd\ \x00\x00\x00X\x00\x02\x00\x00\x00\x03\x00\x00\x00\x11\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x02B\x00\x00\x00\x00\x00\x01\x00\x02\xb5\xd3\ -\x00\x00\x01\x95\x8bV)b\ +\x00\x00\x01\x95\xcf\xe3\x01\x0c\ \x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x02\x9f\xd6\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x0a\ \x00\x00\x02*\x00\x00\x00\x00\x00\x01\x00\x02\xa93\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x09\ \x00\x00\x00X\x00\x02\x00\x00\x00\x07\x00\x00\x00\x15\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x1c\x00\x00\x00\x00\x00\x01\x00\x01P\xb1\ -\x00\x00\x01\x95\x8bV)b\ +\x00\x00\x01\x95\xcf\xe3\x01\x0c\ \x00\x00\x012\x00\x00\x00\x00\x00\x01\x00\x01yY\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x0a\ \x00\x00\x01\x94\x00\x00\x00\x00\x00\x01\x00\x01\xd2-\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x0a\ \x00\x00\x01z\x00\x00\x00\x00\x00\x01\x00\x01\x8c\xe6\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x09\ \x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x01LR\ -\x00\x00\x01\x95\x8bV)@\ +\x00\x00\x01\x95\xcf\xe3\x01\x02\ \x00\x00\x00\xe8\x00\x00\x00\x00\x00\x01\x00\x01?\xe9\ -\x00\x00\x01\x95\x8bV)Q\ +\x00\x00\x01\x95\xcf\xe3\x01\x08\ \x00\x00\x01T\x00\x00\x00\x00\x00\x01\x00\x01\x82\xb0\ -\x00\x00\x01\x95\x8bV)Y\ +\x00\x00\x01\x95\xcf\xe3\x01\x09\ \x00\x00\x00X\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1d\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00h\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x95\x8bV)Q\ +\x00\x00\x01\x95\xcf\xe3\x01\x08\ " def qInitResources(): diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index 5bf443f..c9a2976 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(482, 448) + mainWindow.resize(519, 572) icon = QIcon() icon.addFile(u":/Icon/icons/comic2ebook.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) mainWindow.setWindowIcon(icon) @@ -35,6 +35,180 @@ class Ui_mainWindow(object): self.gridLayout = QGridLayout(self.centralWidget) self.gridLayout.setObjectName(u"gridLayout") self.gridLayout.setContentsMargins(-1, -1, -1, 5) + self.jobList = QListWidget(self.centralWidget) + self.jobList.setObjectName(u"jobList") + 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.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.wikiButton = QPushButton(self.toolWidget) + self.wikiButton.setObjectName(u"wikiButton") + self.wikiButton.setMinimumSize(QSize(0, 30)) + icon2 = QIcon() + icon2.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.wikiButton.setIcon(icon2) + + self.horizontalLayout.addWidget(self.wikiButton) + + + self.gridLayout.addWidget(self.toolWidget, 0, 0, 1, 2) + + self.buttonWidget = QWidget(self.centralWidget) + self.buttonWidget.setObjectName(u"buttonWidget") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.buttonWidget.sizePolicy().hasHeightForWidth()) + self.buttonWidget.setSizePolicy(sizePolicy) + self.gridLayout_4 = QGridLayout(self.buttonWidget) + self.gridLayout_4.setObjectName(u"gridLayout_4") + self.gridLayout_4.setContentsMargins(0, 0, 0, 0) + self.directoryButton = QPushButton(self.buttonWidget) + self.directoryButton.setObjectName(u"directoryButton") + self.directoryButton.setMinimumSize(QSize(0, 30)) + icon3 = QIcon() + icon3.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.directoryButton.setIcon(icon3) + + self.gridLayout_4.addWidget(self.directoryButton, 0, 0, 1, 1) + + self.fileButton = QPushButton(self.buttonWidget) + self.fileButton.setObjectName(u"fileButton") + self.fileButton.setMinimumSize(QSize(0, 30)) + icon4 = QIcon() + icon4.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.fileButton.setIcon(icon4) + + self.gridLayout_4.addWidget(self.fileButton, 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, 0, 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, 3, 1, 1) + + self.convertButton = QPushButton(self.buttonWidget) + self.convertButton.setObjectName(u"convertButton") + self.convertButton.setMinimumSize(QSize(0, 30)) + font = QFont() + font.setBold(True) + 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, 2, 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, 2, 1, 1) + + self.directoryButton.raise_() + self.clearButton.raise_() + self.fileButton.raise_() + self.deviceBox.raise_() + self.convertButton.raise_() + self.formatBox.raise_() + + self.gridLayout.addWidget(self.buttonWidget, 3, 0, 1, 2) + + self.progressBar = QProgressBar(self.centralWidget) + self.progressBar.setObjectName(u"progressBar") + self.progressBar.setMinimumSize(QSize(0, 30)) + 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.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(2160) + + 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(3840) + + self.gridLayout_3.addWidget(self.heightBox, 0, 3, 1, 1) + + + self.gridLayout.addWidget(self.customWidget, 8, 0, 1, 2) + + self.croppingWidget = QWidget(self.centralWidget) + self.croppingWidget.setObjectName(u"croppingWidget") + self.croppingWidget.setVisible(False) + self.horizontalLayout_3 = QHBoxLayout(self.croppingWidget) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) + self.croppingPowerLabel = QLabel(self.croppingWidget) + self.croppingPowerLabel.setObjectName(u"croppingPowerLabel") + + self.horizontalLayout_3.addWidget(self.croppingPowerLabel) + + 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.horizontalLayout_3.addWidget(self.croppingPowerSlider) + + + self.gridLayout.addWidget(self.croppingWidget, 9, 0, 1, 2) + self.optionWidget = QWidget(self.centralWidget) self.optionWidget.setObjectName(u"optionWidget") self.gridLayout_2 = QGridLayout(self.optionWidget) @@ -102,11 +276,11 @@ class Ui_mainWindow(object): self.authorEdit = QLineEdit(self.optionWidget) self.authorEdit.setObjectName(u"authorEdit") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.authorEdit.sizePolicy().hasHeightForWidth()) - self.authorEdit.setSizePolicy(sizePolicy) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.authorEdit.sizePolicy().hasHeightForWidth()) + self.authorEdit.setSizePolicy(sizePolicy2) self.authorEdit.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.authorEdit.setClearButtonEnabled(False) @@ -149,6 +323,11 @@ class Ui_mainWindow(object): self.gridLayout_2.addWidget(self.reduceRainbowBox, 7, 2, 1, 1) + self.chunkSizeCheckBox = QCheckBox(self.optionWidget) + self.chunkSizeCheckBox.setObjectName(u"chunkSizeCheckBox") + + self.gridLayout_2.addWidget(self.chunkSizeCheckBox, 7, 1, 1, 1) + self.gridLayout.addWidget(self.optionWidget, 5, 0, 1, 2) @@ -172,181 +351,44 @@ class Ui_mainWindow(object): self.horizontalLayout_2.addWidget(self.gammaSlider) - self.gridLayout.addWidget(self.gammaWidget, 6, 0, 1, 2) + self.gridLayout.addWidget(self.gammaWidget, 7, 0, 1, 2) - self.croppingWidget = QWidget(self.centralWidget) - self.croppingWidget.setObjectName(u"croppingWidget") - self.croppingWidget.setVisible(False) - self.horizontalLayout_3 = QHBoxLayout(self.croppingWidget) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) - self.croppingPowerLabel = QLabel(self.croppingWidget) - self.croppingPowerLabel.setObjectName(u"croppingPowerLabel") + self.chunkSizeWidget = QWidget(self.centralWidget) + self.chunkSizeWidget.setObjectName(u"chunkSizeWidget") + sizePolicy2.setHeightForWidth(self.chunkSizeWidget.sizePolicy().hasHeightForWidth()) + self.chunkSizeWidget.setSizePolicy(sizePolicy2) + 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") + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.chunkSizeLabel.sizePolicy().hasHeightForWidth()) + self.chunkSizeLabel.setSizePolicy(sizePolicy3) - self.horizontalLayout_3.addWidget(self.croppingPowerLabel) + self.horizontalLayout_4.addWidget(self.chunkSizeLabel) - 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.chunkSizeBox = QSpinBox(self.chunkSizeWidget) + self.chunkSizeBox.setObjectName(u"chunkSizeBox") + self.chunkSizeBox.setMinimum(100) + self.chunkSizeBox.setMaximum(600) + self.chunkSizeBox.setValue(400) - self.horizontalLayout_3.addWidget(self.croppingPowerSlider) + self.horizontalLayout_4.addWidget(self.chunkSizeBox) + + self.chunkSizeWarnLabel = QLabel(self.chunkSizeWidget) + self.chunkSizeWarnLabel.setObjectName(u"chunkSizeWarnLabel") + sizePolicy3.setHeightForWidth(self.chunkSizeWarnLabel.sizePolicy().hasHeightForWidth()) + self.chunkSizeWarnLabel.setSizePolicy(sizePolicy3) + + self.horizontalLayout_4.addWidget(self.chunkSizeWarnLabel) - self.gridLayout.addWidget(self.croppingWidget, 8, 0, 1, 2) - - self.buttonWidget = QWidget(self.centralWidget) - self.buttonWidget.setObjectName(u"buttonWidget") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.buttonWidget.sizePolicy().hasHeightForWidth()) - self.buttonWidget.setSizePolicy(sizePolicy1) - self.gridLayout_4 = QGridLayout(self.buttonWidget) - self.gridLayout_4.setObjectName(u"gridLayout_4") - self.gridLayout_4.setContentsMargins(0, 0, 0, 0) - self.directoryButton = QPushButton(self.buttonWidget) - self.directoryButton.setObjectName(u"directoryButton") - self.directoryButton.setMinimumSize(QSize(0, 30)) - icon1 = QIcon() - icon1.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.directoryButton.setIcon(icon1) - - self.gridLayout_4.addWidget(self.directoryButton, 0, 0, 1, 1) - - self.fileButton = QPushButton(self.buttonWidget) - self.fileButton.setObjectName(u"fileButton") - self.fileButton.setMinimumSize(QSize(0, 30)) - icon2 = QIcon() - icon2.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.fileButton.setIcon(icon2) - - self.gridLayout_4.addWidget(self.fileButton, 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, 0, 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, 3, 1, 1) - - self.convertButton = QPushButton(self.buttonWidget) - self.convertButton.setObjectName(u"convertButton") - self.convertButton.setMinimumSize(QSize(0, 30)) - font = QFont() - font.setBold(True) - self.convertButton.setFont(font) - icon3 = QIcon() - icon3.addFile(u":/Other/icons/convert.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.convertButton.setIcon(icon3) - - self.gridLayout_4.addWidget(self.convertButton, 1, 2, 1, 1) - - self.clearButton = QPushButton(self.buttonWidget) - self.clearButton.setObjectName(u"clearButton") - self.clearButton.setMinimumSize(QSize(0, 30)) - icon4 = QIcon() - icon4.addFile(u":/Other/icons/clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.clearButton.setIcon(icon4) - - self.gridLayout_4.addWidget(self.clearButton, 0, 2, 1, 1) - - self.directoryButton.raise_() - self.clearButton.raise_() - self.fileButton.raise_() - self.deviceBox.raise_() - self.convertButton.raise_() - self.formatBox.raise_() - - self.gridLayout.addWidget(self.buttonWidget, 3, 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)) - icon5 = QIcon() - icon5.addFile(u":/Other/icons/editor.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.editorButton.setIcon(icon5) - - self.horizontalLayout.addWidget(self.editorButton) - - self.wikiButton = QPushButton(self.toolWidget) - self.wikiButton.setObjectName(u"wikiButton") - self.wikiButton.setMinimumSize(QSize(0, 30)) - icon6 = QIcon() - icon6.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.wikiButton.setIcon(icon6) - - self.horizontalLayout.addWidget(self.wikiButton) - - - self.gridLayout.addWidget(self.toolWidget, 0, 0, 1, 2) - - self.jobList = QListWidget(self.centralWidget) - self.jobList.setObjectName(u"jobList") - 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.progressBar = QProgressBar(self.centralWidget) - self.progressBar.setObjectName(u"progressBar") - self.progressBar.setMinimumSize(QSize(0, 30)) - 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.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(2160) - - 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(3840) - - self.gridLayout_3.addWidget(self.heightBox, 0, 3, 1, 1) - - - self.gridLayout.addWidget(self.customWidget, 7, 0, 1, 2) + self.gridLayout.addWidget(self.chunkSizeWidget, 6, 0, 1, 1) mainWindow.setCentralWidget(self.centralWidget) self.statusBar = QStatusBar(mainWindow) @@ -367,18 +409,23 @@ class Ui_mainWindow(object): QWidget.setTabOrder(self.gammaBox, self.borderBox) QWidget.setTabOrder(self.borderBox, self.outputSplit) QWidget.setTabOrder(self.outputSplit, self.colorBox) - QWidget.setTabOrder(self.colorBox, self.croppingBox) - QWidget.setTabOrder(self.croppingBox, self.mozJpegBox) + QWidget.setTabOrder(self.colorBox, self.mozJpegBox) QWidget.setTabOrder(self.mozJpegBox, self.maximizeStrips) - QWidget.setTabOrder(self.maximizeStrips, self.deleteBox) + QWidget.setTabOrder(self.maximizeStrips, self.croppingBox) + QWidget.setTabOrder(self.croppingBox, self.spreadShiftBox) + QWidget.setTabOrder(self.spreadShiftBox, self.deleteBox) QWidget.setTabOrder(self.deleteBox, self.disableProcessingBox) - QWidget.setTabOrder(self.disableProcessingBox, self.editorButton) + QWidget.setTabOrder(self.disableProcessingBox, self.chunkSizeBox) + QWidget.setTabOrder(self.chunkSizeBox, self.noRotateBox) + QWidget.setTabOrder(self.noRotateBox, self.interPanelCropBox) + QWidget.setTabOrder(self.interPanelCropBox, self.reduceRainbowBox) + QWidget.setTabOrder(self.reduceRainbowBox, self.heightBox) + QWidget.setTabOrder(self.heightBox, self.croppingPowerSlider) + QWidget.setTabOrder(self.croppingPowerSlider, self.editorButton) QWidget.setTabOrder(self.editorButton, self.wikiButton) QWidget.setTabOrder(self.wikiButton, self.jobList) QWidget.setTabOrder(self.jobList, self.gammaSlider) QWidget.setTabOrder(self.gammaSlider, self.widthBox) - QWidget.setTabOrder(self.widthBox, self.heightBox) - QWidget.setTabOrder(self.heightBox, self.croppingPowerSlider) self.retranslateUi(mainWindow) @@ -387,6 +434,45 @@ 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.wikiButton.setText(QCoreApplication.translate("mainWindow", u"Wiki", 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 directory", None)) +#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 file", None)) +#if QT_CONFIG(tooltip) + self.deviceBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Target device.

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

Output format.

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

Shift+Click to select the output directory.

", 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.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) + self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", None)) #if QT_CONFIG(tooltip) self.croppingBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Disabled

Disabled

Indeterminate - Margins
Margins

Checked - Margins + page numbers
Margins +page numbers

", None)) #endif // QT_CONFIG(tooltip) @@ -463,45 +549,15 @@ class Ui_mainWindow(object): self.reduceRainbowBox.setToolTip(QCoreApplication.translate("mainWindow", u"Reduce rainbow effect on color eink by slightly blurring images", None)) #endif // QT_CONFIG(tooltip) self.reduceRainbowBox.setText(QCoreApplication.translate("mainWindow", u"Reduce Rainbow", None)) +#if QT_CONFIG(tooltip) + self.chunkSizeCheckBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked
Maximal output file size is 100 MB for Webtoon, 400 MB for others before split occurs.

Checked
Output file size specified in "Chunk size MB" before split occurs.

", None)) +#endif // QT_CONFIG(tooltip) + self.chunkSizeCheckBox.setText(QCoreApplication.translate("mainWindow", u"Chunk size", None)) self.gammaLabel.setText(QCoreApplication.translate("mainWindow", u"Gamma: Auto", None)) - self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", 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 directory", None)) -#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 file", None)) -#if QT_CONFIG(tooltip) - self.deviceBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Target device.

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

Output format.

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

Shift+Click to select the output directory.

", 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.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.wikiButton.setText(QCoreApplication.translate("mainWindow", u"Wiki", 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)) + 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)) # retranslateUi