codeallyadvanced 3.0.0__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. {codeallyadvanced-3.0.0/src/codeallyadvanced.egg-info → codeallyadvanced-3.1.0}/PKG-INFO +25 -9
  2. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/README.md +24 -8
  3. codeallyadvanced-3.1.0/src/codeallyadvanced/_version.py +1 -0
  4. codeallyadvanced-3.1.0/src/codeallyadvanced/ui/widgets/NamedSpinCtrl.py +156 -0
  5. codeallyadvanced-3.1.0/src/codeallyadvanced/ui/widgets/TitledPanel.py +82 -0
  6. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0/src/codeallyadvanced.egg-info}/PKG-INFO +25 -9
  7. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced.egg-info/SOURCES.txt +2 -0
  8. codeallyadvanced-3.0.0/src/codeallyadvanced/_version.py +0 -1
  9. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/LICENSE +0 -0
  10. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/pyproject.toml +0 -0
  11. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/setup.cfg +0 -0
  12. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/__init__.py +0 -0
  13. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/py.typed +0 -0
  14. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/__init__.py +0 -0
  15. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/DefaultPreferences.py +0 -0
  16. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/__init__.py +0 -0
  17. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/__init__.py +0 -0
  18. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxActor.py +0 -0
  19. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxArrow.py +0 -0
  20. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxClass.py +0 -0
  21. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxNewClassDiagram.py +0 -0
  22. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxNewProject.py +0 -0
  23. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxNewSequenceDiagram.py +0 -0
  24. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxNewUseCaseDiagram.py +0 -0
  25. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxNote.py +0 -0
  26. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxOpenFile.py +0 -0
  27. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRedo.py +0 -0
  28. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipAggregation.py +0 -0
  29. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipAssociation.py +0 -0
  30. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipComposition.py +0 -0
  31. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipInheritance.py +0 -0
  32. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipNote.py +0 -0
  33. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxRelationshipRealization.py +0 -0
  34. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxSaveDiagram.py +0 -0
  35. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxSequenceDiagramInstance.py +0 -0
  36. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxSequenceDiagramMessage.py +0 -0
  37. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxText.py +0 -0
  38. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxUndo.py +0 -0
  39. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxUseCase.py +0 -0
  40. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxZoomIn.py +0 -0
  41. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/ImgToolboxZoomOut.py +0 -0
  42. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/UmlLollipop.py +0 -0
  43. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/UmlNote.py +0 -0
  44. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/UmlText.py +0 -0
  45. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/__init__.py +0 -0
  46. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded16/py.typed +0 -0
  47. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxActor.py +0 -0
  48. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxArrow.py +0 -0
  49. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxClass.py +0 -0
  50. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxNewClassDiagram.py +0 -0
  51. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxNewProject.py +0 -0
  52. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxNewSequenceDiagram.py +0 -0
  53. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxNewUseCaseDiagram.py +0 -0
  54. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxNote.py +0 -0
  55. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxOpenFile.py +0 -0
  56. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRedo.py +0 -0
  57. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipAggregation.py +0 -0
  58. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipAssociation.py +0 -0
  59. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipComposition.py +0 -0
  60. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipInheritance.py +0 -0
  61. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipNote.py +0 -0
  62. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxRelationshipRealization.py +0 -0
  63. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxSaveDiagram.py +0 -0
  64. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxSequenceDiagramInstance.py +0 -0
  65. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxSequenceDiagramMessage.py +0 -0
  66. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxText.py +0 -0
  67. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxUndo.py +0 -0
  68. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxUseCase.py +0 -0
  69. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxZoomIn.py +0 -0
  70. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/ImgToolboxZoomOut.py +0 -0
  71. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/UmlLollipop.py +0 -0
  72. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/UmlNote.py +0 -0
  73. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/UmlText.py +0 -0
  74. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/__init__.py +0 -0
  75. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/embedded32/py.typed +0 -0
  76. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/icons/sourceimages/__init__.py +0 -0
  77. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/images/py.typed +0 -0
  78. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/Embedded16.py +0 -0
  79. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/Embedded24.py +0 -0
  80. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/Embedded32.py +0 -0
  81. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/Embedded48.py +0 -0
  82. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/Embedded64.py +0 -0
  83. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/__init__.py +0 -0
  84. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/minimalistglyph/py.typed +0 -0
  85. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/MageBitMap.py +0 -0
  86. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/__init__.py +0 -0
  87. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/back16.py +0 -0
  88. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/back64.py +0 -0
  89. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/cancel16.py +0 -0
  90. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/cancel64.py +0 -0
  91. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/next16.py +0 -0
  92. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/next64.py +0 -0
  93. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/mystic/py.typed +0 -0
  94. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/Embedded16.py +0 -0
  95. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/Embedded24.py +0 -0
  96. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/Embedded32.py +0 -0
  97. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/Embedded48.py +0 -0
  98. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/Embedded64.py +0 -0
  99. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/__init__.py +0 -0
  100. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neoindustrialminimalist/py.typed +0 -0
  101. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/Embedded16.py +0 -0
  102. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/Embedded24.py +0 -0
  103. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/Embedded32.py +0 -0
  104. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/Embedded48.py +0 -0
  105. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/Embedded64.py +0 -0
  106. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/__init__.py +0 -0
  107. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/neumorphic/py.typed +0 -0
  108. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/resources/py.typed +0 -0
  109. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/AttachmentSide.py +0 -0
  110. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/Common.py +0 -0
  111. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/UnitTestBaseW.py +0 -0
  112. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/__init__.py +0 -0
  113. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/mystic/Mystic.py +0 -0
  114. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/mystic/MysticPanel.py +0 -0
  115. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/mystic/MysticStepBase.py +0 -0
  116. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/mystic/__init__.py +0 -0
  117. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/mystic/py.typed +0 -0
  118. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/py.typed +0 -0
  119. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DialControl.py +0 -0
  120. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DialSelector.py +0 -0
  121. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DimensionsControl.py +0 -0
  122. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DirectionEnum.py +0 -0
  123. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DirectorySelector.py +0 -0
  124. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/DualSpinnerControl.py +0 -0
  125. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/MacDialSelector.py +0 -0
  126. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/MinMaxControl.py +0 -0
  127. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/PositionControl.py +0 -0
  128. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/__init__.py +0 -0
  129. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced/ui/widgets/py.typed +0 -0
  130. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced.egg-info/dependency_links.txt +0 -0
  131. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced.egg-info/requires.txt +0 -0
  132. {codeallyadvanced-3.0.0 → codeallyadvanced-3.1.0}/src/codeallyadvanced.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeallyadvanced
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: Humberto`s Common wxPython UI Stuff
5
5
  Author-email: "Humberto A. Sanchez II" <Humberto.A.Sanchez.II@gmail.com>
6
6
  Maintainer-email: "Humberto A. Sanchez II" <Humberto.A.Sanchez.II@gmail.com>
@@ -38,33 +38,49 @@ Dynamic: license-file
38
38
  [![PyPI version](https://badge.fury.io/py/codeallyadvanced.svg)](https://badge.fury.io/py/codeallyadvanced)
39
39
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)
40
40
  [![Made with Python](https://img.shields.io/badge/Made%20with-Python-3776AB?logo=python&logoColor=white)](https://www.python.org/)
41
+ [![Documentation Status](https://readthedocs.org/projects/code-ally-advanced/badge/?version=latest)](https://code-ally-advanced.readthedocs.io/en/latest/?badge=latest)
41
42
  [![GitHub Copilot: No](https://img.shields.io/badge/GitHub_Copilot-No-red?logo=github&style=flat-square)](https://github.com/hasii2011/code-ally-basic/wiki/GitHub-Copilot)
42
43
 
43
- Host common UI artifacts for various projects I am developing
44
+ This repository hosts common UI artifacts for various projects I develop.
45
+
46
+ The documentation is on [Read the Docs](https://code-ally-advanced.readthedocs.io/en/latest/).
44
47
 
45
48
  ___
46
- Common wxPython UI artifacts for various projects I am developing
49
+ Available wxPython UI components:
47
50
 
48
51
  * Dimensions Control
49
52
  * Position Control
50
53
  * MinMax Control
54
+ * Named Spin Control
51
55
  * Directory Selector
56
+ * Dial Selector
57
+ * Titled Panels
58
+
59
+ ### Component Previews
60
+
61
+ * Spinner Widgets
52
62
 
53
- ![SpinnerWidgets](./developer/SpinnerWidgets.png)
63
+ ![SpinnerWidgets](./developer/SpinnerWidgets.png)
64
+
65
+ * Directory Selector
54
66
 
55
- * DialSelector
67
+ ![DirectorySelector](./developer/DirectorySelector.png)
68
+
69
+ * Dial Selector
56
70
 
57
71
  ![DialSelector](./developer/DialSelector.png)
58
72
 
59
- Written by <a href="mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2025
73
+ * Titled Panels
74
+
75
+ ![TitledPanels](./developer/TitledPanels.png)
76
+
77
+ Written by <a href="mailto:humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2026
60
78
 
61
79
  ## Note
62
80
  For all kinds of problems, requests, enhancements, bug reports, etc., drop me an e-mail.
63
81
 
64
82
  ## Developer Notes
65
- This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds
66
-
67
- Also notice that this project does not include a `requirements.txt` file. All dependencies are listed in the `pyproject.toml` file.
83
+ This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds.
68
84
 
69
85
  #### Install the main project dependencies
70
86
 
@@ -3,33 +3,49 @@
3
3
  [![PyPI version](https://badge.fury.io/py/codeallyadvanced.svg)](https://badge.fury.io/py/codeallyadvanced)
4
4
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)
5
5
  [![Made with Python](https://img.shields.io/badge/Made%20with-Python-3776AB?logo=python&logoColor=white)](https://www.python.org/)
6
+ [![Documentation Status](https://readthedocs.org/projects/code-ally-advanced/badge/?version=latest)](https://code-ally-advanced.readthedocs.io/en/latest/?badge=latest)
6
7
  [![GitHub Copilot: No](https://img.shields.io/badge/GitHub_Copilot-No-red?logo=github&style=flat-square)](https://github.com/hasii2011/code-ally-basic/wiki/GitHub-Copilot)
7
8
 
8
- Host common UI artifacts for various projects I am developing
9
+ This repository hosts common UI artifacts for various projects I develop.
10
+
11
+ The documentation is on [Read the Docs](https://code-ally-advanced.readthedocs.io/en/latest/).
9
12
 
10
13
  ___
11
- Common wxPython UI artifacts for various projects I am developing
14
+ Available wxPython UI components:
12
15
 
13
16
  * Dimensions Control
14
17
  * Position Control
15
18
  * MinMax Control
19
+ * Named Spin Control
16
20
  * Directory Selector
21
+ * Dial Selector
22
+ * Titled Panels
23
+
24
+ ### Component Previews
25
+
26
+ * Spinner Widgets
17
27
 
18
- ![SpinnerWidgets](./developer/SpinnerWidgets.png)
28
+ ![SpinnerWidgets](./developer/SpinnerWidgets.png)
29
+
30
+ * Directory Selector
19
31
 
20
- * DialSelector
32
+ ![DirectorySelector](./developer/DirectorySelector.png)
33
+
34
+ * Dial Selector
21
35
 
22
36
  ![DialSelector](./developer/DialSelector.png)
23
37
 
24
- Written by <a href="mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2025
38
+ * Titled Panels
39
+
40
+ ![TitledPanels](./developer/TitledPanels.png)
41
+
42
+ Written by <a href="mailto:humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2026
25
43
 
26
44
  ## Note
27
45
  For all kinds of problems, requests, enhancements, bug reports, etc., drop me an e-mail.
28
46
 
29
47
  ## Developer Notes
30
- This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds
31
-
32
- Also notice that this project does not include a `requirements.txt` file. All dependencies are listed in the `pyproject.toml` file.
48
+ This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds.
33
49
 
34
50
  #### Install the main project dependencies
35
51
 
@@ -0,0 +1 @@
1
+ __version__: str = '3.1.0'
@@ -0,0 +1,156 @@
1
+
2
+ """
3
+ A composite wxPython numeric spin control paired with a descriptive text label.
4
+
5
+ This module provides :class:`NamedSpinCtrl`, a self-contained component that wraps
6
+ a :class:`wx.SpinCtrl` and an associated :class:`wx.StaticText` title,
7
+ configured via :class:`NamedSpinControlDescription`.
8
+ """
9
+
10
+ from typing import Callable
11
+
12
+ from logging import Logger
13
+ from logging import getLogger
14
+
15
+ from enum import StrEnum
16
+
17
+ from dataclasses import dataclass
18
+
19
+ from wx import ID_ANY
20
+ from wx import EVT_SPINCTRL
21
+ from wx import SP_ARROW_KEYS
22
+
23
+ from wx import Size
24
+ from wx import SpinCtrl
25
+ from wx import SpinEvent
26
+ from wx import StaticText
27
+
28
+ from wx.lib.sized_controls import SizedPanel
29
+
30
+ NSC_CALLBACK_PARAMETER_TYPE = str | int
31
+ """
32
+ Allowable return types delivered to callbacks upon value changes.
33
+ """
34
+
35
+ NSCValueChangedCallback = Callable[[NSC_CALLBACK_PARAMETER_TYPE], None]
36
+ """
37
+ Type alias for value-change notification listener functions.
38
+ """
39
+
40
+
41
+ class NSCValueType(StrEnum):
42
+ """
43
+ Specifies the data type delivered to listeners on value change events.
44
+
45
+ Attributes:
46
+ STRING: Value is emitted as a formatted string.
47
+ INT: Value is emitted as a raw integer.
48
+ """
49
+ STRING = 'String'
50
+ INT = 'Int'
51
+
52
+
53
+ @dataclass
54
+ class NamedSpinControlDescription:
55
+ """
56
+ Configuration specification for constructing a :class:`NamedSpinCtrl`.
57
+
58
+ Attributes:
59
+ label: Descriptive caption displayed above the spin control.
60
+ controlSize: Preferred pixel dimensions for the inner :class:`wx.SpinCtrl`.
61
+ minValue: Minimum permissible numeric value in the range.
62
+ maxValue: Maximum permissible numeric value in the range.
63
+ valueType: Enumeration designating whether events emit integers or strings.
64
+ valueChangedCallback: Listener invoked whenever the spin control value changes.
65
+ """
66
+ label: str
67
+ controlSize: Size
68
+ minValue: int
69
+ maxValue: int
70
+ valueType: NSCValueType
71
+ valueChangedCallback: NSCValueChangedCallback
72
+
73
+ class NamedSpinCtrl(SizedPanel):
74
+ """
75
+ An opinionated vertical compound widget combining a label with a spin control.
76
+
77
+ Lays out a :class:`wx.StaticText` header directly above a :class:`wx.SpinCtrl`
78
+ within a vertical :class:`wx.lib.sized_controls.SizedPanel`. Notifies registered
79
+ callbacks with type-converted values when modified via arrow buttons or keyboard.
80
+ """
81
+
82
+ def __init__(self, parent: SizedPanel, description: NamedSpinControlDescription):
83
+ """
84
+ Initialize the NamedSpinCtrl composite widget.
85
+
86
+ Args:
87
+ parent: Parent sized container hosting this control.
88
+ description: Configuration parameters specifying bounds, sizing, label, and callback.
89
+ """
90
+ self.logger: Logger = getLogger(__name__)
91
+
92
+ super().__init__(parent=parent)
93
+
94
+ self.SetSizerType('vertical')
95
+
96
+ self._staticText: StaticText = StaticText(self, ID_ANY, description.label)
97
+
98
+ spinCtrl: SpinCtrl = SpinCtrl(self, id=ID_ANY, size=description.controlSize, style=SP_ARROW_KEYS)
99
+ spinCtrl.SetRange(description.minValue, description.maxValue)
100
+
101
+ self._spinCtrl: SpinCtrl = spinCtrl
102
+ self._valueType: NSCValueType = description.valueType
103
+
104
+ self._valueChangedCallback: NSCValueChangedCallback = description.valueChangedCallback
105
+
106
+ parent.Bind(EVT_SPINCTRL, self._onValueChanged, self._spinCtrl)
107
+
108
+ def _setToolTip(self, tip: str):
109
+ """
110
+ Assign a tooltip string to the underlying spin control widget.
111
+
112
+ Args:
113
+ tip: The explanatory text displayed when the mouse pointer hovers over the spin control.
114
+ """
115
+ self._spinCtrl.SetToolTip(tip)
116
+
117
+ # noinspection PyPropertyDefinition
118
+ # noinspection PyTypeChecker
119
+ toolTip = property(fget=None, fset=_setToolTip, fdel=None, doc="""Write only property to set tooltip on spin control""")
120
+
121
+ @property
122
+ def value(self) -> int:
123
+ """
124
+ Retrieve the spin control's current integer value.
125
+
126
+ Returns:
127
+ The currently displayed numeric value.
128
+ """
129
+ return self._spinCtrl.GetValue()
130
+
131
+ @value.setter
132
+ def value(self, newValue: int):
133
+ """
134
+ Set the spin control's numeric value.
135
+
136
+ Args:
137
+ newValue: The new integer value.
138
+ """
139
+ self._spinCtrl.SetValue(newValue)
140
+
141
+ def _onValueChanged(self, event: SpinEvent):
142
+ """
143
+ Handle EVT_SPINCTRL change events from the underlying SpinCtrl.
144
+
145
+ Extracts the value in the configured format (:attr:`NSCValueType.INT` or
146
+ :attr:`NSCValueType.STRING`) and invokes the registered change callback.
147
+
148
+ Args:
149
+ event: The wxPython spin control event instance.
150
+ """
151
+ if self._valueType == NSCValueType.INT:
152
+ newInterval: NSC_CALLBACK_PARAMETER_TYPE = event.GetInt()
153
+ else:
154
+ newInterval = event.GetString()
155
+
156
+ self._valueChangedCallback(newInterval)
@@ -0,0 +1,82 @@
1
+ """
2
+ A lightweight titled container panel for grouping related wxPython controls.
3
+
4
+ This module provides :class:`TitledPanel`, a drop-in visual alternative to
5
+ :class:`wx.lib.sized_controls.SizedStaticBox` that groups child widgets under a
6
+ prominent :class:`wx.StaticText` title label without rendering a heavy macOS Aqua
7
+ gray background plates or nested borders.
8
+ """
9
+
10
+ from enum import StrEnum
11
+
12
+ from wx import ID_ANY
13
+
14
+ from wx import Window
15
+ from wx import StaticText
16
+
17
+ from wx.lib.sized_controls import SizedPanel
18
+
19
+
20
+ class PanelLayoutType(StrEnum):
21
+ """
22
+ This defines Sizer layout orientation styles supported by :class:`TitledPanel`.
23
+
24
+ Attributes:
25
+ HORIZONTAL: Arranges child controls in a single horizontal row.
26
+ VERTICAL: Arranges child controls in a single vertical column below the header.
27
+ FORM: Arranges controls into a two-column label-and-field form grid.
28
+ GRID: Arranges controls into a multi-column, multi-row table grid.
29
+ """
30
+ HORIZONTAL = 'horizontal'
31
+ VERTICAL = 'vertical'
32
+ FORM = 'form'
33
+ GRID = 'grid'
34
+
35
+
36
+ class TitledPanel(SizedPanel):
37
+ """
38
+ A titled grouping panel built on :class:`wx.lib.sized_controls.SizedPanel`.
39
+
40
+ Serves as an uncluttered alternative to :class:`wx.StaticBox` and
41
+ :class:`wx.lib.sized_controls.SizedStaticBox`. It automatically injects
42
+ a :class:`wx.StaticText` header label at the top of the container while
43
+ applying the requested :class:`PanelLayoutType` sizer. Any child controls
44
+ instantiated with ``parent=titledPanel`` are positioned cleanly beneath the title.
45
+ """
46
+
47
+ def __init__(self, parent: Window, titleLabel: str, layoutType: PanelLayoutType = PanelLayoutType.VERTICAL):
48
+ """
49
+ Initialize the TitledPanel with a title header and sizer layout.
50
+
51
+ Args:
52
+ parent: The parent window or container hosting this panel.
53
+ titleLabel: The title string displayed at the top of the panel.
54
+ layoutType: Sizer layout orientation (:attr:`PanelLayoutType.VERTICAL`,
55
+ :attr:`PanelLayoutType.HORIZONTAL`, :attr:`PanelLayoutType.FORM`,
56
+ or :attr:`PanelLayoutType.GRID`). Defaults to :attr:`PanelLayoutType.VERTICAL`.
57
+ """
58
+ super().__init__(parent)
59
+ self.SetSizerType(layoutType.value)
60
+ if self.GetParent() and self.GetParent().GetSizer():
61
+ self.SetSizerProps(expand=False)
62
+ self._titleLabel: StaticText = StaticText(self, ID_ANY, titleLabel)
63
+
64
+ @property
65
+ def label(self) -> str:
66
+ """
67
+ Retrieve the current title text displayed on the header label.
68
+
69
+ Returns:
70
+ The current title string.
71
+ """
72
+ return self._titleLabel.GetLabel()
73
+
74
+ @label.setter
75
+ def label(self, newLabel: str):
76
+ """
77
+ Update the title text displayed on the header label.
78
+
79
+ Args:
80
+ newLabel: The new header text to display.
81
+ """
82
+ self._titleLabel.SetLabel(newLabel)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeallyadvanced
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: Humberto`s Common wxPython UI Stuff
5
5
  Author-email: "Humberto A. Sanchez II" <Humberto.A.Sanchez.II@gmail.com>
