Compare commits
No commits in common. "main" and "0.2" have entirely different histories.
0
animation_form.py
Normal file
0
animation_form.py
Normal file
@ -2,14 +2,14 @@ import json
|
||||
from datetime import date
|
||||
|
||||
from qgis.PyQt.QtWidgets import (
|
||||
QDialog, QVBoxLayout, QHBoxLayout, QFormLayout, QLayout,
|
||||
QDialog, QVBoxLayout, QHBoxLayout, QFormLayout,
|
||||
QLabel, QLineEdit, QPushButton, QMessageBox, QComboBox,
|
||||
QDateEdit, QSpinBox, QCheckBox, QScrollArea, QWidget,
|
||||
QListWidget, QListWidgetItem, QInputDialog, QSizePolicy,
|
||||
QFrame, QGroupBox
|
||||
)
|
||||
from qgis.PyQt.QtCore import Qt, QDate
|
||||
from qgis.PyQt.QtGui import QFont, QColor, QGuiApplication
|
||||
from qgis.PyQt.QtGui import QFont, QColor
|
||||
from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject
|
||||
from qgis.utils import iface
|
||||
|
||||
@ -162,52 +162,10 @@ class SaisieDialog(QDialog):
|
||||
|
||||
self.setWindowTitle("Animation – Saisie / Édition")
|
||||
self.setMinimumWidth(720)
|
||||
# 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.setMinimumHeight(820)
|
||||
self._build_ui()
|
||||
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
|
||||
# -----------------------------------------------------------------------
|
||||
@ -241,24 +199,12 @@ class SaisieDialog(QDialog):
|
||||
# --- Zone scrollable du formulaire ---
|
||||
scroll = QScrollArea()
|
||||
scroll.setWidgetResizable(True)
|
||||
scroll.setFrameShape(QFrame.StyledPanel)
|
||||
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
|
||||
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
|
||||
scroll.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||
container = QWidget()
|
||||
self.fl = QFormLayout(container)
|
||||
self.fl.setLabelAlignment(Qt.AlignRight)
|
||||
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)
|
||||
main_layout.addWidget(scroll)
|
||||
main_layout.setStretch(main_layout.indexOf(scroll), 1)
|
||||
|
||||
fl = self.fl
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user