From 28e1410f50dba57a8df090767f4cb64e39c282fa Mon Sep 17 00:00:00 2001 From: jaroslawjanas Date: Wed, 10 Dec 2025 03:03:56 +0100 Subject: [PATCH] Add multi-directory selection for bulk metadata editing * Shift+click on editor button now opens multi-directory selection dialog * Multiple directories enable bulk mode with volume number assignment * Uses Qt's built-in dialog with multi-selection enabled for native look and feel --- kindlecomicconverter/KCC_gui.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 56ef484..51fc97a 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -22,7 +22,7 @@ import itertools from pathlib import Path from PySide6.QtCore import (QSize, QUrl, Qt, Signal, QIODeviceBase, QEvent, QThread, QSettings) from PySide6.QtGui import (QColor, QIcon, QPixmap, QDesktopServices) -from PySide6.QtWidgets import (QApplication, QLabel, QListWidgetItem, QMainWindow, QSystemTrayIcon, QFileDialog, QMessageBox, QDialog) +from PySide6.QtWidgets import (QApplication, QLabel, QListWidgetItem, QMainWindow, QSystemTrayIcon, QFileDialog, QMessageBox, QDialog, QAbstractItemView, QListView, QTreeView) from PySide6.QtNetwork import (QLocalSocket, QLocalServer) import os @@ -620,10 +620,25 @@ class KCCGUI(KCC_ui.Ui_mainWindow): files = [] if not sname: if QApplication.keyboardModifiers() == Qt.ShiftModifier: - dname = QFileDialog.getExistingDirectory(MW, 'Select directory', self.lastPath) - if dname != '': - files = [os.path.join(dname, 'ComicInfo.xml')] - self.lastPath = os.path.dirname(files[0]) + # Multi-directory selection for bulk editing ComicInfo.xml + dialog = QFileDialog(MW, 'Select volume directories', self.lastPath) + dialog.setFileMode(QFileDialog.FileMode.Directory) + dialog.setOption(QFileDialog.Option.ShowDirsOnly, True) + dialog.setOption(QFileDialog.Option.DontUseNativeDialog, True) + + # Enable multi-selection in the dialog (may not work with native dialog on all platforms) + file_view = dialog.findChild(QListView, 'listView') + if file_view: + file_view.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection) + file_tree = dialog.findChild(QTreeView) + if file_tree: + file_tree.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection) + + if dialog.exec(): + selected_dirs = dialog.selectedFiles() + if selected_dirs: + files = [os.path.join(d, 'ComicInfo.xml') for d in selected_dirs] + self.lastPath = os.path.dirname(selected_dirs[0]) else: if self.sevenzip: fnames = QFileDialog.getOpenFileNames(MW, 'Select file(s)', self.lastPath,