Files
copydev-imposing-tool/app/dialogs/page_numbers_dialog.py
Jules e3dfd90933 Initial commit — Copydev Imposing Tool
Outil d'imposition PDF desktop (PyQt6) remplacant Quite Imposing Plus.
9 fonctions : livret, n-up, step & repeat, imposition manuelle,
jointure pages, pages blanches, numerotation, masquage, fonds perdus.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:54:02 +01:00

121 lines
4.2 KiB
Python

"""Dialogue Numerotation de pages."""
from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
QGroupBox, QComboBox, QSpinBox, QLineEdit,
QDialogButtonBox, QDoubleSpinBox)
from reportlab.lib.units import mm
class PageNumbersDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Numerotation de pages")
self.setMinimumWidth(400)
self._setup_ui()
def _setup_ui(self):
layout = QVBoxLayout(self)
# Position
grp_pos = QGroupBox("Position")
pl = QHBoxLayout(grp_pos)
pl.addWidget(QLabel("Emplacement :"))
self.combo_pos = QComboBox()
positions = [
"haut-gauche", "haut-centre", "haut-droite",
"milieu-gauche", "milieu-centre", "milieu-droite",
"bas-gauche", "bas-centre", "bas-droite"
]
self.combo_pos.addItems(positions)
self.combo_pos.setCurrentText("bas-centre")
pl.addWidget(self.combo_pos)
layout.addWidget(grp_pos)
# Police
grp_font = QGroupBox("Police")
fl = QHBoxLayout(grp_font)
fl.addWidget(QLabel("Police :"))
self.combo_font = QComboBox()
self.combo_font.addItems(["Helvetica", "Times-Roman", "Courier"])
fl.addWidget(self.combo_font)
fl.addWidget(QLabel("Taille :"))
self.spin_size = QSpinBox()
self.spin_size.setRange(4, 72)
self.spin_size.setValue(10)
fl.addWidget(self.spin_size)
layout.addWidget(grp_font)
# Texte
grp_text = QGroupBox("Texte")
tl = QHBoxLayout(grp_text)
tl.addWidget(QLabel("Prefixe :"))
self.edit_prefix = QLineEdit()
self.edit_prefix.setPlaceholderText("ex: Page ")
tl.addWidget(self.edit_prefix)
tl.addWidget(QLabel("Suffixe :"))
self.edit_suffix = QLineEdit()
self.edit_suffix.setPlaceholderText("ex: / 24")
tl.addWidget(self.edit_suffix)
layout.addWidget(grp_text)
# Numero de depart
start_layout = QHBoxLayout()
start_layout.addWidget(QLabel("Commencer a :"))
self.spin_start = QSpinBox()
self.spin_start.setRange(0, 9999)
self.spin_start.setValue(1)
start_layout.addWidget(self.spin_start)
start_layout.addStretch()
layout.addLayout(start_layout)
# Marges
margin_layout = QHBoxLayout()
margin_layout.addWidget(QLabel("Marge X :"))
self.spin_mx = QDoubleSpinBox()
self.spin_mx.setRange(0, 100)
self.spin_mx.setValue(10)
self.spin_mx.setSuffix(" mm")
margin_layout.addWidget(self.spin_mx)
margin_layout.addWidget(QLabel("Marge Y :"))
self.spin_my = QDoubleSpinBox()
self.spin_my.setRange(0, 100)
self.spin_my.setValue(10)
self.spin_my.setSuffix(" mm")
margin_layout.addWidget(self.spin_my)
layout.addLayout(margin_layout)
# Appliquer a
grp_apply = QGroupBox("Appliquer a")
al = QHBoxLayout(grp_apply)
self.combo_apply = QComboBox()
self.combo_apply.addItems(["Toutes les pages", "Pages paires", "Pages impaires"])
al.addWidget(self.combo_apply)
layout.addWidget(grp_apply)
# Boutons
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):
apply_map = {
"Toutes les pages": "all",
"Pages paires": "even",
"Pages impaires": "odd"
}
return {
"position": self.combo_pos.currentText(),
"font_name": self.combo_font.currentText(),
"font_size": self.spin_size.value(),
"color": (0, 0, 0),
"prefix": self.edit_prefix.text(),
"suffix": self.edit_suffix.text(),
"start_number": self.spin_start.value(),
"margin_x": self.spin_mx.value() * mm,
"margin_y": self.spin_my.value() * mm,
"apply_to": apply_map[self.combo_apply.currentText()],
}