V3.1.0 — Selection multiple, impression, MAJ dans Aide, menu contextuel
- Selection multiple dans les vignettes (Ctrl+clic, Maj+clic) - Rotation/suppression sur selection multiple - Impression : os.startfile(print) avec fallback - MAJ deplacee dans Aide > Rechercher une mise a jour (plus au demarrage) - Support arguments CLI : ouvrir un PDF en argument, fusionner si plusieurs - register_windows.bat : association fichier PDF + menu contextuel Windows - Clic droit > CopyDev Impose > Ouvrir / Livret A4 / Livret A3 - Presets manager (base pour macros) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -249,6 +249,8 @@ class MainWindow(QMainWindow):
|
||||
|
||||
# Aide
|
||||
help_menu = menubar.addMenu("Aide")
|
||||
self._add_action(help_menu, "Rechercher une mise a jour...", None, self._do_check_update)
|
||||
help_menu.addSeparator()
|
||||
self._add_action(help_menu, "A propos de CopyDev Imposing Tool", None, self._show_about)
|
||||
|
||||
def _add_action(self, menu, text, shortcut, callback):
|
||||
@@ -908,20 +910,25 @@ class MainWindow(QMainWindow):
|
||||
return
|
||||
try:
|
||||
source = self._result_file or self._current_file
|
||||
# Copier dans un fichier temp avec un nom lisible
|
||||
import shutil
|
||||
tmp_print = os.path.join(tempfile.gettempdir(), "copydev_print.pdf")
|
||||
shutil.copy2(source, tmp_print)
|
||||
if sys.platform == "win32":
|
||||
import subprocess
|
||||
# Ouvrir avec le lecteur PDF par defaut (qui a un menu imprimer)
|
||||
subprocess.Popen(["cmd", "/c", "start", "", tmp_print])
|
||||
# "print" envoie directement au dialogue d'impression
|
||||
os.startfile(tmp_print, "print")
|
||||
else:
|
||||
import subprocess
|
||||
subprocess.Popen(["xdg-open", tmp_print])
|
||||
self._status_label.setText("Fichier ouvert pour impression")
|
||||
subprocess.Popen(["lp", tmp_print])
|
||||
self._status_label.setText("Impression lancee...")
|
||||
except OSError:
|
||||
# Fallback : ouvrir le fichier normalement
|
||||
try:
|
||||
if sys.platform == "win32":
|
||||
os.startfile(tmp_print)
|
||||
self._status_label.setText("Fichier ouvert — utilisez Ctrl+P pour imprimer")
|
||||
except Exception as e2:
|
||||
QMessageBox.critical(self, "Erreur", f"Impossible d'imprimer :\n{e2}")
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Erreur", f"Impossible d'ouvrir pour impression :\n{e}")
|
||||
QMessageBox.critical(self, "Erreur", f"Impossible d'imprimer :\n{e}")
|
||||
|
||||
def _do_crop_marks(self):
|
||||
if not self._require_file():
|
||||
@@ -974,6 +981,29 @@ class MainWindow(QMainWindow):
|
||||
|
||||
# ── A propos ──
|
||||
|
||||
def _do_check_update(self):
|
||||
from app.updater import check_for_update, do_update, VERSION
|
||||
self._status_label.setText("Recherche de mises a jour...")
|
||||
QApplication.processEvents()
|
||||
update_available, remote_version = check_for_update()
|
||||
if update_available:
|
||||
reply = QMessageBox.question(
|
||||
self, "Mise a jour disponible",
|
||||
f"Nouvelle version : {remote_version}\n"
|
||||
f"Version actuelle : {VERSION}\n\n"
|
||||
"Mettre a jour maintenant ?",
|
||||
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
|
||||
)
|
||||
if reply == QMessageBox.StandardButton.Yes:
|
||||
success, msg = do_update()
|
||||
if success:
|
||||
QMessageBox.information(self, "Mise a jour", f"{msg}\n\nRedemarrez l'application.")
|
||||
else:
|
||||
QMessageBox.warning(self, "Mise a jour", f"Echec :\n{msg}")
|
||||
else:
|
||||
QMessageBox.information(self, "Mise a jour", "Vous etes a jour !")
|
||||
self._status_label.setText("Pret")
|
||||
|
||||
def _show_about(self):
|
||||
from PyQt6.QtWidgets import QDialog, QVBoxLayout, QLabel, QDialogButtonBox
|
||||
from PyQt6.QtGui import QPixmap, QFont
|
||||
|
||||
Reference in New Issue
Block a user