ok-script 1.0.136__tar.gz → 1.0.138__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. {ok_script-1.0.136 → ok_script-1.0.138}/PKG-INFO +1 -1
  2. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/StartController.py +53 -16
  3. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ModifyListDialog.py +170 -162
  4. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/PKG-INFO +1 -1
  5. {ok_script-1.0.136 → ok_script-1.0.138}/MANIFEST.in +0 -0
  6. {ok_script-1.0.136 → ok_script-1.0.138}/README.md +0 -0
  7. {ok_script-1.0.136 → ok_script-1.0.138}/ok/__init__.cpp +0 -0
  8. {ok_script-1.0.136 → ok_script-1.0.138}/ok/__init__.py +0 -0
  9. {ok_script-1.0.136 → ok_script-1.0.138}/ok/__main__.py +0 -0
  10. {ok_script-1.0.136 → ok_script-1.0.138}/ok/_geometry.cpp +0 -0
  11. {ok_script-1.0.136 → ok_script-1.0.138}/ok/alas/__init__.py +0 -0
  12. {ok_script-1.0.136 → ok_script-1.0.138}/ok/alas/emulator_base.py +0 -0
  13. {ok_script-1.0.136 → ok_script-1.0.138}/ok/alas/emulator_windows.py +0 -0
  14. {ok_script-1.0.136 → ok_script-1.0.138}/ok/alas/platform_windows.py +0 -0
  15. {ok_script-1.0.136 → ok_script-1.0.138}/ok/alas/utils.py +0 -0
  16. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/__init__.py +0 -0
  17. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/__init__.py +0 -0
  18. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/deep.py +0 -0
  19. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/minitouch.py +0 -0
  20. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/nemu_ipc.py +0 -0
  21. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/nemu_utils.py +0 -0
  22. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/pool.py +0 -0
  23. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/timer.py +0 -0
  24. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/adb/util.py +0 -0
  25. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/windows/__init__.py +0 -0
  26. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/windows/d3d11.py +0 -0
  27. {ok_script-1.0.136 → ok_script-1.0.138}/ok/capture/windows/dump.py +0 -0
  28. {ok_script-1.0.136 → ok_script-1.0.138}/ok/cli.py +0 -0
  29. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/DeviceManager.py +0 -0
  30. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/__init__.py +0 -0
  31. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture.py +0 -0
  32. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/__init__.py +0 -0
  33. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/adb.py +0 -0
  34. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/base.py +0 -0
  35. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/bitblt.py +0 -0
  36. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/bitblt_utils.py +0 -0
  37. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/browser.py +0 -0
  38. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/desktop_duplication.py +0 -0
  39. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/hwnd_window.py +0 -0
  40. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/image.py +0 -0
  41. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/nemu_ipc.py +0 -0
  42. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/types.py +0 -0
  43. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/update.py +0 -0
  44. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/capture_methods/windows_graphics.py +0 -0
  45. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction.py +0 -0
  46. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/__init__.py +0 -0
  47. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/adb.py +0 -0
  48. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/base.py +0 -0
  49. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/browser.py +0 -0
  50. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/do_nothing.py +0 -0
  51. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/foreground_post_message.py +0 -0
  52. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/genshin.py +0 -0
  53. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/keys.py +0 -0
  54. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/post_message.py +0 -0
  55. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/pydirect.py +0 -0
  56. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/pynput.py +0 -0
  57. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/interaction_methods/swipe.py +0 -0
  58. {ok_script-1.0.136 → ok_script-1.0.138}/ok/device/intercation.py +0 -0
  59. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/Box.cpp +0 -0
  60. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/Box.py +0 -0
  61. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/Feature.py +0 -0
  62. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/FeatureSet.cpp +0 -0
  63. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/FeatureSet.py +0 -0
  64. {ok_script-1.0.136 → ok_script-1.0.138}/ok/feature/__init__.py +0 -0
  65. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/Communicate.py +0 -0
  66. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/MainWindow.py +0 -0
  67. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/MessageWindow.py +0 -0
  68. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/TabTitles.py +0 -0
  69. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/__init__.py +0 -0
  70. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/about/AboutTab.py +0 -0
  71. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/about/HttpTextEdit.py +0 -0
  72. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/about/ProjectCard.py +0 -0
  73. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/about/VersionCard.py +0 -0
  74. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/about/__init__.py +0 -0
  75. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/common/OKIcon.py +0 -0
  76. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/common/__init__.py +0 -0
  77. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/common/config.py +0 -0
  78. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/common/style_sheet.py +0 -0
  79. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/DebugTab.cpp +0 -0
  80. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/DebugTab.py +0 -0
  81. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/FrameWidget.cpp +0 -0
  82. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/LogWindow.cpp +0 -0
  83. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/OverlayWidget.py +0 -0
  84. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/RunCodeTab.py +0 -0
  85. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/Screenshot.cpp +0 -0
  86. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/Screenshot.py +0 -0
  87. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/debug/__init__.py +0 -0
  88. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/GettextTranslator.cpp +0 -0
  89. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/GettextTranslator.py +0 -0
  90. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/__init__.py +0 -0
  91. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/en_US.qm +0 -0
  92. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/en_US.ts +0 -0
  93. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/es_ES.qm +0 -0
  94. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/es_ES.ts +0 -0
  95. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/ja_JP.qm +0 -0
  96. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/ja_JP.ts +0 -0
  97. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/ko_KR.qm +0 -0
  98. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/ko_KR.ts +0 -0
  99. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/path.cpp +0 -0
  100. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/path.py +0 -0
  101. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/update.cpp +0 -0
  102. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/update.py +0 -0
  103. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/zh_CN.qm +0 -0
  104. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/zh_CN.ts +0 -0
  105. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/zh_TW.qm +0 -0
  106. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/i18n/zh_TW.ts +0 -0
  107. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/DownloadBar.cpp +0 -0
  108. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/DownloadBar.py +0 -0
  109. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/LauncherWindow.cpp +0 -0
  110. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/LauncherWindow.py +0 -0
  111. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/LinksBar.cpp +0 -0
  112. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/LinksBar.py +0 -0
  113. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/RunBar.cpp +0 -0
  114. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/RunBar.py +0 -0
  115. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/UpdateBar.cpp +0 -0
  116. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/UpdateBar.py +0 -0
  117. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/launcher/__init__.py +0 -0
  118. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/overlay/OverlayWindow.cpp +0 -0
  119. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/overlay/OverlayWindow.py +0 -0
  120. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/overlay/__init__.py +0 -0
  121. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/__init__.py +0 -0
  122. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/card.qss +0 -0
  123. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/discord.svg +0 -0
  124. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/heart.svg +0 -0
  125. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/message_window.qss +0 -0
  126. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/setting_interface.qss +0 -0
  127. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/status_bar.qss +0 -0
  128. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/stop.svg +0 -0
  129. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/dark/tab.qss +0 -0
  130. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/card.qss +0 -0
  131. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/discord.svg +0 -0
  132. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/heart.svg +0 -0
  133. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/message_window.qss +0 -0
  134. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/setting_interface.qss +0 -0
  135. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/status_bar.qss +0 -0
  136. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/stop.svg +0 -0
  137. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qss/light/tab.qss +0 -0
  138. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/qt.qrc +0 -0
  139. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/resources.py +0 -0
  140. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/settings/GlobalConfigCard.cpp +0 -0
  141. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/settings/GlobalConfigCard.py +0 -0
  142. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/settings/SettingTab.cpp +0 -0
  143. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/settings/SettingTab.py +0 -0
  144. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/settings/__init__.py +0 -0
  145. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/SelectCaptureListView.cpp +0 -0
  146. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/SelectCaptureListView.py +0 -0
  147. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/SelectInteractionListView.py +0 -0
  148. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/StartCard.cpp +0 -0
  149. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/StartCard.py +0 -0
  150. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/StartTab.cpp +0 -0
  151. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/StartTab.py +0 -0
  152. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/start/__init__.py +0 -0
  153. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ConfigCard.py +0 -0
  154. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ConfigItemFactory.py +0 -0
  155. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ConfigLabelAndWidget.py +0 -0
  156. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/EditTaskTab.py +0 -0
  157. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndButtons.py +0 -0
  158. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndDoubleSpinBox.py +0 -0
  159. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndDropDown.py +0 -0
  160. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndGlobal.py +0 -0
  161. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndLineEdit.py +0 -0
  162. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndList.py +0 -0
  163. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndMultiSelection.py +0 -0
  164. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndSpinBox.py +0 -0
  165. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndSwitchButton.py +0 -0
  166. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndTextEdit.py +0 -0
  167. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/LabelAndWidget.py +0 -0
  168. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/MarkUpWindow.py +0 -0
  169. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ModifyListItem.py +0 -0
  170. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/OneTimeTaskTab.py +0 -0
  171. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/RecordScript.py +0 -0
  172. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ScheduleTaskTab.py +0 -0
  173. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/ScriptPackager.py +0 -0
  174. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/StartButton.py +0 -0
  175. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TaskCard.py +0 -0
  176. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TaskManger.py +0 -0
  177. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TaskOpButton.py +0 -0
  178. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TaskTab.py +0 -0
  179. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TemplateFactory.py +0 -0
  180. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TemplateTab.py +0 -0
  181. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TooltipTableWidget.py +0 -0
  182. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/TriggerTaskTab.py +0 -0
  183. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/tasks/__init__.py +0 -0
  184. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/Alert.cpp +0 -0
  185. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/Alert.py +0 -0
  186. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/InitWorker.cpp +0 -0
  187. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/InitWorker.py +0 -0
  188. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/__init__.py +0 -0
  189. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/app.cpp +0 -0
  190. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/app.py +0 -0
  191. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/download.py +0 -0
  192. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/pip_util.cpp +0 -0
  193. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/util/pip_util.py +0 -0
  194. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/BaseLoading.py +0 -0
  195. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/BaseWindow.cpp +0 -0
  196. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/BaseWindow.py +0 -0
  197. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/Card.cpp +0 -0
  198. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/Card.py +0 -0
  199. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/CustomTab.cpp +0 -0
  200. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/CustomTab.py +0 -0
  201. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/EmptyCard.cpp +0 -0
  202. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/EmptyCard.py +0 -0
  203. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/FlowLayout.cpp +0 -0
  204. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/FlowLayout.py +0 -0
  205. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/FramelessDialog.cpp +0 -0
  206. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/FramelessDialog.py +0 -0
  207. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/ImageWidget.py +0 -0
  208. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/ListTableWidgetItem.cpp +0 -0
  209. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/ListTableWidgetItem.py +0 -0
  210. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/NumericTableWidgetItem.cpp +0 -0
  211. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/NumericTableWidgetItem.py +0 -0
  212. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/OkCompactSpinBox.cpp +0 -0
  213. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/OkCompactSpinBox.py +0 -0
  214. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/SortingTableWidgetItem.cpp +0 -0
  215. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/SortingTableWidgetItem.py +0 -0
  216. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/StartLoadingDialog.cpp +0 -0
  217. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/StartLoadingDialog.py +0 -0
  218. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/StatusBar.cpp +0 -0
  219. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/StatusBar.py +0 -0
  220. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/Tab.cpp +0 -0
  221. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/Tab.py +0 -0
  222. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/TabWidget.cpp +0 -0
  223. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/TabWidget.py +0 -0
  224. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/UpdateConfigWidgetItem.cpp +0 -0
  225. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/UpdateConfigWidgetItem.py +0 -0
  226. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/WidgetWithVLabel.cpp +0 -0
  227. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/WidgetWithVLabel.py +0 -0
  228. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/YesNonWidgetItem.cpp +0 -0
  229. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/YesNonWidgetItem.py +0 -0
  230. {ok_script-1.0.136 → ok_script-1.0.138}/ok/gui/widget/__init__.py +0 -0
  231. {ok_script-1.0.136 → ok_script-1.0.138}/ok/ocr/__init__.py +0 -0
  232. {ok_script-1.0.136 → ok_script-1.0.138}/ok/ocr/download_paddle_model.py +0 -0
  233. {ok_script-1.0.136 → ok_script-1.0.138}/ok/ok.cpp +0 -0
  234. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Foundation/Collections.cpp +0 -0
  235. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  236. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  237. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  238. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  239. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  240. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  241. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  242. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  243. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  244. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Media/__init__.py +0 -0
  245. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  246. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Security/__init__.py +0 -0
  247. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  248. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/Storage/__init__.py +0 -0
  249. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/Windows/__init__.py +0 -0
  250. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/__init__.py +0 -0
  251. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/delegate.py +0 -0
  252. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/export.py +0 -0
  253. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/idldsl.py +0 -0
  254. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/inspectable.py +0 -0
  255. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/roapi.py +0 -0
  256. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/types.py +0 -0
  257. {ok_script-1.0.136 → ok_script-1.0.138}/ok/rotypes/winstring.py +0 -0
  258. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/DiagnosisTask.py +0 -0
  259. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/TaskExecutor.cpp +0 -0
  260. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/TaskExecutor.py +0 -0
  261. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/__init__.py +0 -0
  262. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/exceptions.py +0 -0
  263. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/task.cpp +0 -0
  264. {ok_script-1.0.136 → ok_script-1.0.138}/ok/task/task.py +0 -0
  265. {ok_script-1.0.136 → ok_script-1.0.138}/ok/test/OKTestRunner.py +0 -0
  266. {ok_script-1.0.136 → ok_script-1.0.138}/ok/test/RunTests.py +0 -0
  267. {ok_script-1.0.136 → ok_script-1.0.138}/ok/test/TaskTestCase.py +0 -0
  268. {ok_script-1.0.136 → ok_script-1.0.138}/ok/test/__init__.py +0 -0
  269. {ok_script-1.0.136 → ok_script-1.0.138}/ok/third_party/__init__.py +0 -0
  270. {ok_script-1.0.136 → ok_script-1.0.138}/ok/third_party/paperclip.py +0 -0
  271. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/GitUpdater.py +0 -0
  272. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/__init__.py +0 -0
  273. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/copy_ok_folder.py +0 -0
  274. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/gen_md5.py +0 -0
  275. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/init_launcher_env.py +0 -0
  276. {ok_script-1.0.136 → ok_script-1.0.138}/ok/update/inline_ok_requirements.py +0 -0
  277. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/Analytics.py +0 -0
  278. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/GlobalConfig.py +0 -0
  279. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/__init__.py +0 -0
  280. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/clazz.py +0 -0
  281. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/collection.py +0 -0
  282. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/color.py +0 -0
  283. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/config.py +0 -0
  284. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/file.py +0 -0
  285. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/gpu_driver_settings.py +0 -0
  286. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/handler.py +0 -0
  287. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/i18n.py +0 -0
  288. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/logger.py +0 -0
  289. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/logs/ok-script.log +0 -0
  290. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/partial_sync_repo.py +0 -0
  291. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/print_hwnd.py +0 -0
  292. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/process.py +0 -0
  293. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/window.py +0 -0
  294. {ok_script-1.0.136 → ok_script-1.0.138}/ok/util/windows_schedule.py +0 -0
  295. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/SOURCES.txt +0 -0
  296. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/dependency_links.txt +0 -0
  297. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/entry_points.txt +0 -0
  298. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/not-zip-safe +0 -0
  299. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/requires.txt +0 -0
  300. {ok_script-1.0.136 → ok_script-1.0.138}/ok_script.egg-info/top_level.txt +0 -0
  301. {ok_script-1.0.136 → ok_script-1.0.138}/setup.cfg +0 -0
  302. {ok_script-1.0.136 → ok_script-1.0.138}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ok-script
