Coverage for src / ezqt_app / services / ui / registries.py: 96.36%

47 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-26 07:07 +0000

1# /////////////////////////////////////////////////////////////// 

2# SERVICES.UI.REGISTRIES - Qt font and size-policy registries 

3# Project: ezqt_app 

4# /////////////////////////////////////////////////////////////// 

5 

6"""Legacy Qt registries for fonts and size policies. 

7 

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""" 

13 

14from __future__ import annotations 

15 

16# /////////////////////////////////////////////////////////////// 

17# IMPORTS 

18# /////////////////////////////////////////////////////////////// 

19# Third-party imports 

20from PySide6.QtGui import QFont 

21from PySide6.QtWidgets import QSizePolicy 

22 

23# Local imports 

24from ...domain.models.ui import FontSpec, SizePolicySpec 

25from .component_factory import get_ui_component_factory 

26 

27 

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 

39 

40 

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 

49 

50 

51# /////////////////////////////////////////////////////////////// 

52# REGISTRIES 

53# /////////////////////////////////////////////////////////////// 

54class Fonts: 

55 """Font registry — populate by calling ``initFonts()`` at startup.""" 

56 

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 

63 

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() 

69 

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)) 

81 

82 

83class SizePolicy: 

84 """Size-policy registry — populate by calling ``initSizePolicy()`` at startup.""" 

85 

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 

90 

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() 

96 

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))