6
6
  Maintainer-email: "Humberto A. Sanchez II" <Humberto.A.Sanchez.II@gmail.com>
@@ -38,33 +38,49 @@ Dynamic: license-file
38
38
  [![PyPI version](https://badge.fury.io/py/codeallyadvanced.svg)](https://badge.fury.io/py/codeallyadvanced)
39
39
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)
40
40
  [![Made with Python](https://img.shields.io/badge/Made%20with-Python-3776AB?logo=python&logoColor=white)](https://www.python.org/)
41
+ [![Documentation Status](https://readthedocs.org/projects/code-ally-advanced/badge/?version=latest)](https://code-ally-advanced.readthedocs.io/en/latest/?badge=latest)
41
42
  [![GitHub Copilot: No](https://img.shields.io/badge/GitHub_Copilot-No-red?logo=github&style=flat-square)](https://github.com/hasii2011/code-ally-basic/wiki/GitHub-Copilot)
42
43
 
43
- Host common UI artifacts for various projects I am developing
44
+ This repository hosts common UI artifacts for various projects I develop.
45
+
46
+ The documentation is on [Read the Docs](https://code-ally-advanced.readthedocs.io/en/latest/).
44
47
 
45
48
  ___
46
- Common wxPython UI artifacts for various projects I am developing
49
+ Available wxPython UI components:
47
50
 
48
51
  * Dimensions Control
49
52
  * Position Control
50
53
  * MinMax Control
54
+ * Named Spin Control
51
55
  * Directory Selector
56
+ * Dial Selector
57
+ * Titled Panels
58
+
59
+ ### Component Previews
60
+
61
+ * Spinner Widgets
52
62
 
53
- ![SpinnerWidgets](./developer/SpinnerWidgets.png)
63
+ ![SpinnerWidgets](./developer/SpinnerWidgets.png)
64
+
65
+ * Directory Selector
54
66
 
55
- * DialSelector
67
+ ![DirectorySelector](./developer/DirectorySelector.png)
68
+
69
+ * Dial Selector
56
70
 
57
71
  ![DialSelector](./developer/DialSelector.png)
58
72
 
59
- Written by <a href="mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2025
73
+ * Titled Panels
74
+
75
+ ![TitledPanels](./developer/TitledPanels.png)
76
+
77
+ Written by <a href="mailto:humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2026
60
78
 
61
79
  ## Note
62
80
  For all kinds of problems, requests, enhancements, bug reports, etc., drop me an e-mail.
63
81
 
64
82
  ## Developer Notes
65
- This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds
66
-
67
- Also notice that this project does not include a `requirements.txt` file. All dependencies are listed in the `pyproject.toml` file.
83
+ This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds.
68
84
 
69
85
  #### Install the main project dependencies
70
86
 
@@ -122,6 +122,8 @@ src/codeallyadvanced/ui/widgets/DirectorySelector.py
122
122
  src/codeallyadvanced/ui/widgets/DualSpinnerControl.py
123
123
  src/codeallyadvanced/ui/widgets/MacDialSelector.py
124
124
  src/codeallyadvanced/ui/widgets/MinMaxControl.py
125
+ src/codeallyadvanced/ui/widgets/NamedSpinCtrl.py
125
126
  src/codeallyadvanced/ui/widgets/PositionControl.py
127
+ src/codeallyadvanced/ui/widgets/TitledPanel.py
126
128
  src/codeallyadvanced/ui/widgets/__init__.py
127
129
  src/codeallyadvanced/ui/widgets/py.typed
@@ -1 +0,0 @@
1
- __version__: str = '3.0.0'