3
- Version: 1.0.136
3
+ Version: 1.0.138
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Home-page: https://github.com/ok-oldking/ok-script
6
6
  Author: ok-oldking
@@ -13,9 +13,13 @@ logger = Logger.get_logger(__name__)
13
13
 
14
14
 
15
15
  class StartController(QObject):
16
- def __init__(self, app_config, exit_event):
17
- super().__init__()
18
- self.config = app_config
16
+ STARTED_WINDOW_MIN_SIZE = (100, 100)
17
+ STARTED_WINDOW_STABLE_SECONDS = 10
18
+ STARTED_WINDOW_POLL_INTERVAL = 0.2
19
+
20
+ def __init__(self, app_config, exit_event):
21
+ super().__init__()
22
+ self.config = app_config
19
23
  self.exit_event = exit_event
20
24
  self.handler = Handler(exit_event, __name__)
21
25
  self.start_timeout = app_config.get('start_timeout', 60)
@@ -103,9 +107,9 @@ class StartController(QObject):
103
107
  communicate.starting_emulator.emit(True, self.tr(f'Start failed: {e}'), 0)
104
108
  return False
105
109
 
106
- def _wait_until_device_ready(self):
107
- wait_until = time.time() + self.start_timeout
108
- while not self.exit_event.is_set():
110
+ def _wait_until_device_ready(self):
111
+ wait_until = time.time() + self.start_timeout
112
+ while not self.exit_event.is_set():
109
113
  og.device_manager.do_refresh(True)
