- Demonter les pages : couper en 2 sans reordonner (sous Delivretiser) - Masquage visuel : selection au curseur sur l'apercu + plage de pages - Regles horizontale/verticale en mm (menu Affichage) - Fonds perdus : filigrane rouge pour visualiser les bleeds - Reperes de coupe : marques a l'exterieur (page agrandie), 2 traits/coin - Numerotation : couleur configurable via selecteur - Decalage : Trim & Shift renomme en francais, creep -> chasse - Recadrages multiples cumulatifs (plages differentes) - Fix spinbox format personnalise (fleches aleatoires) - Fix combo livret : option Automatique preservee Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
85 lines
3.2 KiB
Python
85 lines
3.2 KiB
Python
"""Dialogue Decalage du contenu."""
|
|
|
|
from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
|
|
QGroupBox, QDoubleSpinBox, QCheckBox,
|
|
QDialogButtonBox)
|
|
from app.engine.pdf_utils import mm_to_pt
|
|
|
|
|
|
class TrimShiftDialog(QDialog):
|
|
def __init__(self, total_pages=1, parent=None):
|
|
super().__init__(parent)
|
|
self.setWindowTitle("Decalage du contenu")
|
|
self.setMinimumWidth(420)
|
|
self._total_pages = total_pages
|
|
self._setup_ui()
|
|
|
|
def _setup_ui(self):
|
|
layout = QVBoxLayout(self)
|
|
|
|
# Decalage pages impaires
|
|
grp_odd = QGroupBox("Decalage pages impaires (mm)")
|
|
ol = QHBoxLayout(grp_odd)
|
|
ol.addWidget(QLabel("X :"))
|
|
self.spin_x = QDoubleSpinBox()
|
|
self.spin_x.setRange(-200, 200)
|
|
self.spin_x.setSuffix(" mm")
|
|
ol.addWidget(self.spin_x)
|
|
ol.addWidget(QLabel("Y :"))
|
|
self.spin_y = QDoubleSpinBox()
|
|
self.spin_y.setRange(-200, 200)
|
|
self.spin_y.setSuffix(" mm")
|
|
ol.addWidget(self.spin_y)
|
|
layout.addWidget(grp_odd)
|
|
|
|
# Pages paires differentes
|
|
self.chk_different = QCheckBox("Decalage different pour pages paires")
|
|
layout.addWidget(self.chk_different)
|
|
|
|
grp_even = QGroupBox("Decalage pages paires (mm)")
|
|
el = QHBoxLayout(grp_even)
|
|
el.addWidget(QLabel("X :"))
|
|
self.spin_x_even = QDoubleSpinBox()
|
|
self.spin_x_even.setRange(-200, 200)
|
|
self.spin_x_even.setSuffix(" mm")
|
|
self.spin_x_even.setEnabled(False)
|
|
el.addWidget(self.spin_x_even)
|
|
el.addWidget(QLabel("Y :"))
|
|
self.spin_y_even = QDoubleSpinBox()
|
|
self.spin_y_even.setRange(-200, 200)
|
|
self.spin_y_even.setSuffix(" mm")
|
|
self.spin_y_even.setEnabled(False)
|
|
el.addWidget(self.spin_y_even)
|
|
layout.addWidget(grp_even)
|
|
|
|
self.chk_different.toggled.connect(self.spin_x_even.setEnabled)
|
|
self.chk_different.toggled.connect(self.spin_y_even.setEnabled)
|
|
|
|
# Chasse (creep)
|
|
grp_creep = QGroupBox("Compensation de chasse (livrets)")
|
|
cl = QHBoxLayout(grp_creep)
|
|
cl.addWidget(QLabel("Chasse max :"))
|
|
self.spin_creep = QDoubleSpinBox()
|
|
self.spin_creep.setRange(0, 20)
|
|
self.spin_creep.setSuffix(" mm")
|
|
self.spin_creep.setToolTip("Decalage progressif pour compenser l'epaisseur du papier")
|
|
cl.addWidget(self.spin_creep)
|
|
layout.addWidget(grp_creep)
|
|
|
|
buttons = QDialogButtonBox(
|
|
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
|
|
)
|
|
buttons.accepted.connect(self.accept)
|
|
buttons.rejected.connect(self.reject)
|
|
layout.addWidget(buttons)
|
|
|
|
def get_settings(self):
|
|
return {
|
|
"shift_x": mm_to_pt(self.spin_x.value()),
|
|
"shift_y": mm_to_pt(self.spin_y.value()),
|
|
"shift_x_even": mm_to_pt(self.spin_x_even.value()) if self.chk_different.isChecked() else None,
|
|
"shift_y_even": mm_to_pt(self.spin_y_even.value()) if self.chk_different.isChecked() else None,
|
|
"creep": mm_to_pt(self.spin_creep.value()),
|
|
"creep_pages": self._total_pages,
|
|
}
|