Source code for pyqt_reactive.forms.layout_constants

"""
Layout constants for PyQt parameter forms.

This module centralizes all spacing, margin, and layout configuration
to ensure uniform appearance across all parameter forms.
"""

from dataclasses import dataclass


[docs] @dataclass(frozen=True) class ParameterFormLayoutConfig: """Configuration for parameter form layout spacing and margins.""" # Main form layout settings main_layout_spacing: int = 4 main_layout_margins: tuple = (main_layout_spacing, main_layout_spacing, main_layout_spacing, main_layout_spacing) # Content layout settings (between parameter fields) # THIS IS THE KEY ONE - controls vertical spacing between each parameter row content_layout_spacing: int = 1 content_layout_margins: tuple = (content_layout_spacing, content_layout_spacing, content_layout_spacing, content_layout_spacing) # Parameter row layout settings (between label, widget, button) parameter_row_spacing: int = 2 parameter_row_margins: tuple = (1, 1, 1, 1) # Optional parameter layout settings (checkbox + nested content) optional_layout_spacing: int = 2 optional_layout_margins: tuple = (2, 2, 1, 1) # GroupBox/Section settings (Dtype Config, Processing Config, etc.) groupbox_spacing: int = 2 # ⭐ Spacing inside groupbox sections groupbox_margins: tuple = (5, 5, 5, 5) # ⭐ Margins inside groupbox (left, top, right, bottom) groupbox_margin_top: int = 5 # ⭐ QSS margin-top for QGroupBox groupbox_padding_top: int = 5 # ⭐ QSS padding-top for QGroupBox # Widget-level settings widget_fixed_height: int | None = None # None = auto, or set to fixed pixel height widget_padding: int = 5 # ⭐ WIDGET INTERNAL PADDING - controls height of input fields! row_fixed_height: int | None = None # ⭐ Fixed height for each parameter row (None = auto) # Button dimensions reset_button_width: int = 60 button_height: int = 32 # SSOT for all button heights
# Default compact configuration COMPACT_LAYOUT = ParameterFormLayoutConfig() # Alternative configurations for different use cases SPACIOUS_LAYOUT = ParameterFormLayoutConfig( main_layout_spacing=6, main_layout_margins=(8, 8, 8, 8), content_layout_spacing=4, content_layout_margins=(4, 4, 4, 4), parameter_row_spacing=8, optional_layout_spacing=4, reset_button_width=80 ) ULTRA_COMPACT_LAYOUT = ParameterFormLayoutConfig( # Slightly tighter than COMPACT_LAYOUT but not "zero everything". # This is tuned to feel close to the main-branch compact layout while # still being clearly more dense. main_layout_spacing=1, # Small spacing around entire form main_layout_margins=(2, 2, 2, 2), # Small outer margins # Vertical spacing between parameter rows: let row margins do most of # the work so we have a tiny but visible gap. content_layout_spacing=0, content_layout_margins=(1, 1, 1, 1), # Within a row, keep labels/fields/buttons comfortably separated, and # use small margins to avoid rows visually fusing together. parameter_row_spacing=2, parameter_row_margins=(1, 1, 1, 1), optional_layout_spacing=1, optional_layout_margins=(1, 1, 1, 1), # Group boxes should still read as distinct sections but with reduced # padding compared to the default compact layout. groupbox_spacing=1, groupbox_margins=(3, 3, 3, 3), groupbox_margin_top=3, groupbox_padding_top=3, # Make widgets shorter than COMPACT (padding=5) but not razor-thin. widget_fixed_height=None, widget_padding=3, reset_button_width=50 ) # Current active configuration - change this to switch layouts globally CURRENT_LAYOUT = COMPACT_LAYOUT