110
114
  error = self.check_device_error()
111
115
  if error is None:
@@ -116,11 +120,42 @@ class StartController(QObject):
116
120
  communicate.starting_emulator.emit(True, self.tr('Start game timeout!'), 0)
117
121
  return False
118
122
  communicate.starting_emulator.emit(False, None, int(remaining_time))
119
- time.sleep(2)
120
- return False
121
-
122
- def start_device(self):
123
- device = og.device_manager.get_preferred_device()
123
+ time.sleep(2)
124
+ return False
125
+
126
+ def _wait_until_started_window_stable(self):
127
+ wait_until = time.monotonic() + self.start_timeout
128
+ stable_size = None
129
+ stable_since = None
130
+ min_width, min_height = self.STARTED_WINDOW_MIN_SIZE
131
+
132
+ while not self.exit_event.is_set():
133
+ hwnd_window = getattr(og.device_manager, 'hwnd_window', None)
134
+ if hwnd_window is not None:
135
+ hwnd_window.do_update_window_size()
136
+ size = (hwnd_window.width, hwnd_window.height)
137
+ if hwnd_window.hwnd and size[0] >= min_width and size[1] >= min_height:
138
+ now = time.monotonic()
139
+ if size != stable_size:
140
+ logger.info(f'waiting for started window to stabilize, current size {size[0]}x{size[1]}')
141
+ stable_size = size
142
+ stable_since = now
143
+ elif now - stable_since >= self.STARTED_WINDOW_STABLE_SECONDS:
144
+ logger.info(f'started window size stable for {self.STARTED_WINDOW_STABLE_SECONDS}s: {size[0]}x{size[1]}')
145
+ return True
146
+ else:
147
+ stable_size = None
148
+ stable_since = None
149
+
150
+ remaining_time = wait_until - time.monotonic()
151
+ if remaining_time <= 0:
152
+ communicate.starting_emulator.emit(True, self.tr('Start game timeout!'), 0)
153
+ return False
154
+ time.sleep(self.STARTED_WINDOW_POLL_INTERVAL)
155
+ return False
156
+
157
+ def start_device(self):
158
+ device = og.device_manager.get_preferred_device()
124
159
  logger.info(f'start_device: {device}')
