hspylib-clitt 0.9.117__py3-none-any.whl → 0.9.119__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 (356) hide show
  1. build/lib/build/lib/build/lib/build/lib/clitt/__classpath__.py +28 -0
  2. build/lib/build/lib/build/lib/build/lib/clitt/__init__.py +13 -0
  3. build/lib/build/lib/build/lib/build/lib/clitt/__main__.py +139 -0
  4. build/lib/build/lib/build/lib/build/lib/clitt/addons/__init__.py +12 -0
  5. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +13 -0
  6. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman.py +305 -0
  7. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman_enums.py +39 -0
  8. build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +11 -0
  9. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +14 -0
  10. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget.py +70 -0
  11. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget_entry.py +54 -0
  12. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +14 -0
  13. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +110 -0
  14. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +246 -0
  15. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +272 -0
  16. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +146 -0
  17. build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widman.py +123 -0
  18. build/lib/build/lib/build/lib/build/lib/clitt/core/__init__.py +15 -0
  19. build/lib/build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +11 -0
  20. build/lib/build/lib/build/lib/build/lib/clitt/core/exception/exceptions.py +19 -0
  21. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +12 -0
  22. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +12 -0
  23. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/emojis.py +41 -0
  24. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +40 -0
  25. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +18 -0
  26. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +55 -0
  27. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +76 -0
  28. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +93 -0
  29. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +69 -0
  30. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +59 -0
  31. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +42 -0
  32. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +39 -0
  33. build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +37 -0
  34. build/lib/build/lib/build/lib/build/lib/clitt/core/preferences.py +87 -0
  35. build/lib/build/lib/build/lib/build/lib/clitt/core/term/__init__.py +14 -0
  36. build/lib/build/lib/build/lib/build/lib/clitt/core/term/commons.py +106 -0
  37. build/lib/build/lib/build/lib/build/lib/clitt/core/term/cursor.py +174 -0
  38. build/lib/build/lib/build/lib/build/lib/clitt/core/term/screen.py +106 -0
  39. build/lib/build/lib/build/lib/build/lib/clitt/core/term/terminal.py +202 -0
  40. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +20 -0
  41. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +12 -0
  42. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +229 -0
  43. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/line_input.py +31 -0
  44. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +12 -0
  45. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +43 -0
  46. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +192 -0
  47. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +14 -0
  48. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +54 -0
  49. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +31 -0
  50. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +26 -0
  51. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +148 -0
  52. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +16 -0
  53. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +111 -0
  54. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +47 -0
  55. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +117 -0
  56. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +196 -0
  57. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +98 -0
  58. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +57 -0
  59. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +19 -0
  60. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/access_type.py +26 -0
  61. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/field_builder.py +117 -0
  62. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_builder.py +72 -0
  63. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_field.py +180 -0
  64. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_type.py +30 -0
  65. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_validator.py +98 -0
  66. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/menu_input.py +292 -0
  67. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput.py +44 -0
  68. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +156 -0
  69. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +12 -0
  70. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +170 -0
  71. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/mselect.py +36 -0
  72. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +12 -0
  73. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_enums.py +47 -0
  74. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_renderer.py +339 -0
  75. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_application.py +52 -0
  76. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_component.py +154 -0
  77. build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_preferences.py +103 -0
  78. build/lib/build/lib/build/lib/build/lib/clitt/utils/__init__.py +11 -0
  79. build/lib/build/lib/build/lib/build/lib/clitt/utils/git_utils.py +66 -0
  80. build/lib/build/lib/build/lib/clitt/__classpath__.py +28 -0
  81. build/lib/build/lib/build/lib/clitt/__init__.py +13 -0
  82. build/lib/build/lib/build/lib/clitt/__main__.py +139 -0
  83. build/lib/build/lib/build/lib/clitt/addons/__init__.py +12 -0
  84. build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +13 -0
  85. build/lib/build/lib/build/lib/clitt/addons/appman/appman.py +305 -0
  86. build/lib/build/lib/build/lib/clitt/addons/appman/appman_enums.py +39 -0
  87. build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +11 -0
  88. build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +14 -0
  89. build/lib/build/lib/build/lib/clitt/addons/widman/widget.py +70 -0
  90. build/lib/build/lib/build/lib/clitt/addons/widman/widget_entry.py +54 -0
  91. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +14 -0
  92. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +110 -0
  93. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +246 -0
  94. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +272 -0
  95. build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +146 -0
  96. build/lib/build/lib/build/lib/clitt/addons/widman/widman.py +123 -0
  97. build/lib/build/lib/build/lib/clitt/core/__init__.py +15 -0
  98. build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +11 -0
  99. build/lib/build/lib/build/lib/clitt/core/exception/exceptions.py +19 -0
  100. build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +12 -0
  101. build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +12 -0
  102. build/lib/build/lib/build/lib/clitt/core/icons/emojis/emojis.py +41 -0
  103. build/lib/build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +40 -0
  104. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +18 -0
  105. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +55 -0
  106. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +76 -0
  107. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +93 -0
  108. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +69 -0
  109. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +59 -0
  110. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +42 -0
  111. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +39 -0
  112. build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +37 -0
  113. build/lib/build/lib/build/lib/clitt/core/preferences.py +87 -0
  114. build/lib/build/lib/build/lib/clitt/core/term/__init__.py +14 -0
  115. build/lib/build/lib/build/lib/clitt/core/term/commons.py +106 -0
  116. build/lib/build/lib/build/lib/clitt/core/term/cursor.py +174 -0
  117. build/lib/build/lib/build/lib/clitt/core/term/screen.py +106 -0
  118. build/lib/build/lib/build/lib/clitt/core/term/terminal.py +202 -0
  119. build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +20 -0
  120. build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +12 -0
  121. build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +229 -0
  122. build/lib/build/lib/build/lib/clitt/core/tui/line_input/line_input.py +31 -0
  123. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +12 -0
  124. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +43 -0
  125. build/lib/build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +192 -0
  126. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +14 -0
  127. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +54 -0
  128. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +31 -0
  129. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +26 -0
  130. build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +148 -0
  131. build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +16 -0
  132. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +111 -0
  133. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +47 -0
  134. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +117 -0
  135. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +196 -0
  136. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +98 -0
  137. build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +57 -0
  138. build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +19 -0
  139. build/lib/build/lib/build/lib/clitt/core/tui/minput/access_type.py +26 -0
  140. build/lib/build/lib/build/lib/clitt/core/tui/minput/field_builder.py +117 -0
  141. build/lib/build/lib/build/lib/clitt/core/tui/minput/form_builder.py +72 -0
  142. build/lib/build/lib/build/lib/clitt/core/tui/minput/form_field.py +180 -0
  143. build/lib/build/lib/build/lib/clitt/core/tui/minput/input_type.py +30 -0
  144. build/lib/build/lib/build/lib/clitt/core/tui/minput/input_validator.py +98 -0
  145. build/lib/build/lib/build/lib/clitt/core/tui/minput/menu_input.py +292 -0
  146. build/lib/build/lib/build/lib/clitt/core/tui/minput/minput.py +44 -0
  147. build/lib/build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +156 -0
  148. build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +12 -0
  149. build/lib/build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +170 -0
  150. build/lib/build/lib/build/lib/clitt/core/tui/mselect/mselect.py +36 -0
  151. build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +12 -0
  152. build/lib/build/lib/build/lib/clitt/core/tui/table/table_enums.py +47 -0
  153. build/lib/build/lib/build/lib/clitt/core/tui/table/table_renderer.py +339 -0
  154. build/lib/build/lib/build/lib/clitt/core/tui/tui_application.py +52 -0
  155. build/lib/build/lib/build/lib/clitt/core/tui/tui_component.py +154 -0
  156. build/lib/build/lib/build/lib/clitt/core/tui/tui_preferences.py +103 -0
  157. build/lib/build/lib/build/lib/clitt/utils/__init__.py +11 -0
  158. build/lib/build/lib/build/lib/clitt/utils/git_utils.py +66 -0
  159. build/lib/build/lib/clitt/__classpath__.py +28 -0
  160. build/lib/build/lib/clitt/__init__.py +13 -0
  161. build/lib/build/lib/clitt/__main__.py +139 -0
  162. build/lib/build/lib/clitt/addons/__init__.py +12 -0
  163. build/lib/build/lib/clitt/addons/appman/__init__.py +13 -0
  164. build/lib/build/lib/clitt/addons/appman/appman.py +305 -0
  165. build/lib/build/lib/clitt/addons/appman/appman_enums.py +39 -0
  166. build/lib/build/lib/clitt/addons/appman/templates/__init__.py +11 -0
  167. build/lib/build/lib/clitt/addons/widman/__init__.py +14 -0
  168. build/lib/build/lib/clitt/addons/widman/widget.py +70 -0
  169. build/lib/build/lib/clitt/addons/widman/widget_entry.py +54 -0
  170. build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +14 -0
  171. build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +110 -0
  172. build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +246 -0
  173. build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +272 -0
  174. build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +146 -0
  175. build/lib/build/lib/clitt/addons/widman/widman.py +123 -0
  176. build/lib/build/lib/clitt/core/__init__.py +15 -0
  177. build/lib/build/lib/clitt/core/exception/__init__.py +11 -0
  178. build/lib/build/lib/clitt/core/exception/exceptions.py +19 -0
  179. build/lib/build/lib/clitt/core/icons/__init__.py +12 -0
  180. build/lib/build/lib/clitt/core/icons/emojis/__init__.py +12 -0
  181. build/lib/build/lib/clitt/core/icons/emojis/emojis.py +41 -0
  182. build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +40 -0
  183. build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +18 -0
  184. build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +55 -0
  185. build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +76 -0
  186. build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +93 -0
  187. build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +69 -0
  188. build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +59 -0
  189. build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +42 -0
  190. build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +39 -0
  191. build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +37 -0
  192. build/lib/build/lib/clitt/core/preferences.py +87 -0
  193. build/lib/build/lib/clitt/core/term/__init__.py +14 -0
  194. build/lib/build/lib/clitt/core/term/commons.py +106 -0
  195. build/lib/build/lib/clitt/core/term/cursor.py +174 -0
  196. build/lib/build/lib/clitt/core/term/screen.py +106 -0
  197. build/lib/build/lib/clitt/core/term/terminal.py +202 -0
  198. build/lib/build/lib/clitt/core/tui/__init__.py +20 -0
  199. build/lib/build/lib/clitt/core/tui/line_input/__init__.py +12 -0
  200. build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +229 -0
  201. build/lib/build/lib/clitt/core/tui/line_input/line_input.py +31 -0
  202. build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +12 -0
  203. build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +43 -0
  204. build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +192 -0
  205. build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +14 -0
  206. build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +54 -0
  207. build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +31 -0
  208. build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +26 -0
  209. build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +148 -0
  210. build/lib/build/lib/clitt/core/tui/menu/__init__.py +16 -0
  211. build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +111 -0
  212. build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +47 -0
  213. build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +117 -0
  214. build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +196 -0
  215. build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +98 -0
  216. build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +57 -0
  217. build/lib/build/lib/clitt/core/tui/minput/__init__.py +19 -0
  218. build/lib/build/lib/clitt/core/tui/minput/access_type.py +26 -0
  219. build/lib/build/lib/clitt/core/tui/minput/field_builder.py +117 -0
  220. build/lib/build/lib/clitt/core/tui/minput/form_builder.py +72 -0
  221. build/lib/build/lib/clitt/core/tui/minput/form_field.py +180 -0
  222. build/lib/build/lib/clitt/core/tui/minput/input_type.py +30 -0
  223. build/lib/build/lib/clitt/core/tui/minput/input_validator.py +98 -0
  224. build/lib/build/lib/clitt/core/tui/minput/menu_input.py +292 -0
  225. build/lib/build/lib/clitt/core/tui/minput/minput.py +44 -0
  226. build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +156 -0
  227. build/lib/build/lib/clitt/core/tui/mselect/__init__.py +12 -0
  228. build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +170 -0
  229. build/lib/build/lib/clitt/core/tui/mselect/mselect.py +36 -0
  230. build/lib/build/lib/clitt/core/tui/table/__init__.py +12 -0
  231. build/lib/build/lib/clitt/core/tui/table/table_enums.py +47 -0
  232. build/lib/build/lib/clitt/core/tui/table/table_renderer.py +339 -0
  233. build/lib/build/lib/clitt/core/tui/tui_application.py +52 -0
  234. build/lib/build/lib/clitt/core/tui/tui_component.py +154 -0
  235. build/lib/build/lib/clitt/core/tui/tui_preferences.py +103 -0
  236. build/lib/build/lib/clitt/utils/__init__.py +11 -0
  237. build/lib/build/lib/clitt/utils/git_utils.py +66 -0
  238. build/lib/clitt/__classpath__.py +28 -0
  239. build/lib/clitt/__init__.py +13 -0
  240. build/lib/clitt/__main__.py +139 -0
  241. build/lib/clitt/addons/__init__.py +12 -0
  242. build/lib/clitt/addons/appman/__init__.py +13 -0
  243. build/lib/clitt/addons/appman/appman.py +305 -0
  244. build/lib/clitt/addons/appman/appman_enums.py +39 -0
  245. build/lib/clitt/addons/appman/templates/__init__.py +11 -0
  246. build/lib/clitt/addons/widman/__init__.py +14 -0
  247. build/lib/clitt/addons/widman/widget.py +70 -0
  248. build/lib/clitt/addons/widman/widget_entry.py +54 -0
  249. build/lib/clitt/addons/widman/widgets/__init__.py +14 -0
  250. build/lib/clitt/addons/widman/widgets/widget_free.py +110 -0
  251. build/lib/clitt/addons/widman/widgets/widget_punch.py +246 -0
  252. build/lib/clitt/addons/widman/widgets/widget_send_msg.py +272 -0
  253. build/lib/clitt/addons/widman/widgets/widget_time_calc.py +146 -0
  254. build/lib/clitt/addons/widman/widman.py +123 -0
  255. build/lib/clitt/core/__init__.py +15 -0
  256. build/lib/clitt/core/exception/__init__.py +11 -0
  257. build/lib/clitt/core/exception/exceptions.py +19 -0
  258. build/lib/clitt/core/icons/__init__.py +12 -0
  259. build/lib/clitt/core/icons/emojis/__init__.py +12 -0
  260. build/lib/clitt/core/icons/emojis/emojis.py +41 -0
  261. build/lib/clitt/core/icons/emojis/face_smiling.py +40 -0
  262. build/lib/clitt/core/icons/font_awesome/__init__.py +18 -0
  263. build/lib/clitt/core/icons/font_awesome/app_icons.py +55 -0
  264. build/lib/clitt/core/icons/font_awesome/awesome.py +76 -0
  265. build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +93 -0
  266. build/lib/clitt/core/icons/font_awesome/form_icons.py +69 -0
  267. build/lib/clitt/core/icons/font_awesome/game_icons.py +59 -0
  268. build/lib/clitt/core/icons/font_awesome/nav_icons.py +42 -0
  269. build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +39 -0
  270. build/lib/clitt/core/icons/font_awesome/widget_icons.py +37 -0
  271. build/lib/clitt/core/preferences.py +87 -0
  272. build/lib/clitt/core/term/__init__.py +14 -0
  273. build/lib/clitt/core/term/commons.py +106 -0
  274. build/lib/clitt/core/term/cursor.py +174 -0
  275. build/lib/clitt/core/term/screen.py +106 -0
  276. build/lib/clitt/core/term/terminal.py +202 -0
  277. build/lib/clitt/core/tui/__init__.py +20 -0
  278. build/lib/clitt/core/tui/line_input/__init__.py +12 -0
  279. build/lib/clitt/core/tui/line_input/keyboard_input.py +229 -0
  280. build/lib/clitt/core/tui/line_input/line_input.py +31 -0
  281. build/lib/clitt/core/tui/mchoose/__init__.py +12 -0
  282. build/lib/clitt/core/tui/mchoose/mchoose.py +43 -0
  283. build/lib/clitt/core/tui/mchoose/menu_choose.py +192 -0
  284. build/lib/clitt/core/tui/mdashboard/__init__.py +14 -0
  285. build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +54 -0
  286. build/lib/clitt/core/tui/mdashboard/dashboard_item.py +31 -0
  287. build/lib/clitt/core/tui/mdashboard/mdashboard.py +26 -0
  288. build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +148 -0
  289. build/lib/clitt/core/tui/menu/__init__.py +16 -0
  290. build/lib/clitt/core/tui/menu/tui_menu.py +111 -0
  291. build/lib/clitt/core/tui/menu/tui_menu_action.py +47 -0
  292. build/lib/clitt/core/tui/menu/tui_menu_factory.py +117 -0
  293. build/lib/clitt/core/tui/menu/tui_menu_item.py +196 -0
  294. build/lib/clitt/core/tui/menu/tui_menu_ui.py +98 -0
  295. build/lib/clitt/core/tui/menu/tui_menu_view.py +57 -0
  296. build/lib/clitt/core/tui/minput/__init__.py +19 -0
  297. build/lib/clitt/core/tui/minput/access_type.py +26 -0
  298. build/lib/clitt/core/tui/minput/field_builder.py +117 -0
  299. build/lib/clitt/core/tui/minput/form_builder.py +72 -0
  300. build/lib/clitt/core/tui/minput/form_field.py +180 -0
  301. build/lib/clitt/core/tui/minput/input_type.py +30 -0
  302. build/lib/clitt/core/tui/minput/input_validator.py +98 -0
  303. build/lib/clitt/core/tui/minput/menu_input.py +292 -0
  304. build/lib/clitt/core/tui/minput/minput.py +44 -0
  305. build/lib/clitt/core/tui/minput/minput_utils.py +156 -0
  306. build/lib/clitt/core/tui/mselect/__init__.py +12 -0
  307. build/lib/clitt/core/tui/mselect/menu_select.py +170 -0
  308. build/lib/clitt/core/tui/mselect/mselect.py +36 -0
  309. build/lib/clitt/core/tui/table/__init__.py +12 -0
  310. build/lib/clitt/core/tui/table/table_enums.py +47 -0
  311. build/lib/clitt/core/tui/table/table_renderer.py +339 -0
  312. build/lib/clitt/core/tui/tui_application.py +52 -0
  313. build/lib/clitt/core/tui/tui_component.py +154 -0
  314. build/lib/clitt/core/tui/tui_preferences.py +103 -0
  315. build/lib/clitt/utils/__init__.py +11 -0
  316. build/lib/clitt/utils/git_utils.py +66 -0
  317. clitt/.version +1 -1
  318. clitt/__init__.py +3 -3
  319. clitt/addons/__init__.py +3 -3
  320. clitt/addons/appman/__init__.py +3 -3
  321. clitt/addons/appman/templates/__init__.py +3 -3
  322. clitt/addons/widman/__init__.py +3 -3
  323. clitt/addons/widman/widgets/__init__.py +3 -3
  324. clitt/core/__init__.py +3 -3
  325. clitt/core/exception/__init__.py +3 -3
  326. clitt/core/exception/exceptions.py +1 -0
  327. clitt/core/icons/__init__.py +3 -3
  328. clitt/core/icons/emojis/__init__.py +3 -3
  329. clitt/core/icons/font_awesome/__init__.py +3 -3
  330. clitt/core/term/__init__.py +3 -3
  331. clitt/core/term/commons.py +40 -16
  332. clitt/core/term/cursor.py +18 -3
  333. clitt/core/term/screen.py +15 -0
  334. clitt/core/term/terminal.py +15 -16
  335. clitt/core/tui/__init__.py +3 -3
  336. clitt/core/tui/line_input/__init__.py +3 -3
  337. clitt/core/tui/line_input/keyboard_input.py +15 -14
  338. clitt/core/tui/line_input/line_input.py +2 -6
  339. clitt/core/tui/mchoose/__init__.py +3 -3
  340. clitt/core/tui/mchoose/mchoose.py +2 -3
  341. clitt/core/tui/mchoose/menu_choose.py +6 -14
  342. clitt/core/tui/mdashboard/__init__.py +3 -3
  343. clitt/core/tui/mdashboard/menu_dashboard.py +2 -8
  344. clitt/core/tui/menu/__init__.py +3 -3
  345. clitt/core/tui/minput/__init__.py +3 -3
  346. clitt/core/tui/mselect/__init__.py +3 -3
  347. clitt/core/tui/mselect/menu_select.py +2 -3
  348. clitt/core/tui/table/__init__.py +3 -3
  349. clitt/core/tui/tui_application.py +4 -5
  350. clitt/core/tui/tui_component.py +4 -5
  351. clitt/utils/__init__.py +3 -3
  352. {hspylib_clitt-0.9.117.dist-info → hspylib_clitt-0.9.119.dist-info}/METADATA +2 -2
  353. hspylib_clitt-0.9.119.dist-info/RECORD +413 -0
  354. {hspylib_clitt-0.9.117.dist-info → hspylib_clitt-0.9.119.dist-info}/top_level.txt +1 -0
  355. hspylib_clitt-0.9.117.dist-info/RECORD +0 -97
  356. {hspylib_clitt-0.9.117.dist-info → hspylib_clitt-0.9.119.dist-info}/WHEEL +0 -0
