new GPR parameters and some UI fixes
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
"""Shared layout helpers for section builders."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TypeAlias
|
||||
|
||||
from PyQt6.QtWidgets import QFormLayout, QHBoxLayout, QWidget
|
||||
|
||||
|
||||
FormLabel: TypeAlias = str | QWidget
|
||||
FormRow: TypeAlias = QWidget | tuple[FormLabel, QWidget]
|
||||
|
||||
|
||||
def build_two_column_form_widget(
|
||||
parent: QWidget,
|
||||
rows: list[FormRow],
|
||||
*,
|
||||
split_index: int | None = None,
|
||||
) -> QWidget:
|
||||
"""Build one widget containing two side-by-side form columns."""
|
||||
panel = QWidget(parent)
|
||||
panel_layout = QHBoxLayout(panel)
|
||||
panel_layout.setContentsMargins(0, 0, 0, 0)
|
||||
panel_layout.setSpacing(12)
|
||||
|
||||
left_column = QWidget(panel)
|
||||
left_form = _create_form_layout(left_column)
|
||||
right_column = QWidget(panel)
|
||||
right_form = _create_form_layout(right_column)
|
||||
|
||||
panel_layout.addWidget(left_column, stretch=1)
|
||||
panel_layout.addWidget(right_column, stretch=1)
|
||||
|
||||
actual_split_index = (len(rows) + 1) // 2 if split_index is None else split_index
|
||||
actual_split_index = max(0, min(actual_split_index, len(rows)))
|
||||
|
||||
for row in rows[:actual_split_index]:
|
||||
_add_form_row(left_form, row)
|
||||
for row in rows[actual_split_index:]:
|
||||
_add_form_row(right_form, row)
|
||||
return panel
|
||||
|
||||
|
||||
def _create_form_layout(parent: QWidget) -> QFormLayout:
|
||||
"""Create a compact growing form layout for one column."""
|
||||
form = QFormLayout(parent)
|
||||
form.setContentsMargins(0, 0, 0, 0)
|
||||
form.setHorizontalSpacing(10)
|
||||
form.setVerticalSpacing(6)
|
||||
form.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow)
|
||||
return form
|
||||
|
||||
|
||||
def _add_form_row(form: QFormLayout, row: FormRow) -> None:
|
||||
"""Append one form row, with or without an explicit label."""
|
||||
if isinstance(row, tuple):
|
||||
label, field = row
|
||||
form.addRow(label, field)
|
||||
return
|
||||
form.addRow(row)
|
||||
Reference in New Issue
Block a user