125
160
 
126
161
  if device and not device['connected']:
@@ -137,11 +172,13 @@ class StartController(QObject):
137
172
  dx11_config = og.global_config.get_config('Launch with DX11')
138
173
  if dx11_config and dx11_config.get('Launch with DX11'):
139
174
  args = "-dx11 -d3d11 -force-d3d11"
140
- if not execute(path, arguments=args):
141
- communicate.starting_emulator.emit(True, self.tr("Start game failed, please start game first"), 0)
142
- return False
143
- if not self._wait_until_device_ready():
144
- return False
175
+ if not execute(path, arguments=args):
176
+ communicate.starting_emulator.emit(True, self.tr("Start game failed, please start game first"), 0)
177
+ return False
178
+ if device['device'] == "windows" and not self._wait_until_started_window_stable():
179
+ return False
180
+ if not self._wait_until_device_ready():
181
+ return False
145
182
  else:
146
183
  communicate.starting_emulator.emit(True,
147
184
  self.tr('Game path does not exist, Please open game manually!'), 0)
@@ -1,142 +1,150 @@
1
- from PySide6.QtCore import Signal
2
- from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QWidget
3
- from qfluentwidgets import (
4
- BodyLabel, FlowLayout, MessageBoxBase, SubtitleLabel, ListWidget, PushButton, FluentIcon,
5
- LineEdit
6
- )
7
-
8
- from ok import og
9
-
10
-
11
- class ModifyListDialog(MessageBoxBase):
12
- list_modified = Signal(list)
13
-
14
- def __init__(self, items, parent, options_available=None, allow_duplication=False):
15
- super().__init__(parent)
16
- self.original_items = list(items)
17
- self.options_available = list(options_available) if options_available is not None else None
18
- self.allow_duplication = allow_duplication
19
- self.list_widget = ListWidget()
20
- self.option_buttons = {}
21
- self.source_by_display = {}
22
-
23
- if self.options_available is None:
24
- self.list_widget.addItems(self.original_items)
25
- else:
26
- self.source_by_display = {
27
- og.app.tr(option): option for option in self.options_available
28
- }
29
- self.list_widget.addItems([
30
- og.app.tr(item) for item in self.original_items if item in self.options_available
31
- ])
32
-
33
- self.move_up_button = PushButton(FluentIcon.UP, self.tr("Move Up"))
34
- self.move_up_button.clicked.connect(self.move_up)
1
+ from PySide6.QtCore import Signal, Qt
2
+ from PySide6.QtWidgets import QHBoxLayout, QScrollArea, QVBoxLayout, QWidget
3
+ from qfluentwidgets import (
4
+ BodyLabel, FlowLayout, MessageBoxBase, SubtitleLabel, ListWidget, PushButton, FluentIcon,
5
+ LineEdit
6
+ )
7
+
8
+ from ok import og
9
+
10
+
11
+ class ModifyListDialog(MessageBoxBase):
12
+ list_modified = Signal(list)
13
+
14
+ def __init__(self, items, parent, options_available=None, allow_duplication=False):
15
+ super().__init__(parent)
16
+ self.original_items = list(items)
17
+ self.options_available = list(options_available) if options_available is not None else None
18
+ self.allow_duplication = allow_duplication
19
+ self.list_widget = ListWidget()
20
+ self.option_buttons = {}
21
+ self.source_by_display = {}
22
+
23
+ if self.options_available is None:
24
+ self.list_widget.addItems(self.original_items)
25
+ else:
26
+ self.source_by_display = {
27
+ og.app.tr(option): option for option in self.options_available
28
+ }
29
+ self.list_widget.addItems([
30
+ og.app.tr(item) for item in self.original_items if item in self.options_available
31
+ ])
32
+
33
+ self.move_up_button = PushButton(FluentIcon.UP, self.tr("Move Up"))
34
+ self.move_up_button.clicked.connect(self.move_up)
35
35
 