@@ -0,0 +1,229 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib-AskAI
6
+ @package: main.clitt.core.tui.line_input
7
+ @file: keyboard_input.py
8
+ @created: Wed, 17 Jan 2024
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.term.commons import Direction
17
+ from clitt.core.term.terminal import Terminal
18
+ from clitt.core.tui.tui_component import TUIComponent
19
+ from hspylib.modules.cli.keyboard import Keyboard
20
+ from hspylib.modules.cli.vt100.vt_color import VtColor
21
+ from typing import Dict, List, Optional
22
+
23
+ import pyperclip
24
+
25
+
26
+ class KeyboardInput(TUIComponent):
27
+ """Provides a keyboard input for terminal UIs with undo and history."""
28
+
29
+ # Current history index.
30
+ _HIST_INDEX: int = 0
31
+
32
+ # Dict containing all previously accepted inputs.
33
+ _HISTORY: Dict[int, str] = {0: ""}
34
+
35
+ # Stack containing current input changes.
36
+ _UNDO_HISTORY: List[str] = []
37
+
38
+ # Stack containing current input reverts.
39
+ _REDO_HISTORY: List[str] = []
40
+
41
+ @staticmethod
42
+ def preload_history(history: List[str]) -> None:
43
+ """Preload the input with the provided dictionary."""
44
+ rev_history = reversed(history)
45
+ for entry in rev_history:
46
+ KeyboardInput._add_history(entry)
47
+ KeyboardInput._HIST_INDEX = 0
48
+
49
+ @staticmethod
50
+ def forget_history() -> None:
51
+ """Forget all input history entries."""
52
+ tmp: str = KeyboardInput._HISTORY[0]
53
+ KeyboardInput._HISTORY.clear()
54
+ KeyboardInput._HISTORY[0] = tmp
55
+
56
+ @staticmethod
57
+ def history() -> List[str]:
58
+ """Return the actual input history."""
59
+ return list(filter(lambda v: v, KeyboardInput._HISTORY.values()))
60
+
61
+ @staticmethod
62
+ def _add_history(input_text: str) -> None:
63
+ """Add the following input to the history set.
64
+ :param input_text: The input text to add to the history.
65
+ """
66
+ if input_text and input_text not in list(KeyboardInput._HISTORY.values())[1:]:
67
+ idx: int = max(1, len(KeyboardInput._HISTORY))
68
+ KeyboardInput._HISTORY[idx] = input_text
69
+ KeyboardInput._HIST_INDEX = idx
70
+
71
+ @classmethod
72
+ def _next_in_history(cls) -> Optional[str]:
73
+ index = min(len(cls._HISTORY) - 1, cls._HIST_INDEX + 1)
74
+ text = cls._HISTORY.get(index, "")
75
+ cls._HIST_INDEX = index
76
+ return text or cls._HISTORY[0]
77
+
78
+ @classmethod
79
+ def _prev_in_history(cls) -> Optional[str]:
80
+ index = max(0, cls._HIST_INDEX - 1)
81
+ text = cls._HISTORY.get(index, "")
82
+ cls._HIST_INDEX = index
83
+ return text or cls._HISTORY[0]
84
+
85
+ @classmethod
86
+ def _undo(cls) -> Optional[str]:
87
+ text = cls._UNDO_HISTORY.pop() if cls._UNDO_HISTORY else None
88
+ if cls._HISTORY[0] not in cls._REDO_HISTORY:
89
+ cls._REDO_HISTORY.append(cls._HISTORY[0])
90
+ return text
91
+
92
+ @classmethod
93
+ def _redo(cls) -> Optional[str]:
94
+ text = cls._REDO_HISTORY.pop() if cls._REDO_HISTORY else None
95
+ if cls._HISTORY[0] not in cls._UNDO_HISTORY:
96
+ cls._UNDO_HISTORY.append(cls._HISTORY[0])
97
+ return text
98
+
99
+ def __init__(
100
+ self,
101
+ prompt: str = "",
102
+ prompt_color: VtColor = VtColor.NC,
103
+ text_color: VtColor = VtColor.NC,
104
+ navbar_enable: bool = False,
105
+ ):
106
+ super().__init__(prompt)
107
+ self._prompt_color = prompt_color
108
+ self._text_color = text_color
109
+ self._navbar_enable = navbar_enable
110
+ self._input_index = 0
111
+ self._input_text: str = ""
112
+ self._HISTORY[0] = ""
113
+
114
+ @property
115
+ def length(self) -> int:
116
+ return len(self._input_text) if self._input_text else 0
117
+
118
+ def _prepare_render(self, auto_wrap: bool = True, show_cursor: bool = True) -> None:
119
+ Terminal.set_auto_wrap(auto_wrap)
120
+ Terminal.set_show_cursor(show_cursor)
121
+ self.cursor.save()
122
+
123
+ def _loop(self, break_keys: List[Keyboard] = None) -> Keyboard:
124
+ break_keys = break_keys or Keyboard.break_keys()
125
+ keypress = Keyboard.VK_NONE
126
+
127
+ # Wait for user interaction
128
+ while not self._done and keypress and keypress not in break_keys:
129
+ # Menu Renderization
130
+ if self._re_render:
131
+ self.render()
132
+ # Navigation input
133
+ keypress = self.handle_keypress()
134
+
135
+ return keypress
136
+
137
+ def execute(self) -> Optional[str | Keyboard]:
138
+ self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
139
+ self._prepare_render()
140
+ keypress = self._loop() or Keyboard.VK_ESC
141
+
142
+ if keypress.isEnter():
143
+ self._add_history(self._input_text)
144
+ self._UNDO_HISTORY.clear()
145
+ self._REDO_HISTORY.clear()
146
+ elif keypress == Keyboard.VK_ESC:
147
+ self._input_text = None
148
+
149
+ self.writeln("%NC%")
150
+
151
+ return self._input_text
152
+
153
+ def render(self) -> None:
154
+ Terminal.set_show_cursor(False)
155
+ self.cursor.restore()
156
+ self.write(self._input_text)
157
+ self._terminal.cursor.erase(Direction.RIGHT)
158
+ self._re_render = False
159
+ self._set_cursor_pos()
160
+ Terminal.set_show_cursor()
161
+
162
+ def navbar(self, **kwargs) -> str:
163
+ pass
164
+
165
+ def handle_keypress(self) -> Keyboard:
166
+ if keypress := Keyboard.wait_keystroke():
167
+ match keypress:
168
+ case Keyboard.VK_BACKSPACE:
169
+ if self._input_index > 0:
170
+ self._input_index = max(0, self._input_index - 1)
171
+ self._update_input(
172
+ self._input_text[: self._input_index] + self._input_text[1 + self._input_index :]
173
+ )
174
+ case Keyboard.VK_DELETE:
175
+ self._update_input(
176
+ self._input_text[: self._input_index] + self._input_text[1 + self._input_index :]
177
+ )
178
+ case Keyboard.VK_CTRL_F: # Forget history
179
+ self.forget_history()
180
+ case Keyboard.VK_CTRL_P: # Paste from clipboard
181
+ text = (pyperclip.paste() or "").replace("\n", "↵")
182
+ self._update_input(
183
+ self._input_text[: self._input_index] + text + self._input_text[self._input_index :]
184
+ )
185
+ self._input_index += len(text)
186
+ case Keyboard.VK_CTRL_R: # Reset contents
187
+ self._input_index = 0
188
+ self._update_input("")
189
+ case Keyboard.VK_LEFT:
190
+ self._input_index = max(0, self._input_index - 1)
191
+ case Keyboard.VK_RIGHT:
192
+ self._input_index = min(self.length, self._input_index + 1)
193
+ case Keyboard.VK_UP:
194
+ self._input_text = self._next_in_history()
195
+ self._input_index = self.length
196
+ case Keyboard.VK_DOWN:
197
+ self._input_text = self._prev_in_history()
198
+ self._input_index = self.length
199
+ case Keyboard.VK_HOME:
200
+ self._input_index = 0
201
+ case Keyboard.VK_END:
202
+ self._input_index = self.length
203
+ case _ as key if key.val.isprintable():
204
+ self._update_input(
205
+ self._input_text[: self._input_index] + key.val + self._input_text[self._input_index :]
206
+ )
207
+ self._input_index += 1
208
+ case _ as key if key in Keyboard.break_keys():
209
+ self._done = True
210
+ case _:
211
+ self._input_text = keypress
212
+ self._done = True
213
+ self._re_render = True
214
+
215
+ return keypress
216
+
217
+ def _set_cursor_pos(self):
218
+ """Set the cursor position on the input."""
219
+ index_offset = max(0, self.length - self._input_index)
220
+ self.screen.cursor.move(index_offset, Direction.LEFT)
221
+
222
+ def _update_input(self, text: str) -> str:
223
+ """Update the value of the input.
224
+ :param text: The text to be set.
225
+ """
226
+ self._UNDO_HISTORY.append(self._input_text)
227
+ self._HISTORY[0] = text if text not in self._HISTORY else self._input_text
228
+ self._input_text = text
229
+ return text
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib-AskAI
6
+ @package: main.clitt.core.tui.line_input
7
+ @file: line_input.py
8
+ @created: Wed, 17 Jan 2024
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.tui.line_input.keyboard_input import KeyboardInput
16
+ from hspylib.modules.cli.keyboard import Keyboard
17
+ from hspylib.modules.cli.vt100.vt_color import VtColor
18
+ from typing import Optional
19
+
20
+
21
+ def line_input(
22
+ prompt: str = "", prompt_color: VtColor = VtColor.NC, text_color: VtColor = VtColor.NC, navbar_enable: bool = False
23
+ ) -> Optional[str | Keyboard]:
24
+ """Read a string from standard input.
25
+ :param prompt: The message to be displayed to the user.
26
+ :param prompt_color: The color of the prompt text.
27
+ :param text_color: The color of the input text.
28
+ :param navbar_enable: Whether to display the navbar or not.
29
+ """
30
+ ptt = KeyboardInput(prompt, prompt_color, text_color, navbar_enable)
31
+ return ptt.execute()
@@ -0,0 +1,12 @@
1
+ # _*_ coding: utf-8 _*_
2
+ #
3
+ # hspylib-clitt v0.9.119
4
+ #
5
+ # Package: main.build.lib.build.lib.build.lib.clitt.core.tui.mchoose
6
+ """Package initialization."""
7
+
8
+ __all__ = [
9
+ 'mchoose',
10
+ 'menu_choose'
11
+ ]
12
+ __version__ = '0.9.119'
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib
6
+ @package: clitt.core.tui.mchoose
7
+ @file: mchoose.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.tui.mchoose.menu_choose import MenuChoose
16
+ from hspylib.core.enums.charset import Charset
17
+ from typing import List, Optional, TypeVar
18
+
19
+ T = TypeVar("T")
20
+
21
+
22
+ def mchoose(
23
+ items: List[T],
24
+ checked: bool | List[bool] = False,
25
+ title: str = "Please choose among the options",
26
+ output: str = None,
27
+ ) -> Optional[List[T]]:
28
+ """
29
+ Terminal UI menu choose input method.
30
+ :param items: the provided items to choose from.
31
+ :param checked: whether all items ate initially marked or not.
32
+ :param title: the title to be displayed before the options.
33
+ :param output: optional output file containing the marked items.
34
+ :return: the list of marked items.
35
+ """
36
+
37
+ result = MenuChoose(title, items, checked).execute()
38
+
39
+ if result and output:
40
+ with open(output, "w", encoding=Charset.UTF_8.val) as f_out:
41
+ f_out.write(" ".join(result))
42
+
43
+ return result
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib
6
+ @package: clitt.core.tui.mchoose
7
+ @file: menu_choose.py
8
+ @created: Wed, 17 May 2023
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.icons.font_awesome.nav_icons import NavIcons
16
+ from clitt.core.term.commons import Direction, Portion
17
+ from clitt.core.tui.tui_component import TUIComponent
18
+ from hspylib.core.tools.commons import to_bool
19
+ from hspylib.core.tools.dict_tools import get_or_default
20
+ from hspylib.modules.cli.keyboard import Keyboard
21
+ from typing import List, Optional, TypeAlias, TypeVar
22
+
23
+ T = TypeVar("T")
24
+
25
+ MChooseItems: TypeAlias = List[T]
26
+
27
+
28
+ class MenuChoose(TUIComponent):
29
+ """Terminal UI menu choose input method."""
30
+
31
+ NAV_ICONS = NavIcons.compose(NavIcons.UP, NavIcons.DOWN)
32
+
33
+ ROW_OFFSET = 5
34
+
35
+ MIN_ROWS = 3
36
+
37
+ def __init__(self, title: str, items: MChooseItems, checked: bool | List[bool] = False):
38
+
39
+ super().__init__(title)
40
+ self.items = items
41
+ self.show_from = 0
42
+ self.show_to = self._max_rows()
43
+ self.diff_index = self.show_to - self.show_from
44
+ self.sel_index = 0
45
+ self.max_line_length = max(len(str(item)) for item in items)
46
+ # Initialize all options
47
+ if isinstance(checked, bool):
48
+ self.sel_options = [checked for _ in range(len(items))]
49
+ else:
50
+ # Check both sizes
51
+ self.sel_options = [get_or_default(checked, i, 0) for i in range(len(items))]
52
+
53
+ def execute(self) -> Optional[MChooseItems]:
54
+ if len(self.items) == 0:
55
+ return None
56
+
57
+ self._prepare_render()
58
+ keypress = self._loop()
59
+
60
+ return [op for idx, op in enumerate(self.items) if self.sel_options[idx]] if keypress.isEnter() else None
61
+
62
+ def render(self) -> None:
63
+ length = len(self.items)
64
+ self.cursor.restore()
65
+ self.writeln(f"{self.prefs.title_color.placeholder}{self.title}%EOL%%NC%")
66
+
67
+ for idx in range(self.show_from, self.show_to):
68
+ if idx >= length:
69
+ break # When the index is greater than the number of items, stop rendering
70
+
71
+ option_line = str(self.items[idx])
72
+ self.cursor.erase(Portion.LINE)
73
+ # Print the selector if the index is currently selected
74
+ selector = self.draw_selector(idx == self.sel_index)
75
+ mark = self.prefs.checked_icon if to_bool(self.sel_options[idx]) else self.prefs.unchecked_icon
76
+ # fmt: off
77
+ line_fmt = (
78
+ " {:>" + f"{len(str(length))}" + "} "
79
+ + "{:>" + f"{len(selector)}" + "} "
80
+ + "{:>" + f"{len(str(mark))}" + "} "
81
+ + "{:<" + f"{self.max_line_length}" + "} "
82
+ )
83
+ # fmt: on
84
+ self.draw_line(line_fmt, idx + 1, selector, mark, option_line)
85
+
86
+ self.draw_navbar(self.navbar(to=length))
87
+ self._re_render = False
88
+
89
+ def navbar(self, **kwargs) -> str:
90
+ return (
91
+ f"%EOL%{self.prefs.navbar_color.placeholder}"
92
+ f"[Enter] Accept [{self.NAV_ICONS}] "
93
+ f"Navigate [Space] Mark [I] Invert [Esc] Quit [1..{kwargs['to']}] Goto: %NC%"
94
+ )
95
+
96
+ def handle_keypress(self) -> Keyboard:
97
+ if keypress := Keyboard.wait_keystroke():
98
+ match keypress:
99
+ case _ as key if key in Keyboard.break_keys():
100
+ self._done = True
101
+ case Keyboard.VK_UP:
102
+ self._handle_key_up()
103
+ case Keyboard.VK_DOWN:
104
+ self._handle_key_down()
105
+ case Keyboard.VK_TAB:
106
+ self._handle_tab()
107
+ case Keyboard.VK_SHIFT_TAB:
108
+ self._handle_shift_tab()
109
+ case Keyboard.VK_SPACE:
110
+ self._handle_space()
111
+ case _ as key if key in [Keyboard.VK_i, Keyboard.VK_I]:
112
+ self._handle_key_i()
113
+ case _ as key if key in Keyboard.digits():
114
+ self._handle_digit(keypress)
115
+
116
+ return keypress
117
+
118
+ def _handle_digit(self, digit: Keyboard) -> None:
119
+ """TODO"""
120
+ length = len(self.items)
121
+ typed_index = digit.value
122
+ self.write(f"{digit.value}") # echo the digit typed
123
+ index_len = 1
124
+ while len(typed_index) < len(str(length)):
125
+ keystroke = Keyboard.wait_keystroke()
126
+ if not keystroke or not keystroke.isdigit():
127
+ typed_index = None if keystroke != Keyboard.VK_ENTER else typed_index
128
+ break
129
+ typed_index = f"{typed_index}{keystroke.value if keystroke else ''}"
130
+ self.write(f"{keystroke.value if keystroke else ''}")
131
+ index_len += 1
132
+ # Erase the index typed by the user
133
+ self.cursor.move(index_len, Direction.LEFT)
134
+ self.cursor.erase(Direction.RIGHT)
135
+ if typed_index and 1 <= int(typed_index) <= length:
136
+ self.show_to = max(int(typed_index), self.diff_index)
137
+ self.show_from = self.show_to - self.diff_index
138
+ self.sel_index = int(typed_index) - 1
139
+ self._re_render = True
140
+
141
+ def _handle_key_up(self) -> None:
142
+ """TODO"""
143
+ if self.sel_index == self.show_from and self.show_from > 0:
144
+ self.show_from -= 1
145
+ self.show_to -= 1
146
+ if self.sel_index - 1 >= 0:
147
+ self.sel_index -= 1
148
+ self._re_render = True
149
+
150
+ def _handle_key_down(self) -> None:
151
+ """TODO"""
152
+ length = len(self.items)
153
+ if self.sel_index + 1 == self.show_to and self.show_to < length:
154
+ self.show_from += 1
155
+ self.show_to += 1
156
+ if self.sel_index + 1 < length:
157
+ self.sel_index += 1
158
+ self._re_render = True
159
+
160
+ def _handle_tab(self) -> None:
161
+ """TODO"""
162
+ length = len(self.items)
163
+ page_index = min(self.show_to + self.diff_index, length)
164
+ self.show_to = max(page_index, self.diff_index)
165
+ self.show_from = self.show_to - self.diff_index
166
+ self.sel_index = self.show_from
167
+ self._re_render = True
168
+
169
+ def _handle_shift_tab(self) -> None:
170
+ """TODO"""
171
+ page_index = max(self.show_from - self.diff_index, 0)
172
+ self.show_from = min(page_index, self.diff_index)
173
+ self.show_to = self.show_from + self.diff_index
174
+ self.sel_index = self.show_from
175
+ self._re_render = True
176
+
177
+ def _handle_space(self) -> None:
178
+ """TODO"""
179
+ if self.sel_options[self.sel_index] == 0:
180
+ self.sel_options[self.sel_index] = 1
181
+ else:
182
+ self.sel_options[self.sel_index] = 0
183
+ self._re_render = True
184
+
185
+ def _handle_key_i(self) -> None:
186
+ """TODO"""
187
+ self.sel_options = [(0 if op == 1 else 1) for op in self.sel_options]
188
+ self._re_render = True
189
+
190
+ def _max_rows(self) -> int:
191
+ screen_lines = self.screen.lines - self.ROW_OFFSET
192
+ return min(self.prefs.max_rows, screen_lines)
@@ -0,0 +1,14 @@
1
+ # _*_ coding: utf-8 _*_
2
+ #
3
+ # hspylib-clitt v0.9.119
4
+ #
5
+ # Package: main.build.lib.build.lib.build.lib.clitt.core.tui.mdashboard
6
+ """Package initialization."""
7
+
8
+ __all__ = [
9
+ 'dashboard_builder',
10
+ 'dashboard_item',
11
+ 'mdashboard',
12
+ 'menu_dashboard'
13
+ ]
14
+ __version__ = '0.9.119'
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib
6
+ @package: clitt.core.tui.mdashboard
7
+ @file: dashboard_builder.py
8
+ @created: Thu, 20 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.icons.font_awesome.awesome import Awesome
16
+ from clitt.core.tui.mdashboard.dashboard_item import DashboardItem
17
+ from typing import Callable, List, Optional
18
+
19
+
20
+ class DashboardBuilder:
21
+ """Dashboard builder."""
22
+
23
+ @staticmethod
24
+ class DashboardItemBuilder:
25
+ """Dashboard item builder."""
26
+
27
+ def __init__(self, parent: "DashboardBuilder"):
28
+ self._parent = parent
29
+ self._item = DashboardItem()
30
+
31
+ def icon(self, icon: Awesome) -> "DashboardBuilder.DashboardItemBuilder":
32
+ self._item.icon = icon
33
+ return self
34
+
35
+ def tooltip(self, tooltip: str) -> "DashboardBuilder.DashboardItemBuilder":
36
+ self._item.tooltip = tooltip
37
+ return self
38
+
39
+ def on_trigger(self, on_trigger: Callable) -> Optional["DashboardBuilder.DashboardItemBuilder"]:
40
+ self._item.on_trigger = on_trigger
41
+ return self
42
+
43
+ def build(self) -> "DashboardBuilder":
44
+ self._parent.items.append(self._item)
45
+ return self._parent
46
+
47
+ def __init__(self):
48
+ self.items = []
49
+
50
+ def item(self) -> DashboardItemBuilder:
51
+ return DashboardBuilder.DashboardItemBuilder(self)
52
+
53
+ def build(self) -> List[DashboardItem]:
54
+ return self.items
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib
6
+ @package: clitt.core.tui.mdashboard
7
+ @file: dashboard_item.py
8
+ @created: Thu, 20 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.icons.font_awesome.awesome import Awesome
16
+ from typing import Callable, Optional
17
+
18
+
19
+ class DashboardItem:
20
+ """Represent a dashboard item."""
21
+
22
+ def __init__(self, icon: Awesome = None, tooltip: str = None, on_trigger: Optional[Callable] = None):
23
+ self.icon = icon
24
+ self.tooltip = tooltip
25
+ self.on_trigger = on_trigger
26
+
27
+ def __str__(self):
28
+ return f'{self.icon} "{self.tooltip}" -> {self.on_trigger}'
29
+
30
+ def __repr__(self):
31
+ return str(self)
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @project: HsPyLib
6
+ @package: clitt.core.tui.mdashboard
7
+ @file: mdashboard.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.tui.mdashboard.dashboard_item import DashboardItem
16
+ from clitt.core.tui.mdashboard.menu_dashboard import MenuDashBoard
17
+ from typing import List, Optional
18
+
19
+
20
+ def mdashboard(items: List[DashboardItem], title: str = "Please select one item") -> Optional[DashboardItem]:
21
+ """
22
+ Wrapper for the Menu Dashboard.
23
+ :param items: the provided dashboard items to select from.
24
+ :param title: the title to be displayed before the options.
25
+ """
26
+ return MenuDashBoard(title, items).execute()