Compare commits

..

3 Commits
0.2 ... main

Author SHA1 Message Date
ac163a847e fix length/width 2026-05-21 09:36:24 +02:00
b215e0ecb3 fix height/width 2026-05-18 08:57:07 +02:00
48fca35a78 0.3 2026-05-13 16:05:33 +02:00
9 changed files with 57 additions and 3 deletions

View File

View File

@ -2,14 +2,14 @@ import json
from datetime import date from datetime import date
from qgis.PyQt.QtWidgets import ( from qgis.PyQt.QtWidgets import (
QDialog, QVBoxLayout, QHBoxLayout, QFormLayout, QDialog, QVBoxLayout, QHBoxLayout, QFormLayout, QLayout,
QLabel, QLineEdit, QPushButton, QMessageBox, QComboBox, QLabel, QLineEdit, QPushButton, QMessageBox, QComboBox,
QDateEdit, QSpinBox, QCheckBox, QScrollArea, QWidget, QDateEdit, QSpinBox, QCheckBox, QScrollArea, QWidget,
QListWidget, QListWidgetItem, QInputDialog, QSizePolicy, QListWidget, QListWidgetItem, QInputDialog, QSizePolicy,
QFrame, QGroupBox QFrame, QGroupBox
) )
from qgis.PyQt.QtCore import Qt, QDate from qgis.PyQt.QtCore import Qt, QDate
from qgis.PyQt.QtGui import QFont, QColor from qgis.PyQt.QtGui import QFont, QColor, QGuiApplication
from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject
from qgis.utils import iface from qgis.utils import iface
@ -162,10 +162,52 @@ class SaisieDialog(QDialog):
self.setWindowTitle("Animation Saisie / Édition") self.setWindowTitle("Animation Saisie / Édition")
self.setMinimumWidth(720) self.setMinimumWidth(720)
self.setMinimumHeight(820) # Hauteur modérée : le formulaire long est dans un QScrollArea ; un minimum
# trop grand empêche le dialogue de tenir au-dessus de la barre des tâches.
self.setMinimumHeight(180)
# Permet d'agrandir / redimensionner librement (coins et bords) sur Windows.
self.setWindowFlags(
self.windowFlags() | Qt.WindowMinMaxButtonsHint
)
self._did_screen_fit = False
self._build_ui() self._build_ui()
self._load_reference_data() self._load_reference_data()
def showEvent(self, event):
super().showEvent(event)
if self._did_screen_fit:
return
self._did_screen_fit = True
screen = QGuiApplication.screenAt(self.frameGeometry().center())
if screen is None:
screen = QGuiApplication.primaryScreen()
if screen is None:
return
avail = screen.availableGeometry()
fh = self.fontMetrics().height()
margin = max(16, fh)
max_h = max(360, avail.height() - margin * 2)
max_w = max(560, avail.width() - margin * 2)
if self.minimumHeight() > max_h:
self.setMinimumHeight(max(340, max_h - fh * 2))
if self.minimumWidth() > max_w:
self.setMinimumWidth(max(400, max_w - fh))
target_h = min(max(self.height(), self.minimumHeight()), max_h)
target_w = min(max(self.width(), self.minimumWidth()), max_w)
self.resize(target_w, target_h)
fg = self.frameGeometry()
dx = dy = 0
if fg.right() > avail.right() - margin:
dx = avail.right() - margin - fg.right()
if fg.bottom() > avail.bottom() - margin:
dy = avail.bottom() - margin - fg.bottom()
if fg.left() + dx < avail.left() + margin:
dx = avail.left() + margin - fg.left()
if fg.top() + dy < avail.top() + margin:
dy = avail.top() + margin - fg.top()
if dx or dy:
self.move(fg.x() + dx, fg.y() + dy)
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# Construction UI # Construction UI
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
@ -199,12 +241,24 @@ class SaisieDialog(QDialog):
# --- Zone scrollable du formulaire --- # --- Zone scrollable du formulaire ---
scroll = QScrollArea() scroll = QScrollArea()
scroll.setWidgetResizable(True) scroll.setWidgetResizable(True)
scroll.setFrameShape(QFrame.StyledPanel)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
scroll.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
container = QWidget() container = QWidget()
self.fl = QFormLayout(container) self.fl = QFormLayout(container)
self.fl.setLabelAlignment(Qt.AlignRight) self.fl.setLabelAlignment(Qt.AlignRight)
self.fl.setSpacing(8) self.fl.setSpacing(8)
# Sans cela, le QFormLayout impose la hauteur totale du formulaire au dialogue
# (barres de défilement inutiles, fenêtre non réductible sous la barre des tâches).
if hasattr(self.fl, "setSizeConstraint"):
self.fl.setSizeConstraint(QLayout.SetNoConstraint)
else:
# Qt 6 : SetNoConstraint supprimé — laisser la hauteur être pilotée par la zone de scroll.
container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Ignored)
scroll.setWidget(container) scroll.setWidget(container)
main_layout.addWidget(scroll) main_layout.addWidget(scroll)
main_layout.setStretch(main_layout.indexOf(scroll), 1)
fl = self.fl fl = self.fl