36
36
  self.move_down_button = PushButton(FluentIcon.DOWN, self.tr("Move Down"))
37
37
  self.move_down_button.clicked.connect(self.move_down)
38
38
 
39
- self.add_button = None
40
- if self.options_available is None:
41
- self.add_button = PushButton(FluentIcon.ADD, self.tr("Add"))
42
- self.add_button.clicked.connect(self.add_item)
43
-
44
- self.remove_button = PushButton(FluentIcon.REMOVE, self.tr("Remove"))
45
- self.remove_button.clicked.connect(self.remove_item)
46
- self.list_widget.itemSelectionChanged.connect(self.update_list_actions)
47
- self._match_list_action_widths()
48
-
49
- self.yesButton.clicked.connect(self.confirm)
39
+ self.add_button = None
40
+ if self.options_available is None:
41
+ self.add_button = PushButton(FluentIcon.ADD, self.tr("Add"))
42
+ self.add_button.clicked.connect(self.add_item)
43
+
44
+ self.remove_button = PushButton(FluentIcon.REMOVE, self.tr("Remove"))
45
+ self.remove_button.clicked.connect(self.remove_item)
46
+ self.list_widget.itemSelectionChanged.connect(self.update_list_actions)
47
+ self._match_list_action_widths()
48
+
49
+ self.yesButton.clicked.connect(self.confirm)
50
50
 
