- Formats personnalises dans tous les menus deroulants de format : - "Personnalise..." : saisie libre largeur x hauteur en mm - "Ajouter un format..." : sauvegarder un format custom (persistant) - Formats custom affiches dans le dropdown avec separateur - Reperes de coupe (Annotations > Reperes de coupe) : - Longueur, distance du bord, epaisseur configurables - Couleur : noir, gris, CMYK - Reperes de centrage optionnels - Appliquer a : toutes, paires, impaires, page courante - Enlever les reperes de coupe (menu) - Step & Repeat : ajout des marges (haut, bas, gauche, droite) - Tous les dialogues de format migres vers format_combo Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
101 lines
3.7 KiB
Python
101 lines
3.7 KiB
Python
"""Dialogue Creer un livret."""
|
|
|
|
from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
|
|
QComboBox, QGroupBox, QRadioButton, QSpinBox,
|
|
QDialogButtonBox)
|
|
from app.dialogs.format_combo import populate_format_combo, get_selected_size, handle_format_selection
|
|
|
|
|
|
class BookletDialog(QDialog):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.setWindowTitle("Creer un livret")
|
|
self.setMinimumWidth(400)
|
|
self._setup_ui()
|
|
|
|
def _setup_ui(self):
|
|
layout = QVBoxLayout(self)
|
|
|
|
grp_binding = QGroupBox("Type de reliure")
|
|
bl = QVBoxLayout(grp_binding)
|
|
self.rb_saddle = QRadioButton("Piqure a cheval (livret agrafe)")
|
|
self.rb_saddle.setChecked(True)
|
|
self.rb_perfect = QRadioButton("Dos carre colle (livre)")
|
|
self.rb_continuous = QRadioButton("Continu (pages sequentielles)")
|
|
self.rb_cut_stacks = QRadioButton("Cut stacks (couper et empiler)")
|
|
bl.addWidget(self.rb_saddle)
|
|
bl.addWidget(self.rb_perfect)
|
|
bl.addWidget(self.rb_continuous)
|
|
bl.addWidget(self.rb_cut_stacks)
|
|
layout.addWidget(grp_binding)
|
|
|
|
sig_layout = QHBoxLayout()
|
|
sig_layout.addWidget(QLabel("Pages par cahier :"))
|
|
self.spin_signature = QSpinBox()
|
|
self.spin_signature.setRange(4, 128)
|
|
self.spin_signature.setValue(32)
|
|
self.spin_signature.setSingleStep(4)
|
|
self.spin_signature.setEnabled(False)
|
|
sig_layout.addWidget(self.spin_signature)
|
|
sig_layout.addStretch()
|
|
layout.addLayout(sig_layout)
|
|
self.rb_perfect.toggled.connect(self.spin_signature.setEnabled)
|
|
|
|
grp_sheet = QGroupBox("Taille de la feuille")
|
|
sl = QHBoxLayout(grp_sheet)
|
|
sl.addWidget(QLabel("Format :"))
|
|
self.combo_sheet = QComboBox()
|
|
self.combo_sheet.addItem("Automatique (2x page)")
|
|
populate_format_combo(self.combo_sheet, "Automatique (2x page)")
|
|
self.combo_sheet.activated.connect(lambda: handle_format_selection(self.combo_sheet, self))
|
|
sl.addWidget(self.combo_sheet)
|
|
layout.addWidget(grp_sheet)
|
|
|
|
grp_align = QGroupBox("Alignement")
|
|
al = QVBoxLayout(grp_align)
|
|
self.rb_center = QRadioButton("Centrer")
|
|
self.rb_center.setChecked(True)
|
|
self.rb_pull = QRadioButton("Vers le dos (centre)")
|
|
self.rb_bl = QRadioButton("Bas-gauche")
|
|
al.addWidget(self.rb_center)
|
|
al.addWidget(self.rb_pull)
|
|
al.addWidget(self.rb_bl)
|
|
layout.addWidget(grp_align)
|
|
|
|
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):
|
|
if self.rb_saddle.isChecked():
|
|
binding = "saddle_stitch"
|
|
elif self.rb_perfect.isChecked():
|
|
binding = "perfect_bound"
|
|
elif self.rb_continuous.isChecked():
|
|
binding = "continuous"
|
|
else:
|
|
binding = "cut_stacks"
|
|
|
|
text = self.combo_sheet.currentText()
|
|
if text.startswith("Automatique"):
|
|
sheet_size = None
|
|
else:
|
|
sheet_size = get_selected_size(self.combo_sheet)
|
|
|
|
if self.rb_center.isChecked():
|
|
alignment = "center"
|
|
elif self.rb_pull.isChecked():
|
|
alignment = "pull_center"
|
|
else:
|
|
alignment = "bottom_left"
|
|
|
|
return {
|
|
"binding": binding,
|
|
"sheet_size": sheet_size,
|
|
"signature_size": self.spin_signature.value(),
|
|
"alignment": alignment,
|
|
}
|