hspylib-clitt 0.9.116__py3-none-any.whl → 0.9.118__py3-none-any.whl

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.

Potentially problematic release.


This version of hspylib-clitt might be problematic. Click here for more details.

Files changed (360) hide show
  1. clitt/.version +1 -1
  2. clitt/__classpath__.py +2 -2
  3. clitt/__init__.py +3 -3
  4. clitt/__main__.py +3 -3
  5. clitt/addons/__init__.py +3 -3
  6. clitt/addons/appman/__init__.py +3 -3
  7. clitt/addons/appman/templates/__init__.py +3 -3
  8. clitt/addons/appman/templates/main_qt_view.py.tpl +1 -1
  9. clitt/addons/widman/__init__.py +3 -3
  10. clitt/addons/widman/widgets/__init__.py +3 -3
  11. clitt/core/__init__.py +3 -3
  12. clitt/core/exception/__init__.py +3 -3
  13. clitt/core/exception/exceptions.py +1 -0
  14. clitt/core/icons/__init__.py +3 -3
  15. clitt/core/icons/emojis/__init__.py +3 -3
  16. clitt/core/icons/font_awesome/__init__.py +3 -3
  17. clitt/core/term/__init__.py +3 -3
  18. clitt/core/term/commons.py +33 -8
  19. clitt/core/term/cursor.py +19 -4
  20. clitt/core/term/screen.py +16 -1
  21. clitt/core/term/terminal.py +16 -17
  22. clitt/core/tui/__init__.py +3 -3
  23. clitt/core/tui/line_input/__init__.py +3 -3
  24. clitt/core/tui/line_input/keyboard_input.py +36 -35
  25. clitt/core/tui/line_input/line_input.py +5 -17
  26. clitt/core/tui/mchoose/__init__.py +3 -3
  27. clitt/core/tui/mchoose/mchoose.py +2 -3
  28. clitt/core/tui/mchoose/menu_choose.py +6 -14
  29. clitt/core/tui/mdashboard/__init__.py +3 -3
  30. clitt/core/tui/mdashboard/menu_dashboard.py +2 -8
  31. clitt/core/tui/menu/__init__.py +3 -3
  32. clitt/core/tui/minput/__init__.py +3 -3
  33. clitt/core/tui/mselect/__init__.py +3 -3
  34. clitt/core/tui/mselect/menu_select.py +2 -3
  35. clitt/core/tui/table/__init__.py +3 -3
  36. clitt/core/tui/tui_application.py +8 -21
  37. clitt/core/tui/tui_component.py +4 -5
  38. clitt/core/tui/tui_preferences.py +1 -1
  39. clitt/utils/__init__.py +3 -3
  40. {hspylib_clitt-0.9.116.dist-info → hspylib_clitt-0.9.118.dist-info}/METADATA +2 -2
  41. hspylib_clitt-0.9.118.dist-info/RECORD +97 -0
  42. {hspylib_clitt-0.9.116.dist-info → hspylib_clitt-0.9.118.dist-info}/WHEEL +1 -1
  43. {hspylib_clitt-0.9.116.dist-info → hspylib_clitt-0.9.118.dist-info}/top_level.txt +0 -1
  44. build/lib/build/lib/build/lib/build/lib/clitt/__classpath__.py +0 -28
  45. build/lib/build/lib/build/lib/build/lib/clitt/__init__.py +0 -13
  46. build/lib/build/lib/build/lib/build/lib/clitt/__main__.py +0 -139
  47. build/lib/build/lib/build/lib/build/lib/clitt/addons/__init__.py +0 -12
  48. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +0 -13
  49. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman.py +0 -305
  50. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman_enums.py +0 -39
  51. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +0 -11
  52. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +0 -14
  53. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget.py +0 -70
  54. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget_entry.py +0 -54
  55. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +0 -14
  56. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +0 -110
  57. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +0 -246
  58. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +0 -272
  59. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +0 -146
  60. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widman.py +0 -123
  61. build/lib/build/lib/build/lib/build/lib/clitt/core/__init__.py +0 -15
  62. build/lib/build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +0 -11
  63. build/lib/build/lib/build/lib/build/lib/clitt/core/exception/exceptions.py +0 -18
  64. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +0 -12
  65. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +0 -12
  66. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/emojis.py +0 -41
  67. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +0 -40
  68. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +0 -18
  69. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +0 -55
  70. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +0 -76
  71. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +0 -93
  72. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +0 -69
  73. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +0 -59
  74. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +0 -42
  75. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +0 -39
  76. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +0 -37
  77. build/lib/build/lib/build/lib/build/lib/clitt/core/preferences.py +0 -87
  78. build/lib/build/lib/build/lib/build/lib/clitt/core/term/__init__.py +0 -14
  79. build/lib/build/lib/build/lib/build/lib/clitt/core/term/commons.py +0 -82
  80. build/lib/build/lib/build/lib/build/lib/clitt/core/term/cursor.py +0 -159
  81. build/lib/build/lib/build/lib/build/lib/clitt/core/term/screen.py +0 -91
  82. build/lib/build/lib/build/lib/build/lib/clitt/core/term/terminal.py +0 -203
  83. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +0 -20
  84. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +0 -12
  85. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +0 -228
  86. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/line_input.py +0 -43
  87. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +0 -12
  88. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +0 -44
  89. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +0 -200
  90. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +0 -14
  91. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +0 -54
  92. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +0 -31
  93. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +0 -26
  94. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +0 -154
  95. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +0 -16
  96. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +0 -111
  97. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +0 -47
  98. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +0 -117
  99. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +0 -196
  100. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +0 -98
  101. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +0 -57
  102. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +0 -19
  103. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/access_type.py +0 -26
  104. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/field_builder.py +0 -117
  105. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_builder.py +0 -72
  106. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_field.py +0 -180
  107. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_type.py +0 -30
  108. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_validator.py +0 -98
  109. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/menu_input.py +0 -292
  110. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput.py +0 -44
  111. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +0 -156
  112. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +0 -12
  113. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +0 -171
  114. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/mselect.py +0 -36
  115. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +0 -12
  116. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_enums.py +0 -47
  117. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_renderer.py +0 -339
  118. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_application.py +0 -65
  119. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_component.py +0 -155
  120. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_preferences.py +0 -103
  121. build/lib/build/lib/build/lib/build/lib/clitt/utils/__init__.py +0 -11
  122. build/lib/build/lib/build/lib/build/lib/clitt/utils/git_utils.py +0 -66
  123. build/lib/build/lib/build/lib/clitt/__classpath__.py +0 -28
  124. build/lib/build/lib/build/lib/clitt/__init__.py +0 -13
  125. build/lib/build/lib/build/lib/clitt/__main__.py +0 -139
  126. build/lib/build/lib/build/lib/clitt/addons/__init__.py +0 -12
  127. build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +0 -13
  128. build/lib/build/lib/build/lib/clitt/addons/appman/appman.py +0 -305
  129. build/lib/build/lib/build/lib/clitt/addons/appman/appman_enums.py +0 -39
  130. build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +0 -11
  131. build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +0 -14
  132. build/lib/build/lib/build/lib/clitt/addons/widman/widget.py +0 -70
  133. build/lib/build/lib/build/lib/clitt/addons/widman/widget_entry.py +0 -54
  134. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +0 -14
  135. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +0 -110
  136. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +0 -246
  137. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +0 -272
  138. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +0 -146
  139. build/lib/build/lib/build/lib/clitt/addons/widman/widman.py +0 -123
  140. build/lib/build/lib/build/lib/clitt/core/__init__.py +0 -15
  141. build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +0 -11
  142. build/lib/build/lib/build/lib/clitt/core/exception/exceptions.py +0 -18
  143. build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +0 -12
  144. build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +0 -12
  145. build/lib/build/lib/build/lib/clitt/core/icons/emojis/emojis.py +0 -41
  146. build/lib/build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +0 -40
  147. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +0 -18
  148. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +0 -55
  149. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +0 -76
  150. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +0 -93
  151. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +0 -69
  152. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +0 -59
  153. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +0 -42
  154. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +0 -39
  155. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +0 -37
  156. build/lib/build/lib/build/lib/clitt/core/preferences.py +0 -87
  157. build/lib/build/lib/build/lib/clitt/core/term/__init__.py +0 -14
  158. build/lib/build/lib/build/lib/clitt/core/term/commons.py +0 -82
  159. build/lib/build/lib/build/lib/clitt/core/term/cursor.py +0 -159
  160. build/lib/build/lib/build/lib/clitt/core/term/screen.py +0 -91
  161. build/lib/build/lib/build/lib/clitt/core/term/terminal.py +0 -203
  162. build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +0 -20
  163. build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +0 -12
  164. build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +0 -228
  165. build/lib/build/lib/build/lib/clitt/core/tui/line_input/line_input.py +0 -43
  166. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +0 -12
  167. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +0 -44
  168. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +0 -200
  169. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +0 -14
  170. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +0 -54
  171. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +0 -31
  172. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +0 -26
  173. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +0 -154
  174. build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +0 -16
  175. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +0 -111
  176. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +0 -47
  177. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +0 -117
  178. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +0 -196
  179. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +0 -98
  180. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +0 -57
  181. build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +0 -19
  182. build/lib/build/lib/build/lib/clitt/core/tui/minput/access_type.py +0 -26
  183. build/lib/build/lib/build/lib/clitt/core/tui/minput/field_builder.py +0 -117
  184. build/lib/build/lib/build/lib/clitt/core/tui/minput/form_builder.py +0 -72
  185. build/lib/build/lib/build/lib/clitt/core/tui/minput/form_field.py +0 -180
  186. build/lib/build/lib/build/lib/clitt/core/tui/minput/input_type.py +0 -30
  187. build/lib/build/lib/build/lib/clitt/core/tui/minput/input_validator.py +0 -98
  188. build/lib/build/lib/build/lib/clitt/core/tui/minput/menu_input.py +0 -292
  189. build/lib/build/lib/build/lib/clitt/core/tui/minput/minput.py +0 -44
  190. build/lib/build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +0 -156
  191. build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +0 -12
  192. build/lib/build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +0 -171
  193. build/lib/build/lib/build/lib/clitt/core/tui/mselect/mselect.py +0 -36
  194. build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +0 -12
  195. build/lib/build/lib/build/lib/clitt/core/tui/table/table_enums.py +0 -47
  196. build/lib/build/lib/build/lib/clitt/core/tui/table/table_renderer.py +0 -339
  197. build/lib/build/lib/build/lib/clitt/core/tui/tui_application.py +0 -65
  198. build/lib/build/lib/build/lib/clitt/core/tui/tui_component.py +0 -155
  199. build/lib/build/lib/build/lib/clitt/core/tui/tui_preferences.py +0 -103
  200. build/lib/build/lib/build/lib/clitt/utils/__init__.py +0 -11
  201. build/lib/build/lib/build/lib/clitt/utils/git_utils.py +0 -66
  202. build/lib/build/lib/clitt/__classpath__.py +0 -28
  203. build/lib/build/lib/clitt/__init__.py +0 -13
  204. build/lib/build/lib/clitt/__main__.py +0 -139
  205. build/lib/build/lib/clitt/addons/__init__.py +0 -12
  206. build/lib/build/lib/clitt/addons/appman/__init__.py +0 -13
  207. build/lib/build/lib/clitt/addons/appman/appman.py +0 -305
  208. build/lib/build/lib/clitt/addons/appman/appman_enums.py +0 -39
  209. build/lib/build/lib/clitt/addons/appman/templates/__init__.py +0 -11
  210. build/lib/build/lib/clitt/addons/widman/__init__.py +0 -14
  211. build/lib/build/lib/clitt/addons/widman/widget.py +0 -70
  212. build/lib/build/lib/clitt/addons/widman/widget_entry.py +0 -54
  213. build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +0 -14
  214. build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +0 -110
  215. build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +0 -246
  216. build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +0 -272
  217. build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +0 -146
  218. build/lib/build/lib/clitt/addons/widman/widman.py +0 -123
  219. build/lib/build/lib/clitt/core/__init__.py +0 -15
  220. build/lib/build/lib/clitt/core/exception/__init__.py +0 -11
  221. build/lib/build/lib/clitt/core/exception/exceptions.py +0 -18
  222. build/lib/build/lib/clitt/core/icons/__init__.py +0 -12
  223. build/lib/build/lib/clitt/core/icons/emojis/__init__.py +0 -12
  224. build/lib/build/lib/clitt/core/icons/emojis/emojis.py +0 -41
  225. build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +0 -40
  226. build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +0 -18
  227. build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +0 -55
  228. build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +0 -76
  229. build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +0 -93
  230. build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +0 -69
  231. build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +0 -59
  232. build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +0 -42
  233. build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +0 -39
  234. build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +0 -37
  235. build/lib/build/lib/clitt/core/preferences.py +0 -87
  236. build/lib/build/lib/clitt/core/term/__init__.py +0 -14
  237. build/lib/build/lib/clitt/core/term/commons.py +0 -82
  238. build/lib/build/lib/clitt/core/term/cursor.py +0 -159
  239. build/lib/build/lib/clitt/core/term/screen.py +0 -91
  240. build/lib/build/lib/clitt/core/term/terminal.py +0 -203
  241. build/lib/build/lib/clitt/core/tui/__init__.py +0 -20
  242. build/lib/build/lib/clitt/core/tui/line_input/__init__.py +0 -12
  243. build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +0 -228
  244. build/lib/build/lib/clitt/core/tui/line_input/line_input.py +0 -43
  245. build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +0 -12
  246. build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +0 -44
  247. build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +0 -200
  248. build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +0 -14
  249. build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +0 -54
  250. build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +0 -31
  251. build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +0 -26
  252. build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +0 -154
  253. build/lib/build/lib/clitt/core/tui/menu/__init__.py +0 -16
  254. build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +0 -111
  255. build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +0 -47
  256. build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +0 -117
  257. build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +0 -196
  258. build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +0 -98
  259. build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +0 -57
  260. build/lib/build/lib/clitt/core/tui/minput/__init__.py +0 -19
  261. build/lib/build/lib/clitt/core/tui/minput/access_type.py +0 -26
  262. build/lib/build/lib/clitt/core/tui/minput/field_builder.py +0 -117
  263. build/lib/build/lib/clitt/core/tui/minput/form_builder.py +0 -72
  264. build/lib/build/lib/clitt/core/tui/minput/form_field.py +0 -180
  265. build/lib/build/lib/clitt/core/tui/minput/input_type.py +0 -30
  266. build/lib/build/lib/clitt/core/tui/minput/input_validator.py +0 -98
  267. build/lib/build/lib/clitt/core/tui/minput/menu_input.py +0 -292
  268. build/lib/build/lib/clitt/core/tui/minput/minput.py +0 -44
  269. build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +0 -156
  270. build/lib/build/lib/clitt/core/tui/mselect/__init__.py +0 -12
  271. build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +0 -171
  272. build/lib/build/lib/clitt/core/tui/mselect/mselect.py +0 -36
  273. build/lib/build/lib/clitt/core/tui/table/__init__.py +0 -12
  274. build/lib/build/lib/clitt/core/tui/table/table_enums.py +0 -47
  275. build/lib/build/lib/clitt/core/tui/table/table_renderer.py +0 -339
  276. build/lib/build/lib/clitt/core/tui/tui_application.py +0 -65
  277. build/lib/build/lib/clitt/core/tui/tui_component.py +0 -155
  278. build/lib/build/lib/clitt/core/tui/tui_preferences.py +0 -103
  279. build/lib/build/lib/clitt/utils/__init__.py +0 -11
  280. build/lib/build/lib/clitt/utils/git_utils.py +0 -66
  281. build/lib/clitt/__classpath__.py +0 -28
  282. build/lib/clitt/__init__.py +0 -13
  283. build/lib/clitt/__main__.py +0 -139
  284. build/lib/clitt/addons/__init__.py +0 -12
  285. build/lib/clitt/addons/appman/__init__.py +0 -13
  286. build/lib/clitt/addons/appman/appman.py +0 -305
  287. build/lib/clitt/addons/appman/appman_enums.py +0 -39
  288. build/lib/clitt/addons/appman/templates/__init__.py +0 -11
  289. build/lib/clitt/addons/widman/__init__.py +0 -14
  290. build/lib/clitt/addons/widman/widget.py +0 -70
  291. build/lib/clitt/addons/widman/widget_entry.py +0 -54
  292. build/lib/clitt/addons/widman/widgets/__init__.py +0 -14
  293. build/lib/clitt/addons/widman/widgets/widget_free.py +0 -110
  294. build/lib/clitt/addons/widman/widgets/widget_punch.py +0 -246
  295. build/lib/clitt/addons/widman/widgets/widget_send_msg.py +0 -272
  296. build/lib/clitt/addons/widman/widgets/widget_time_calc.py +0 -146
  297. build/lib/clitt/addons/widman/widman.py +0 -123
  298. build/lib/clitt/core/__init__.py +0 -15
  299. build/lib/clitt/core/exception/__init__.py +0 -11
  300. build/lib/clitt/core/exception/exceptions.py +0 -18
  301. build/lib/clitt/core/icons/__init__.py +0 -12
  302. build/lib/clitt/core/icons/emojis/__init__.py +0 -12
  303. build/lib/clitt/core/icons/emojis/emojis.py +0 -41
  304. build/lib/clitt/core/icons/emojis/face_smiling.py +0 -40
  305. build/lib/clitt/core/icons/font_awesome/__init__.py +0 -18
  306. build/lib/clitt/core/icons/font_awesome/app_icons.py +0 -55
  307. build/lib/clitt/core/icons/font_awesome/awesome.py +0 -76
  308. build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +0 -93
  309. build/lib/clitt/core/icons/font_awesome/form_icons.py +0 -69
  310. build/lib/clitt/core/icons/font_awesome/game_icons.py +0 -59
  311. build/lib/clitt/core/icons/font_awesome/nav_icons.py +0 -42
  312. build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +0 -39
  313. build/lib/clitt/core/icons/font_awesome/widget_icons.py +0 -37
  314. build/lib/clitt/core/preferences.py +0 -87
  315. build/lib/clitt/core/term/__init__.py +0 -14
  316. build/lib/clitt/core/term/commons.py +0 -82
  317. build/lib/clitt/core/term/cursor.py +0 -159
  318. build/lib/clitt/core/term/screen.py +0 -91
  319. build/lib/clitt/core/term/terminal.py +0 -203
  320. build/lib/clitt/core/tui/__init__.py +0 -20
  321. build/lib/clitt/core/tui/line_input/__init__.py +0 -12
  322. build/lib/clitt/core/tui/line_input/keyboard_input.py +0 -228
  323. build/lib/clitt/core/tui/line_input/line_input.py +0 -43
  324. build/lib/clitt/core/tui/mchoose/__init__.py +0 -12
  325. build/lib/clitt/core/tui/mchoose/mchoose.py +0 -44
  326. build/lib/clitt/core/tui/mchoose/menu_choose.py +0 -200
  327. build/lib/clitt/core/tui/mdashboard/__init__.py +0 -14
  328. build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +0 -54
  329. build/lib/clitt/core/tui/mdashboard/dashboard_item.py +0 -31
  330. build/lib/clitt/core/tui/mdashboard/mdashboard.py +0 -26
  331. build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +0 -154
  332. build/lib/clitt/core/tui/menu/__init__.py +0 -16
  333. build/lib/clitt/core/tui/menu/tui_menu.py +0 -111
  334. build/lib/clitt/core/tui/menu/tui_menu_action.py +0 -47
  335. build/lib/clitt/core/tui/menu/tui_menu_factory.py +0 -117
  336. build/lib/clitt/core/tui/menu/tui_menu_item.py +0 -196
  337. build/lib/clitt/core/tui/menu/tui_menu_ui.py +0 -98
  338. build/lib/clitt/core/tui/menu/tui_menu_view.py +0 -57
  339. build/lib/clitt/core/tui/minput/__init__.py +0 -19
  340. build/lib/clitt/core/tui/minput/access_type.py +0 -26
  341. build/lib/clitt/core/tui/minput/field_builder.py +0 -117
  342. build/lib/clitt/core/tui/minput/form_builder.py +0 -72
  343. build/lib/clitt/core/tui/minput/form_field.py +0 -180
  344. build/lib/clitt/core/tui/minput/input_type.py +0 -30
  345. build/lib/clitt/core/tui/minput/input_validator.py +0 -98
  346. build/lib/clitt/core/tui/minput/menu_input.py +0 -292
  347. build/lib/clitt/core/tui/minput/minput.py +0 -44
  348. build/lib/clitt/core/tui/minput/minput_utils.py +0 -156
  349. build/lib/clitt/core/tui/mselect/__init__.py +0 -12
  350. build/lib/clitt/core/tui/mselect/menu_select.py +0 -171
  351. build/lib/clitt/core/tui/mselect/mselect.py +0 -36
  352. build/lib/clitt/core/tui/table/__init__.py +0 -12
  353. build/lib/clitt/core/tui/table/table_enums.py +0 -47
  354. build/lib/clitt/core/tui/table/table_renderer.py +0 -339
  355. build/lib/clitt/core/tui/tui_application.py +0 -65
  356. build/lib/clitt/core/tui/tui_component.py +0 -155
  357. build/lib/clitt/core/tui/tui_preferences.py +0 -103
  358. build/lib/clitt/utils/__init__.py +0 -11
  359. build/lib/clitt/utils/git_utils.py +0 -66
  360. hspylib_clitt-0.9.116.dist-info/RECORD +0 -413