51
51
  self.cancelButton.clicked.connect(self.cancel)
52
52
 
53
- list_layout = self._create_selected_list_layout()
54
-
55
- if self.options_available is None:
56
- self.viewLayout.addLayout(list_layout)
57
- else:
58
- available_layout = QVBoxLayout()
59
- available_layout.addWidget(SubtitleLabel(self.tr("Available Options"), self))
60
- available_layout.addWidget(BodyLabel(self.tr("Click an option to add it."), self))
61
- available_layout.addWidget(self._create_available_options_widget(), stretch=1)
62
-
63
- selected_layout = QVBoxLayout()
64
- selected_layout.addWidget(SubtitleLabel(self.tr("Selected Options"), self))
65
- selected_layout.addLayout(list_layout)
66
-
67
- options_layout = QHBoxLayout()
68
- options_layout.addLayout(available_layout, stretch=2)
69
- options_layout.addLayout(selected_layout, stretch=1)
70
- self.viewLayout.addLayout(options_layout)
71
-
72
- self.yesButton.setText(self.tr("Confirm"))
73
- self.cancelButton.setText(self.tr("Cancel"))
74
- self._wrap_dialog_buttons()
75
- if self.options_available is None:
76
- self.widget.setMinimumHeight(520)
77
- else:
78
- self.widget.setMinimumSize(840, 600)
79
- self.update_list_actions()
80
- self.update_option_buttons()
81
-
82
- def _create_selected_list_layout(self):
83
- actions_layout = QVBoxLayout()
84
- actions_layout.addWidget(self.move_up_button)
85
- actions_layout.addWidget(self.move_down_button)
86
- if self.options_available is None:
87
- actions_layout.addWidget(self.add_button)
88
- actions_layout.addWidget(self.remove_button)
89
- actions_layout.addStretch(1)
90
-
91
- list_layout = QHBoxLayout()
92
- list_layout.addWidget(self.list_widget)
93
- list_layout.addLayout(actions_layout)
94
- return list_layout
95
-
96
- def _create_available_options_widget(self):
97
- widget = QWidget()
98
- layout = FlowLayout(widget, False)
99
- layout.setContentsMargins(0, 0, 0, 0)
100
- layout.setHorizontalSpacing(10)
101
- layout.setVerticalSpacing(10)
102
- for option in self.options_available:
103
- button = PushButton(FluentIcon.ADD, og.app.tr(option))
104
- button.clicked.connect(lambda checked=False, value=option: self.add_available_item(value))
105
- layout.addWidget(button)
106
- self.option_buttons[option] = button
107
- return widget
108
-
109
- def _match_list_action_widths(self):
110
- buttons = [self.move_up_button, self.move_down_button, self.remove_button]
111
- if self.options_available is None:
112
- buttons.append(self.add_button)
113
- width = max(button.sizeHint().width() for button in buttons)
114
- for button in buttons:
115
- button.setFixedWidth(width)
116
-
117
- def update_list_actions(self):
118
- row = self.list_widget.currentRow()
119
- has_selection = row >= 0
120
- self.move_up_button.setEnabled(has_selection and row > 0)
121
- self.move_down_button.setEnabled(has_selection and row < self.list_widget.count() - 1)
122
- self.remove_button.setEnabled(has_selection)
123
- self.update_option_buttons()
124
-
125
- def update_option_buttons(self):
126
- if self.options_available is None:
127
- return
128
-
129
- selected_options = {
130
- self.list_widget.item(i).text() for i in range(self.list_widget.count())
131
- }
132
- for option, button in self.option_buttons.items():
133
- button.setEnabled(self.allow_duplication or og.app.tr(option) not in selected_options)
134
-
135
- def _wrap_dialog_buttons(self):
136
- self.yesButton.setFixedWidth(self.yesButton.sizeHint().width() * 2)
137
- self.cancelButton.setFixedWidth(self.cancelButton.sizeHint().width() * 2)
138
-
139
- def move_up(self):
53
+ list_layout = self._create_selected_list_layout()
54
+
55
+ if self.options_available is None:
56
+ self.viewLayout.addLayout(list_layout)
57
+ else:
58
+ available_layout = QVBoxLayout()
59
+ available_layout.addWidget(SubtitleLabel(self.tr("Available Options"), self))
60
+ available_layout.addWidget(BodyLabel(self.tr("Click an option to add it."), self))
61
+ available_scroll_area = QScrollArea(self)
62
+ available_scroll_area.setWidgetResizable(True)
63
+ available_scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
64
+ available_scroll_area.setFrameShape(QScrollArea.NoFrame)
65
+ available_scroll_area.setStyleSheet("QScrollArea { background-color: transparent; border: none; }")
66
+ available_scroll_area.viewport().setStyleSheet("background-color: transparent;")
67
+ available_scroll_area.setWidget(self._create_available_options_widget())
68
+ available_layout.addWidget(available_scroll_area, stretch=1)
69
+
70
+ selected_layout = QVBoxLayout()
71
+ selected_layout.addWidget(SubtitleLabel(self.tr("Selected Options"), self))
72
+ selected_layout.addLayout(list_layout)
73
+
74
+ options_layout = QHBoxLayout()
75
+ options_layout.addLayout(available_layout, stretch=2)
76
+ options_layout.addLayout(selected_layout, stretch=1)
77
+ self.viewLayout.addLayout(options_layout)
78
+
79
+ self.yesButton.setText(self.tr("Confirm"))
80
+ self.cancelButton.setText(self.tr("Cancel"))
81
+ self._wrap_dialog_buttons()
82
+ if self.options_available is None:
83
+ self.widget.setMinimumHeight(520)
84
+ else:
85
+ self.widget.setMinimumSize(840, 600)
86
+ self.update_list_actions()
87
+ self.update_option_buttons()
88
+
89
+ def _create_selected_list_layout(self):
90
+ actions_layout = QVBoxLayout()
91
+ actions_layout.addWidget(self.move_up_button)
92
+ actions_layout.addWidget(self.move_down_button)
93
+ if self.options_available is None:
94
+ actions_layout.addWidget(self.add_button)
95
+ actions_layout.addWidget(self.remove_button)
96
+ actions_layout.addStretch(1)
97
+
98
+ list_layout = QHBoxLayout()
99
+ list_layout.addWidget(self.list_widget)
100
+ list_layout.addLayout(actions_layout)
101
+ return list_layout
102
+
103
+ def _create_available_options_widget(self):
104
+ widget = QWidget()
105
+ widget.setStyleSheet("background-color: transparent;")
106
+ layout = FlowLayout(widget, False)
107
+ layout.setContentsMargins(0, 0, 0, 0)
108
+ layout.setHorizontalSpacing(10)
109
+ layout.setVerticalSpacing(10)
110
+ for option in self.options_available:
111
+ button = PushButton(FluentIcon.ADD, og.app.tr(option))
112
+ button.clicked.connect(lambda checked=False, value=option: self.add_available_item(value))
113
+ layout.addWidget(button)
114
+ self.option_buttons[option] = button
115
+ return widget
116
+
117
+ def _match_list_action_widths(self):
118
+ buttons = [self.move_up_button, self.move_down_button, self.remove_button]
119
+ if self.options_available is None:
120
+ buttons.append(self.add_button)
121
+ width = max(button.sizeHint().width() for button in buttons)
122
+ for button in buttons:
123
+ button.setFixedWidth(width)
124
+
125
+ def update_list_actions(self):
126
+ row = self.list_widget.currentRow()
127
+ has_selection = row >= 0
128
+ self.move_up_button.setEnabled(has_selection and row > 0)
129
+ self.move_down_button.setEnabled(has_selection and row < self.list_widget.count() - 1)
130
+ self.remove_button.setEnabled(has_selection)
131
+ self.update_option_buttons()
132
+
133
+ def update_option_buttons(self):
134
+ if self.options_available is None:
135
+ return
136
+
137
+ selected_options = {
138
+ self.list_widget.item(i).text() for i in range(self.list_widget.count())
139
+ }
140
+ for option, button in self.option_buttons.items():
141
+ button.setEnabled(self.allow_duplication or og.app.tr(option) not in selected_options)
142
+
143
+ def _wrap_dialog_buttons(self):
144
+ self.yesButton.setFixedWidth(self.yesButton.sizeHint().width() * 2)
145
+ self.cancelButton.setFixedWidth(self.cancelButton.sizeHint().width() * 2)
146
+
147
+ def move_up(self):
140
148
  current_row = self.list_widget.currentRow()
