"""Dialogue Fusion de PDF avec reordonnement drag & drop.""" from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel, QListWidget, QListWidgetItem, QAbstractItemView, QPushButton, QDialogButtonBox, QFileDialog) from PyQt6.QtCore import Qt, QSize class MergeDialog(QDialog): def __init__(self, initial_files=None, parent=None): super().__init__(parent) self.setWindowTitle("Fusionner des PDF") self.setMinimumSize(500, 400) self._files = list(initial_files or []) self._setup_ui() self._refresh_list() def _setup_ui(self): layout = QVBoxLayout(self) layout.addWidget(QLabel("Glissez les fichiers pour reordonner. Cliquez Ajouter pour en ajouter.")) self._list = QListWidget() self._list.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) self._list.setDefaultDropAction(Qt.DropAction.MoveAction) self._list.setStyleSheet(""" QListWidget { background: #fff; border: 1px solid #d0d0d0; border-radius: 6px; padding: 4px; } QListWidget::item { padding: 8px; border-bottom: 1px solid #eee; } QListWidget::item:selected { background: #e0f4ff; color: #006fa6; } """) layout.addWidget(self._list) btn_layout = QHBoxLayout() btn_add = QPushButton("Ajouter des PDF...") btn_add.clicked.connect(self._add_files) btn_layout.addWidget(btn_add) btn_remove = QPushButton("Retirer") btn_remove.clicked.connect(self._remove_file) btn_layout.addWidget(btn_remove) btn_up = QPushButton("Monter") btn_up.clicked.connect(self._move_up) btn_layout.addWidget(btn_up) btn_down = QPushButton("Descendre") btn_down.clicked.connect(self._move_down) btn_layout.addWidget(btn_down) layout.addLayout(btn_layout) self._count_label = QLabel("") layout.addWidget(self._count_label) buttons = QDialogButtonBox( QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel ) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) def _refresh_list(self): self._list.clear() for i, path in enumerate(self._files): import os name = os.path.basename(path) item = QListWidgetItem(f"{i+1}. {name}") item.setData(Qt.ItemDataRole.UserRole, path) item.setToolTip(path) self._list.addItem(item) self._count_label.setText(f"{len(self._files)} fichier(s)") def _add_files(self): paths, _ = QFileDialog.getOpenFileNames(self, "Ajouter des PDF", "", "PDF (*.pdf)") if paths: self._files.extend(paths) self._refresh_list() def _remove_file(self): row = self._list.currentRow() if row >= 0: self._files.pop(row) self._refresh_list() def _move_up(self): row = self._list.currentRow() if row > 0: self._files[row], self._files[row-1] = self._files[row-1], self._files[row] self._refresh_list() self._list.setCurrentRow(row - 1) def _move_down(self): row = self._list.currentRow() if 0 <= row < len(self._files) - 1: self._files[row], self._files[row+1] = self._files[row+1], self._files[row] self._refresh_list() self._list.setCurrentRow(row + 1) def get_files(self): # Relire l'ordre depuis la liste (drag & drop peut avoir change) files = [] for i in range(self._list.count()): item = self._list.item(i) files.append(item.data(Qt.ItemDataRole.UserRole)) return files