Coverage for src / ezqt_app / services / ui / registries.py: 96.36%
47 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-06 13:12 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-06 13:12 +0000
1# ///////////////////////////////////////////////////////////////
2# SERVICES.UI.REGISTRIES - Qt font and size-policy registries
3# Project: ezqt_app
4# ///////////////////////////////////////////////////////////////
6"""Legacy Qt registries for fonts and size policies.
8These classes materialise ``FontSpec`` / ``SizePolicySpec`` domain objects
9into live Qt objects and expose them as class-level attributes for use by
10widget code. They are populated by calling ``initFonts()`` /
11``initSizePolicy()`` once during application startup.
12"""
14from __future__ import annotations
16# ///////////////////////////////////////////////////////////////
17# IMPORTS
18# ///////////////////////////////////////////////////////////////
19# Third-party imports
20from PySide6.QtGui import QFont
21from PySide6.QtWidgets import QSizePolicy
23# Local imports
24from ...domain.models.ui import FontSpec, SizePolicySpec
25from .component_factory import get_ui_component_factory
28# ///////////////////////////////////////////////////////////////
29# HELPERS
30# ///////////////////////////////////////////////////////////////
31def _spec_to_qfont(spec: FontSpec) -> QFont:
32 """Convert a ``FontSpec`` domain object to a ``QFont`` instance."""
33 font = QFont()
34 font.setFamily(spec.family)
35 font.setPointSize(spec.point_size)
36 font.setBold(spec.bold)
37 font.setItalic(spec.italic)
38 return font
41def _spec_to_qsize_policy(spec: SizePolicySpec) -> QSizePolicy:
42 """Convert a ``SizePolicySpec`` domain object to a ``QSizePolicy`` instance."""
43 h_policy = getattr(QSizePolicy.Policy, spec.horizontal_policy)
44 v_policy = getattr(QSizePolicy.Policy, spec.vertical_policy)
45 size_policy = QSizePolicy(h_policy, v_policy)
46 size_policy.setHorizontalStretch(spec.horizontal_stretch)
47 size_policy.setVerticalStretch(spec.vertical_stretch)
48 return size_policy
51# ///////////////////////////////////////////////////////////////
52# REGISTRIES
53# ///////////////////////////////////////////////////////////////
54class Fonts:
55 """Font registry — populate by calling ``initFonts()`` at startup."""
57 SEGOE_UI_8_REG: QFont | None = None
58 SEGOE_UI_10_REG: QFont | None = None
59 SEGOE_UI_12_REG: QFont | None = None
60 SEGOE_UI_8_SB: QFont | None = None
61 SEGOE_UI_10_SB: QFont | None = None
62 SEGOE_UI_12_SB: QFont | None = None
64 @classmethod
65 def initFonts(cls) -> None:
66 """Initialise font constants from the UI component factory."""
67 factory = get_ui_component_factory()
68 factory.initialize()
70 for attr_name in (
71 "SEGOE_UI_8_REG",
72 "SEGOE_UI_10_REG",
73 "SEGOE_UI_12_REG",
74 "SEGOE_UI_8_SB",
75 "SEGOE_UI_10_SB",
76 "SEGOE_UI_12_SB",
77 ):
78 spec = factory.get_font(attr_name)
79 if spec is not None: 79 ↛ 70line 79 didn't jump to line 70 because the condition on line 79 was always true
80 setattr(cls, attr_name, _spec_to_qfont(spec))
83class SizePolicy:
84 """Size-policy registry — populate by calling ``initSizePolicy()`` at startup."""
86 H_EXPANDING_V_FIXED: QSizePolicy | None = None
87 H_EXPANDING_V_PREFERRED: QSizePolicy | None = None
88 H_PREFERRED_V_EXPANDING: QSizePolicy | None = None
89 H_EXPANDING_V_EXPANDING: QSizePolicy | None = None
91 @classmethod
92 def initSizePolicy(cls) -> None:
93 """Initialise size-policy constants from the UI component factory."""
94 factory = get_ui_component_factory()
95 factory.initialize()
97 for attr_name in (
98 "H_EXPANDING_V_FIXED",
99 "H_EXPANDING_V_PREFERRED",
100 "H_PREFERRED_V_EXPANDING",
101 "H_EXPANDING_V_EXPANDING",
102 ):
103 spec = factory.get_size_policy(attr_name)
104 if spec is not None: 104 ↛ 97line 104 didn't jump to line 97 because the condition on line 104 was always true
105 setattr(cls, attr_name, _spec_to_qsize_policy(spec))