@@ -1,339 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @project: HsPyLib
6
- @package: clitt.core.tui.table
7
- @file: table_renderer.py
8
- @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
10
- @site: https://github.com/yorevs/hspylib
11
- @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
-
13
- Copyright·(c)·2024,·HSPyLib
14
- """
15
- from clitt.core.term.screen import Screen
16
- from clitt.core.term.terminal import Terminal
17
- from clitt.core.tui.table.table_enums import TextAlignment, TextCase
18
- from clitt.core.tui.tui_preferences import TUIPreferences
19
- from functools import cached_property, partial, reduce
20
- from hspylib.core.preconditions import check_argument
21
- from hspylib.core.tools.commons import file_is_not_empty
22
- from hspylib.core.tools.text_tools import elide_text, ensure_endswith
23
- from operator import add
24
- from typing import Any, Callable, Iterable, List, Tuple, TypeAlias
25
-
26
- import csv
27
- import os
28
-
29
- # fmt: off
30
- AlignmentFn : TypeAlias = Callable[[str, int], str]
31
- TestCaseFn : TypeAlias = Callable[[str], str]
32
- # fmt: on
33
-
34
-
35
- class TableRenderer:
36
- """Utility class to render terminal UI tables."""
37
-
38
- DEFAULT_MINIMUM_CELL_SIZE = 6
39
-
40
- @staticmethod
41
- def import_csv(
42
- filepath: str, caption: str | None = None, has_headers: bool = True, delimiter: chr = ","
43
- ) -> "TableRenderer":
44
- """Render the table based on a CSV file."""
45
- check_argument(file_is_not_empty(filepath), f"File not found: {filepath}")
46
- headers, data = None, []
47
- with open(filepath, encoding="UTF8") as csv_file:
48
- csv_reader = csv.reader(csv_file, delimiter=delimiter)
49
- line_count = 0
50
- for row in csv_reader:
51
- line_count += 1
52
- if line_count == 1:
53
- if has_headers:
54
- headers = row
55
- continue
56
- headers = [f"C{idx}" for idx, _ in enumerate(row)]
57
- data.append(row)
58
- return TableRenderer(headers, data, caption)
59
-
60
- def __init__(self, headers: List[str], data: Iterable, caption: str | None = None):
61
- """
62
- :param headers: table headers to be displayed.
63
- :param data: table record set with the selected rows.
64
- :param caption: table caption to be displayed.
65
- """
66
-
67
- self._terminal: Terminal = Terminal.INSTANCE
68
- self._headers: List[str] = headers
69
- self._data: List[Any] = data if data else []
70
- self._caption: str = caption
71
- self._columns: range = range(self.columns)
72
- self._min_cell_size: int = self.DEFAULT_MINIMUM_CELL_SIZE
73
- self._header_alignment: TextAlignment = TextAlignment.CENTER
74
- self._cell_alignment: TextAlignment = TextAlignment.LEFT
75
- self._header_case: TextCase = TextCase.UPPER
76
- self._adjust_cells = None
77
-
78
- check_argument(self.columns >= 1, "Headers are required")
79
- self._cell_sizes = [0 for _ in range(self.columns)]
80
- self.adjust_cells_auto()
81
- if data:
82
- c_len = len(min(data, key=len))
83
- check_argument(
84
- c_len == self.columns, "Headers and Columns must have the same size: {} vs {}", c_len, self.columns
85
- )
86
- self._footer = f":: Displaying {c_len} of {c_len} records"
87
- else:
88
- self._footer = ":: No data to display"
89
-
90
- @property
91
- def terminal(self) -> Terminal:
92
- return self._terminal
93
-
94
- @property
95
- def screen(self) -> Screen:
96
- return self.terminal.screen
97
-
98
- @property
99
- def prefs(self) -> TUIPreferences:
100
- return self.screen.preferences
101
-
102
- @property
103
- def column_sizes(self) -> List[int]:
104
- return self._cell_sizes
105
-
106
- @cached_property
107
- def columns(self) -> int:
108
- return len(self.headers)
109
-
110
- @property
111
- def cell_alignment(self) -> AlignmentFn:
112
- return self._cell_alignment.val()
113
-
114
- @property
115
- def header_alignment(self) -> AlignmentFn:
116
- return self._header_alignment.val()
117
-
118
- @property
119
- def header_case(self) -> TestCaseFn:
120
- return self._header_case.val()
121
-
122
- @property
123
- def caption(self) -> str:
124
- return self._caption
125
-
126
- @property
127
- def footer(self) -> str:
128
- return self._footer
129
-
130
- @footer.setter
131
- def footer(self, other: str) -> None:
132
- self._footer = other
133
-
134
- @property
135
- def data(self) -> Iterable:
136
- return self._data
137
-
138
- @property
139
- def headers(self) -> List[str]:
140
- return self._headers
141
-
142
- def set_header_alignment(self, alignment: TextAlignment) -> None:
143
- """Set table headers alignment.
144
- :param alignment: table header text alignment function.
145
- :return None
146
- """
147
- self._header_alignment = alignment
148
-
149
- def set_header_case(self, test_case: TextCase) -> None:
150
- """Set table headers alignment.
151
- :param test_case: table header text case function.
152
- :return None
153
- """
154
- self._header_case = test_case
155
-
156
- def set_cell_alignment(self, alignment: TextAlignment) -> None:
157
- """Set table cell alignment.
158
- :param alignment: table cell text alignment function.
159
- :return None
160
- """
161
- self._cell_alignment = alignment
162
-
163
- def set_cell_sizes(self, sizes: Tuple[int, ...]) -> None:
164
- """Render table based on a list of fixed sizes.
165
- :param sizes: the list of specific cell sizes.
166
- :return None
167
- """
168
- max_cell_size = self.screen.columns if self._fits(sizes) else int(self.screen.columns / self.columns)
169
- for idx, size in enumerate(sizes[: self.columns]):
170
- self._cell_sizes[idx] = min(max_cell_size, max(self._min_cell_size, size))
171
-
172
- def set_min_cell_size(self, size: int) -> None:
173
- """Set the minimum length of a cell.
174
- :param size: minimum table cell size.
175
- :return None
176
- """
177
- self._min_cell_size = max(self.DEFAULT_MINIMUM_CELL_SIZE, size)
178
- self.set_cell_sizes(*(max(self._cell_sizes[idx], size) for idx, _ in enumerate(self.headers)))
179
-
180
- def adjust_cells_by_headers(self) -> None:
181
- """Adjust cell sizes based on the column header length.
182
- :return None
183
- """
184
- args = [max(self._min_cell_size, len(header)) for header in self.headers]
185
- self._adjust_cells = partial(self.set_cell_sizes, args)
186
-
187
- def adjust_cells_by_largest_header(self) -> None:
188
- """Adjust cell sizes based on the maximum length of a header.
189
- :return None
190
- """
191
- max_len = len(max(self.headers))
192
- args = [max(self._min_cell_size, max_len) for _ in self.headers]
193
- self._adjust_cells = partial(self.set_cell_sizes, args)
194
-
195
- def adjust_cells_by_largest_cell(self) -> None:
196
- """Adjust cell sizes based on the maximum length of a cell.
197
- :return None
198
- """
199
- max_len = 0
200
- for row in self.data:
201
- max_len = max(max_len, len(max(list(map(str, row)), key=len)))
202
- args = [max_len for _ in self.headers]
203
- self._adjust_cells = partial(self.set_cell_sizes, args)
204
-
205
- def adjust_cells_by_fixed_size(self, size: int) -> None:
206
- """Adjust cell sizes to a fixed size.
207
- :param size: the fixed cell size.
208
- :return None
209
- """
210
- args = [size for _ in self.headers]
211
- self._adjust_cells = partial(self.set_cell_sizes, args)
212
-
213
- def adjust_cells_to_fit_screen(self) -> None:
214
- """Adjust cell sizes accordingly to fill the screen size
215
- :return None
216
- """
217
- distributed_size = int(self.screen.columns / self.columns) - 3
218
- self.adjust_cells_by_fixed_size(distributed_size)
219
-
220
- def adjust_cells_auto(self) -> None:
221
- """Ensure all cells and headers are visible with the minimum size possible.
222
- :return None
223
- """
224
- if not self.data:
225
- self.adjust_cells_by_headers()
226
- else:
227
- sizes = self._cell_sizes
228
- for cell, c_size in zip(self.data, sizes):
229
- sizes = [
230
- max(len(self.headers[idx]), max(sizes[idx], max(c_size, len(str(cell[idx])))))
231
- for idx, _ in enumerate(self.headers)
232
- ]
233
- args = [size for size in sizes]
234
- self._adjust_cells = partial(self.set_cell_sizes, args)
235
-
236
- def render(self) -> None:
237
- """Render the table.
238
- :return None
239
- """
240
- self._adjust_cells()
241
- header_line, data_lines = self._format_header_row(), self._format_data_rows()
242
- table_line = "+" + "+".join(f"{'-' * (self._cell_sizes[idx] + 2)}" for idx in self._columns) + "+"
243
- self._render_table(table_line, header_line, data_lines)
244
-
245
- def export_csv(self, filepath: str, delimiter: chr = ",", has_headers: bool = True) -> None:
246
- """Export the table to CSV format.
247
- :return None
248
- """
249
- csv_file = ensure_endswith(filepath, ".csv")
250
- with open(csv_file, "w", encoding="UTF8") as csv_file:
251
- writer = csv.writer(csv_file, delimiter=delimiter)
252
- if has_headers:
253
- writer.writerow(self.headers)
254
- writer.writerows(self.data)
255
-
256
- def _format_header_row(self) -> str:
257
- """Format the table header using the defined preferences.
258
- :return the formatted header row.
259
- """
260
- header_cols = [self.header_alignment(self._header_text(idx), self._cell_sizes[idx]) for idx in self._columns]
261
- return f"| {' | '.join(header_cols)} |"
262
-
263
- def _format_data_rows(self) -> List[str]:
264
- """Format the table rows using the defined preferences.
265
- :return a list containing the formatted data rows.
266
- """
267
- # fmt: off
268
- return [
269
- "| " +
270
- ' | '.join(
271
- f"{self.cell_alignment(self._cell_text(row, column), self._cell_sizes[column])}"
272
- for column in self._columns
273
- ) +
274
- " |" for row in self.data
275
- ]
276
- # fmt: on
277
-
278
- def _display_data(self, data: Any, end: str = os.linesep) -> None:
279
- """Display data on the screen.
280
- :param data the data to be printed.
281
- :param end the terminating string.
282
- :return None
283
- """
284
- self.terminal.cursor.write(data, end)
285
-
286
- def _fits(self, sizes: Tuple[int, ...]) -> bool:
287
- """Return whether the expected table size fits the screen or not.
288
- :param sizes the expected sizes to check.
289
- :return True if the table fits the screen; False otherwise.
290
- """
291
- extra_len = 4 + ((self.columns - 1) * 3) # 4 for '| |' and 3 for each '-+-'
292
- exp_table_size = reduce(add, sizes) + extra_len
293
- return exp_table_size < self.screen.columns
294
-
295
- def _header_text(self, column: int) -> str:
296
- """Return a header for the specified column.
297
- :param column the specified table column.
298
- :return the header text at (row, column).
299
- """
300
- return self.header_case(elide_text(self.headers[column], self._cell_size(column)))
301
-
302
- def _cell_text(self, row: tuple, column: int) -> str:
303
- """Return a text for the specified cell (row, column).
304
- :param row the specified table row.
305
- :param column the specified table column.
306
- :return the cell text at (row, column).
307
- """
308
- return elide_text(str(row[column]), self._cell_size(column))
309
-
310
- def _cell_size(self, column: int) -> int:
311
- """Return the size of the specified column.
312
- :param column the specified table column.
313
- :return the cell size at (row, column).
314
- """
315
- return self._cell_sizes[column]
316
-
317
- def _render_table(self, table_line: str, header_line: str, data_rows: List[str]) -> None:
318
- """Renders the table data.
319
- :param table_line: a formatted line composed by all columns.
320
- :param header_line: a formatted line composed by the table header.
321
- :param data_rows: the formatted table data rows.
322
- :return None
323
- """
324
- magic_num = 4 # this is the length of the starting and ending characters: '| |'
325
- line_length, render_line = len(table_line) - magic_num, f"+{table_line[1:-1]}+"
326
- self._display_data("")
327
- if self.caption:
328
- border_line = render_line.replace("+", "-")
329
- self._display_data(border_line)
330
- self._display_data("| " + self.prefs.caption_color.placeholder, end="")
331
- self._display_data(f"{elide_text(self.caption, line_length): ^{line_length}}", end="")
332
- self._display_data("%NC%" + " |")
333
- self._display_data(render_line)
334
- self._display_data(header_line)
335
- self._display_data(render_line)
336
- self._display_data(os.linesep.join(data_rows) if data_rows else f"| {'<empty>': ^{line_length}} |")
337
- self._display_data(render_line)
338
- if self.footer:
339
- self._display_data(self.footer)
@@ -1,65 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @project: HsPyLib-Clitt
6
- @package: clitt.core.tui
7
- @file: tui_application.py
8
- @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
10
- @site: https://github.com/yorevs/hspylib
11
- @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
-
13
- Copyright·(c)·2024,·HSPyLib
14
- """
15
- from clitt.core.term.cursor import Cursor
16
- from clitt.core.term.screen import Screen
17
- from clitt.core.term.terminal import Terminal
18
- from hspylib.core.metaclass.singleton import AbstractSingleton
19
- from hspylib.modules.application.application import Application
20
- from hspylib.modules.application.exit_status import ExitStatus
21
- from hspylib.modules.application.version import Version
22
-
23
- import os
24
- import sys
25
-
26
-
27
- class TUIApplication(Application, metaclass=AbstractSingleton):
28
- """Terminal UI application base class."""
29
-
30
- def __init__(
31
- self,
32
- name: str | None,
33
- version: Version = Version.initial(),
34
- description: str = None,
35
- usage: str = None,
36
- epilog: str = None,
37
- resource_dir: str = None,
38
- log_dir: str = None,
39
- ):
40
- super().__init__(name, version, description, usage, epilog, resource_dir, log_dir)
41
- self._terminal = Terminal.INSTANCE
42
- self._app_name = os.path.basename(sys.argv[0]) if name is None else name
43
-
44
- @property
45
- def terminal(self) -> Terminal():
46
- return self._terminal
47
-
48
- @property
49
- def screen(self) -> Screen():
50
- return self.terminal.screen
51
-
52
- @property
53
- def cursor(self) -> Cursor:
54
- return self.terminal.cursor
55
-
56
- def _setup_arguments(self) -> None:
57
- pass
58
-
59
- def _main(self, *params, **kwargs) -> ExitStatus:
60
- pass
61
-
62
- def _cleanup(self) -> None:
63
- if self.screen.alternate and self._exit_code == ExitStatus.SUCCESS:
64
- self.screen.alternate = not self.screen.alternate
65
- self.terminal.restore()
@@ -1,155 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @project: HsPyLib-Clitt
6
- @package: clitt.core.tui
7
- @file: tui_component.py
8
- @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
10
- @site: https://github.com/yorevs/hspylib
11
- @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
-
13
- Copyright·(c)·2024,·HSPyLib
14
- """
15
- from abc import ABC, abstractmethod
16
- from hspylib.core.tools.text_tools import elide_text
17
- from hspylib.modules.cli.keyboard import Keyboard
18
- from typing import Any, List, Optional, TypeVar
19
-
20
- from clitt.core.icons.font_awesome.awesome import Awesome
21
- from clitt.core.term.commons import Direction
22
- from clitt.core.term.cursor import Cursor
23
- from clitt.core.term.screen import Screen
24
- from clitt.core.term.terminal import Terminal
25
- from clitt.core.tui.tui_preferences import TUIPreferences
26
-
27
- T = TypeVar("T", bound=Any)
28
-
29
-
30
- class TUIComponent(ABC):
31
- """Provide a base class for terminal UI components."""
32
-
33
- def __init__(self, title: str):
34
- self._re_render = True
35
- self._done = False
36
- self._title = title
37
- self._terminal = Terminal.INSTANCE
38
-
39
- @property
40
- def terminal(self) -> Terminal:
41
- return self._terminal
42
-
43
- @property
44
- def screen(self) -> Screen:
45
- return self.terminal.screen
46
-
47
- @property
48
- def cursor(self) -> Cursor:
49
- return self.terminal.screen.cursor
50
-
51
- @property
52
- def prefs(self) -> TUIPreferences:
53
- return self.screen.preferences
54
-
55
- @property
56
- def title(self) -> str:
57
- return self._title
58
-
59
- @property
60
- def rows(self) -> int:
61
- return self.screen.lines
62
-
63
- @property
64
- def columns(self) -> int:
65
- return self.screen.columns
66
-
67
- def _prepare_render(self, auto_wrap: bool = False, show_cursor: bool = False) -> None:
68
- """Prepare the screen for renderization."""
69
- self.screen.add_watcher(self.invalidate)
70
- Terminal.set_auto_wrap(auto_wrap)
71
- Terminal.set_show_cursor(show_cursor)
72
- self.screen.clear()
73
- self.cursor.save()
74
-
75
- def _loop(self, break_keys: List[Keyboard] = None) -> Keyboard:
76
- """Loop and wait for a keypress. Render the component if required."""
77
-
78
- break_keys = break_keys or Keyboard.break_keys()
79
- keypress = Keyboard.VK_NONE
80
-
81
- # Wait for user interaction
82
- while not self._done and keypress not in break_keys:
83
-
84
- # Menu Renderization
85
- if self._re_render:
86
- self.render()
87
- # Navigation input
88
- keypress = self.handle_keypress()
89
-
90
- self.cursor.end()
91
- self.cursor.erase(Direction.DOWN)
92
- self.cursor.reset_mode()
93
- self.cursor.writeln('\n')
94
-
95
- return keypress
96
-
97
- def draw_line(self, line_fmt: str, *args: Any) -> None:
98
- """Draws a formatted component line respecting the specified max_columns.
99
- :param line_fmt: the line format.
100
- :param args: the format arguments.
101
- """
102
- self.writeln(elide_text(line_fmt.format(*args), self.columns) + "%NC%")
103
-
104
- def draw_navbar(self, navbar: str) -> None:
105
- """Draws the component navigation bar respecting the specified max_columns.
106
- :param navbar: the component's navigation bar.
107
- """
108
- self.write(navbar)
109
-
110
- def draw_selector(self, is_selected: bool = False, has_bg_color: bool = True) -> Awesome:
111
- """Draws and highlight the selected component line.
112
- :param is_selected: whether to set a selected foreground color or not.
113
- :param has_bg_color: whether to set a background or not.
114
- """
115
- prefs = TUIPreferences.INSTANCE
116
- if is_selected:
117
- selector = prefs.selected_icon
118
- if has_bg_color:
119
- self.write(prefs.sel_bg_color.code)
120
- self.write(prefs.highlight_color.code)
121
- else:
122
- selector = prefs.unselected_icon
123
- self.write(prefs.text_color.code)
124
-
125
- return selector
126
-
127
- def write(self, obj: Any) -> None:
128
- """Write the string representation of the object to the screen."""
129
- self.terminal.echo(obj, end="")
130
-
131
- def writeln(self, obj: Any) -> None:
132
- """Write the string representation of the object to the screen, appending a new line."""
133
- self.terminal.echo(obj)
134
-
135
- def invalidate(self) -> None:
136
- """Invalidate current TUI renderization."""
137
- self.screen.clear()
138
- self.cursor.save()
139
- self.render()
140
-
141
- @abstractmethod
142
- def execute(self) -> Optional[T | List[T]]:
143
- """Execute the main TUI component flow."""
144
-
145
- @abstractmethod
146
- def render(self) -> None:
147
- """Renders the TUI component."""
148
-
149
- @abstractmethod
150
- def navbar(self, **kwargs) -> str:
151
- """Get the TUI component's navigation bar (optional)."""
152
-
153
- @abstractmethod
154
- def handle_keypress(self) -> Keyboard:
155
- """Handle a keyboard press."""
@@ -1,103 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @project: HsPyLib-Clitt
6
- @package: clitt.core.tui
7
- @file: tui_preferences.py
8
- @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
10
- @site: https://github.com/yorevs/hspylib
11
- @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
-
13
- Copyright·(c)·2024,·HSPyLib
14
- """
15
-
16
- from clitt.core.icons.font_awesome.form_icons import FormIcons
17
- from clitt.core.icons.font_awesome.nav_icons import Awesome, NavIcons
18
- from clitt.core.preferences import Preferences
19
- from hspylib.modules.cli.vt100.vt_color import VtColor
20
-
21
-
22
- class TUIPreferences(Preferences):
23
- """Terminal UI Preferences class."""
24
-
25
- INSTANCE = None
26
-
27
- def __init__(self):
28
- super().__init__("hhs.clitt")
29
-
30
- @property
31
- def max_rows(self) -> int:
32
- return max(3, self.get_preference("max.rows", 10))
33
-
34
- @property
35
- def items_per_line(self) -> int:
36
- return max(2, self.get_preference("items.per.line", 6))
37
-
38
- @property
39
- def title_line_length(self) -> int:
40
- return max(15, self.get_preference("title.line.len", 30))
41
-
42
- @property
43
- def title_color(self) -> VtColor:
44
- return self.get_preference("title.color", VtColor.ORANGE)
45
-
46
- @property
47
- def caption_color(self) -> VtColor:
48
- return self.get_preference("caption.color", VtColor.WHITE)
49
-
50
- @property
51
- def text_color(self) -> VtColor:
52
- return self.get_preference("text.color", VtColor.WHITE)
53
-
54
- @property
55
- def success_color(self) -> VtColor:
56
- return self.get_preference("success.color", VtColor.GREEN)
57
-
58
- @property
59
- def warning_color(self) -> VtColor:
60
- return self.get_preference("warning.color", VtColor.YELLOW)
61
-
62
- @property
63
- def error_color(self) -> VtColor:
64
- return self.get_preference("error.color", VtColor.RED)
65
-
66
- @property
67
- def highlight_color(self) -> VtColor:
68
- return self.get_preference("highlight.color", VtColor.CYAN)
69
-
70
- @property
71
- def navbar_color(self) -> VtColor:
72
- return self.get_preference("navbar.color", VtColor.YELLOW)
73
-
74
- @property
75
- def tooltip_color(self) -> VtColor:
76
- return self.get_preference("tooltip.color", VtColor.GREEN)
77
-
78
- @property
79
- def breadcrumb_color(self) -> VtColor:
80
- return self.get_preference("breadcrumb.color", VtColor.compose(VtColor.BG_BLUE, VtColor.WHITE))
81
-
82
- @property
83
- def sel_bg_color(self) -> VtColor:
84
- return self.get_preference("sel.bg.color", VtColor.BLUE)
85
-
86
- @property
87
- def selected_icon(self) -> Awesome:
88
- return self.get_preference("selected.icon", NavIcons.POINTER)
89
-
90
- @property
91
- def unselected_icon(self) -> Awesome:
92
- return self.get_preference("unselected.icon", Awesome.no_icon())
93
-
94
- @property
95
- def checked_icon(self) -> Awesome:
96
- return self.get_preference("checked.icon", FormIcons.MARKED)
97
-
98
- @property
99
- def unchecked_icon(self) -> Awesome:
100
- return self.get_preference("unchecked.icon", FormIcons.UNMARKED)
101
-
102
-
103
- assert TUIPreferences().INSTANCE is not None, "Failed to create TUIPreferences instance"
@@ -1,11 +0,0 @@
1
- # _*_ coding: utf-8 _*_
2
- #
3
- # hspylib-clitt v0.9.116
4
- #
5
- # Package: main.build.lib.build.lib.clitt.utils
6
- """Package initialization."""
7
-
8
- __all__ = [
9
- 'git_utils'
10
- ]
11
- __version__ = '0.9.116'