141
149
  if current_row >= 1:
142
150
  item = self.list_widget.takeItem(current_row)
@@ -150,32 +158,32 @@ class ModifyListDialog(MessageBoxBase):
150
158
  self.list_widget.insertItem(current_row + 1, item)
151
159
  self.list_widget.setCurrentRow(current_row + 1)
152
160
 
153
- def add_item(self):
154
- w = AddTextMessageBox(self.window())
155
- if w.exec():
156
- self.list_widget.addItem(w.add_text_edit.text())
157
- self.list_widget.setCurrentRow(self.list_widget.count() - 1)
158
-
159
- def add_available_item(self, option):
160
- text = og.app.tr(option)
161
- if self.allow_duplication or all(
162
- self.list_widget.item(i).text() != text for i in range(self.list_widget.count())
163
- ):
164
- self.list_widget.addItem(text)
165
- self.list_widget.setCurrentRow(self.list_widget.count() - 1)
166
- self.update_option_buttons()
167
-
168
- def remove_item(self):
169
- current_row = self.list_widget.currentRow()
170
- if current_row >= 0:
171
- self.list_widget.takeItem(current_row)
172
- self.update_list_actions()
173
-
174
- def confirm(self):
175
- items_text = [self.list_widget.item(i).text() for i in range(self.list_widget.count())]
176
- if self.options_available is not None:
177
- items_text = [self.source_by_display[text] for text in items_text]
178
- self.list_modified.emit(items_text)
161
+ def add_item(self):
162
+ w = AddTextMessageBox(self.window())
163
+ if w.exec():
164
+ self.list_widget.addItem(w.add_text_edit.text())
165
+ self.list_widget.setCurrentRow(self.list_widget.count() - 1)
166
+
167
+ def add_available_item(self, option):
168
+ text = og.app.tr(option)
169
+ if self.allow_duplication or all(
170
+ self.list_widget.item(i).text() != text for i in range(self.list_widget.count())
171
+ ):
172
+ self.list_widget.addItem(text)
173
+ self.list_widget.setCurrentRow(self.list_widget.count() - 1)
174
+ self.update_option_buttons()
175
+
176
+ def remove_item(self):
177
+ current_row = self.list_widget.currentRow()
178
+ if current_row >= 0:
179
+ self.list_widget.takeItem(current_row)
180
+ self.update_list_actions()
181
+
182
+ def confirm(self):
183
+ items_text = [self.list_widget.item(i).text() for i in range(self.list_widget.count())]
184
+ if self.options_available is not None:
185
+ items_text = [self.source_by_display[text] for text in items_text]
186
+ self.list_modified.emit(items_text)
179
187
  self.close()
180
188
 
181
189
  def cancel(self):
@@ -198,10 +206,10 @@ class AddTextMessageBox(MessageBoxBase):
198
206
  self.viewLayout.addWidget(self.add_text_edit)
199
207
 
200
208
  # change the text of button
201
- self.yesButton.setText(self.tr('Confirm'))
202
- self.cancelButton.setText(self.tr('Cancel'))
203
- self.yesButton.setFixedWidth(self.yesButton.sizeHint().width() * 2)
204
- self.cancelButton.setFixedWidth(self.cancelButton.sizeHint().width() * 2)
209
+ self.yesButton.setText(self.tr('Confirm'))
210
+ self.cancelButton.setText(self.tr('Cancel'))
211
+ self.yesButton.setFixedWidth(self.yesButton.sizeHint().width() * 2)
212
+ self.cancelButton.setFixedWidth(self.cancelButton.sizeHint().width() * 2)
205
213
 
206
214
  self.widget.setMinimumWidth(360)
207
215
  self.yesButton.setDisabled(True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ok-script
3
- Version: 1.0.136
3
+ Version: 1.0.138
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Home-page: https://github.com/ok-oldking/ok-script
6
6
  Author: ok-oldking
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes