V3.0.0 — Rotation, Annuler/Refaire, Delivretiser, Trim&Shift, Inverser

- Rotation de pages : clic droit sur vignette → Pivoter +90/-90/180
  Aussi dans le menu Pages
- Ctrl+Z / Ctrl+Y : annuler et refaire (pile de 20 etats)
- Delivretiser : coupe les pages en 2 et remet dans l'ordre sequentiel
  (inverse de la creation de livret)
- Trim & Shift : decaler le contenu des pages
  - Decalage X/Y different pages paires/impaires
  - Compensation de creep progressive pour livrets epais
- Inverser l'ordre des pages (menu Pages)
- Fix impression : ouvre le PDF dans le lecteur par defaut
- Barre outils droite : ajout Delivretiser, Trim/Shift, Inverser

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jules
2026-03-21 16:02:07 +01:00
parent cee86f5c03
commit 673d76caa2
7 changed files with 364 additions and 12 deletions

View File

@@ -9,10 +9,11 @@ from PyQt6.QtCore import Qt, pyqtSignal, QSize
class PagePanel(QWidget):
"""Panneau de vignettes avec drag & drop, suppression, insertion."""
page_selected = pyqtSignal(int) # page index cliquee
pages_reordered = pyqtSignal(list) # nouvelle liste d'indices
page_delete_requested = pyqtSignal(int) # demande suppression
page_insert_requested = pyqtSignal(int) # demande insertion page blanche apres
page_selected = pyqtSignal(int)
pages_reordered = pyqtSignal(list)
page_delete_requested = pyqtSignal(int)
page_insert_requested = pyqtSignal(int)
page_rotate_requested = pyqtSignal(int, int) # page_index, degrees (90, -90, 180)
def __init__(self, parent=None):
super().__init__(parent)
@@ -106,6 +107,10 @@ class PagePanel(QWidget):
QMenu::item:selected { background: #e0f4ff; color: #006fa6; }
""")
act_rot_right = menu.addAction("Pivoter +90°")
act_rot_left = menu.addAction("Pivoter -90°")
act_rot_180 = menu.addAction("Pivoter 180°")
menu.addSeparator()
act_insert = menu.addAction("Inserer une page blanche apres")
act_delete = menu.addAction("Supprimer cette page")
@@ -114,3 +119,9 @@ class PagePanel(QWidget):
self.page_delete_requested.emit(row)
elif action == act_insert:
self.page_insert_requested.emit(row)
elif action == act_rot_right:
self.page_rotate_requested.emit(row, 90)
elif action == act_rot_left:
self.page_rotate_requested.emit(row, -90)
elif action == act_rot_180:
self.page_rotate_requested.emit(row, 180)