frontengine 1.0.52__tar.gz → 1.0.54__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 (249) hide show
  1. {frontengine-1.0.52 → frontengine-1.0.54}/PKG-INFO +1 -1
  2. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/app_profile_dialog.py +6 -10
  3. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/clipboard_dialog.py +11 -18
  4. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/reminder_dialog.py +6 -10
  5. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/remote_control_dialog.py +12 -19
  6. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/screen_privacy_dialog.py +4 -6
  7. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/screen_text_dialog.py +4 -6
  8. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/signage_dialog.py +9 -15
  9. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/smart_pause_dialog.py +9 -14
  10. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/usage_report_dialog.py +7 -12
  11. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/window_pin_dialog.py +5 -9
  12. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/settings_menu.py +21 -12
  13. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/control_center/control_center_ui.py +2 -4
  14. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/focus/focus_setting_ui.py +9 -22
  15. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/gif/gif_setting_ui.py +11 -23
  16. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/image/image_setting_ui.py +17 -39
  17. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/particle/particle_setting_ui.py +12 -25
  18. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/pet/pet_setting_ui.py +24 -60
  19. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/presentation/presentation_setting_ui.py +19 -54
  20. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_manager.py +6 -12
  21. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +8 -3
  22. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/gif.py +3 -6
  23. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/image.py +3 -6
  24. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/sound.py +5 -8
  25. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/text.py +3 -6
  26. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/video.py +3 -6
  27. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/web.py +3 -6
  28. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/screen_care/screen_care_setting_ui.py +14 -39
  29. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +8 -14
  30. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/text/text_setting_ui.py +15 -33
  31. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/tools/tools_setting_ui.py +25 -48
  32. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/video/video_setting_ui.py +12 -25
  33. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/wallpaper/wallpaper_setting_ui.py +15 -44
  34. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/web/web_setting_ui.py +13 -31
  35. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/widgets/widgets_setting_ui.py +17 -28
  36. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/retranslate.py +31 -3
  37. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/PKG-INFO +1 -1
  38. {frontengine-1.0.52 → frontengine-1.0.54}/pyproject.toml +1 -1
  39. {frontengine-1.0.52 → frontengine-1.0.54}/LICENSE +0 -0
  40. {frontengine-1.0.52 → frontengine-1.0.54}/README.md +0 -0
  41. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/__init__.py +0 -0
  42. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/__main__.py +0 -0
  43. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/__init__.py +0 -0
  44. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/base_widget.py +0 -0
  45. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/camera/__init__.py +0 -0
  46. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/camera/camera_widget.py +0 -0
  47. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/canvas/__init__.py +0 -0
  48. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/canvas/whiteboard_widget.py +0 -0
  49. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/capture/__init__.py +0 -0
  50. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/capture/region_capture.py +0 -0
  51. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/focus_shield/__init__.py +0 -0
  52. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/focus_shield/focus_shield_widget.py +0 -0
  53. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/gif/__init__.py +0 -0
  54. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/gif/paint_gif.py +0 -0
  55. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/image/__init__.py +0 -0
  56. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/image/paint_image.py +0 -0
  57. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/load/__init__.py +0 -0
  58. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/load/load_someone_make_ui.py +0 -0
  59. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/measure/__init__.py +0 -0
  60. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/measure/measure_widget.py +0 -0
  61. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/monitor/__init__.py +0 -0
  62. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/monitor/monitor_widget.py +0 -0
  63. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/notes/__init__.py +0 -0
  64. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/notes/sticky_note_widget.py +0 -0
  65. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/overlay_factory.py +0 -0
  66. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/particle/__init__.py +0 -0
  67. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/particle/particle_ui.py +0 -0
  68. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/pet/__init__.py +0 -0
  69. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/pet/desktop_pet.py +0 -0
  70. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/presentation/__init__.py +0 -0
  71. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/presentation/annotation_overlay.py +0 -0
  72. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/presentation/cursor_effects.py +0 -0
  73. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/presentation/keystroke_display.py +0 -0
  74. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/presentation/magnifier.py +0 -0
  75. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/scene/__init__.py +0 -0
  76. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  77. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/scene/extend_graphic_view.py +0 -0
  78. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/scene/scene.py +0 -0
  79. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/screen_care/__init__.py +0 -0
  80. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/screen_care/color_vision_widget.py +0 -0
  81. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/screen_care/screen_filter.py +0 -0
  82. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/sound_player/__init__.py +0 -0
  83. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/sound_player/sound_effect.py +0 -0
  84. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/sound_player/sound_player.py +0 -0
  85. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/spectrum/__init__.py +0 -0
  86. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/spectrum/spectrum_widget.py +0 -0
  87. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/text/__init__.py +0 -0
  88. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/text/draw_text.py +0 -0
  89. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/toast/__init__.py +0 -0
  90. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/toast/toast_widget.py +0 -0
  91. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/video/__init__.py +0 -0
  92. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/video/video_player.py +0 -0
  93. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/wallpaper/__init__.py +0 -0
  94. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/wallpaper/wallpaper_widget.py +0 -0
  95. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/web/__init__.py +0 -0
  96. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/web/webview.py +0 -0
  97. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/show/window_helpers.py +0 -0
  98. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/system_tray/__init__.py +0 -0
  99. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/system_tray/extend_system_tray.py +0 -0
  100. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/__init__.py +0 -0
  101. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/color/__init__.py +0 -0
  102. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/color/global_color.py +0 -0
  103. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/__init__.py +0 -0
  104. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  105. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
  106. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/main_ui.py +0 -0
  107. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/__init__.py +0 -0
  108. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/help_menu.py +0 -0
  109. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/how_to_menu.py +0 -0
  110. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/language_menu.py +0 -0
  111. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/menu/preset_menu.py +0 -0
  112. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/__init__.py +0 -0
  113. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/control_center/__init__.py +0 -0
  114. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/focus/__init__.py +0 -0
  115. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/gif/__init__.py +0 -0
  116. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/image/__init__.py +0 -0
  117. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/particle/__init__.py +0 -0
  118. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/pet/__init__.py +0 -0
  119. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/presentation/__init__.py +0 -0
  120. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  121. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
  122. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
  123. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  124. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/screen_care/__init__.py +0 -0
  125. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/sound_player/__init__.py +0 -0
  126. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/text/__init__.py +0 -0
  127. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/tools/__init__.py +0 -0
  128. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/utils.py +0 -0
  129. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/video/__init__.py +0 -0
  130. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/wallpaper/__init__.py +0 -0
  131. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/web/__init__.py +0 -0
  132. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/ui/page/widgets/__init__.py +0 -0
  133. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/user_setting/__init__.py +0 -0
  134. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/user_setting/preset_repository.py +0 -0
  135. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/user_setting/scene_setting.py +0 -0
  136. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/user_setting/user_setting_file.py +0 -0
  137. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/__init__.py +0 -0
  138. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/app_profile/__init__.py +0 -0
  139. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/app_profile/app_profile_service.py +0 -0
  140. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/__init__.py +0 -0
  141. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/audio_envelope.py +0 -0
  142. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/loopback_capture.py +0 -0
  143. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/microphone_meter.py +0 -0
  144. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/screen_audio.py +0 -0
  145. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/spectrum_analyzer.py +0 -0
  146. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/audio_meter/system_audio_meter.py +0 -0
  147. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/autostart/__init__.py +0 -0
  148. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/autostart/autostart_service.py +0 -0
  149. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/break_reminder/__init__.py +0 -0
  150. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/break_reminder/break_reminder.py +0 -0
  151. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/browser/__init__.py +0 -0
  152. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/browser/browser.py +0 -0
  153. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/clipboard/__init__.py +0 -0
  154. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/clipboard/clipboard_history.py +0 -0
  155. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/clipboard/clipboard_watcher.py +0 -0
  156. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/color_vision/__init__.py +0 -0
  157. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/color_vision/color_vision.py +0 -0
  158. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/critical_exit/__init__.py +0 -0
  159. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  160. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  161. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  162. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/exception/__init__.py +0 -0
  163. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/exception/exception_tags.py +0 -0
  164. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/exception/exceptions.py +0 -0
  165. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/focus_shield/__init__.py +0 -0
  166. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/focus_shield/focus_shield.py +0 -0
  167. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/focus_timer/__init__.py +0 -0
  168. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/focus_timer/focus_timer.py +0 -0
  169. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/hotkey/__init__.py +0 -0
  170. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/hotkey/hotkey_service.py +0 -0
  171. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/input_watch/__init__.py +0 -0
  172. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/input_watch/input_watch_service.py +0 -0
  173. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/json/__init__.py +0 -0
  174. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/json/json_file.py +0 -0
  175. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/json/json_repository.py +0 -0
  176. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/logging/__init__.py +0 -0
  177. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/logging/loggin_instance.py +0 -0
  178. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/measure/__init__.py +0 -0
  179. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/measure/measure.py +0 -0
  180. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/midi/__init__.py +0 -0
  181. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/midi/midi_input.py +0 -0
  182. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/__init__.py +0 -0
  183. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/english.py +0 -0
  184. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/france.py +0 -0
  185. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/germany.py +0 -0
  186. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/italy.py +0 -0
  187. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  188. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/russian.py +0 -0
  189. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
  190. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/multi_language/traditional_chinese.py +0 -0
  191. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/now_playing/__init__.py +0 -0
  192. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/now_playing/now_playing.py +0 -0
  193. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/pet_chat/__init__.py +0 -0
  194. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/pet_chat/pet_chat_service.py +0 -0
  195. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/platform_info/__init__.py +0 -0
  196. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/platform_info/platform_info.py +0 -0
  197. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/playlist/__init__.py +0 -0
  198. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/playlist/playlist.py +0 -0
  199. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/plugins/__init__.py +0 -0
  200. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/plugins/plugin_loader.py +0 -0
  201. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/power_mode/__init__.py +0 -0
  202. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/power_mode/power_mode.py +0 -0
  203. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/preset_schedule/__init__.py +0 -0
  204. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
  205. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/recording/__init__.py +0 -0
  206. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/recording/frame_recorder.py +0 -0
  207. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/recording/gif_writer.py +0 -0
  208. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/redirect_manager/__init__.py +0 -0
  209. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  210. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/reminder/__init__.py +0 -0
  211. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/reminder/reminder_service.py +0 -0
  212. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/remote/__init__.py +0 -0
  213. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/remote/remote_server.py +0 -0
  214. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/screen_privacy/__init__.py +0 -0
  215. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/screen_privacy/capture_affinity.py +0 -0
  216. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/screen_privacy/share_watch.py +0 -0
  217. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/screen_text/__init__.py +0 -0
  218. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/screen_text/screen_text_service.py +0 -0
  219. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/signage/__init__.py +0 -0
  220. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/signage/signage_service.py +0 -0
  221. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/smart_pause/__init__.py +0 -0
  222. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/smart_pause/pause_rules.py +0 -0
  223. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
  224. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/system_stats/__init__.py +0 -0
  225. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/system_stats/system_stats.py +0 -0
  226. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/text_source/__init__.py +0 -0
  227. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/text_source/text_source.py +0 -0
  228. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/theme_schedule/__init__.py +0 -0
  229. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
  230. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/usage_tracking/__init__.py +0 -0
  231. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/usage_tracking/usage_service.py +0 -0
  232. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/usage_tracking/usage_tracker.py +0 -0
  233. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/virtual_camera/__init__.py +0 -0
  234. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/virtual_camera/camera_feed.py +0 -0
  235. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/virtual_camera/virtual_camera.py +0 -0
  236. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/weather/__init__.py +0 -0
  237. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/weather/weather_service.py +0 -0
  238. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/web_url.py +0 -0
  239. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/window_pin/__init__.py +0 -0
  240. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/window_pin/window_layout.py +0 -0
  241. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/window_pin/window_pin.py +0 -0
  242. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/workshop/__init__.py +0 -0
  243. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine/utils/workshop/workshop_content.py +0 -0
  244. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/SOURCES.txt +0 -0
  245. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/dependency_links.txt +0 -0
  246. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/entry_points.txt +0 -0
  247. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/requires.txt +0 -0
  248. {frontengine-1.0.52 → frontengine-1.0.54}/frontengine.egg-info/top_level.txt +0 -0
  249. {frontengine-1.0.52 → frontengine-1.0.54}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.52
3
+ Version: 1.0.54
4
4
  Summary: FrontEngine is use-define frontview or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
@@ -20,7 +20,7 @@ from frontengine.user_setting.user_setting_file import user_setting_dict, write_
20
20
  from frontengine.utils.app_profile.app_profile_service import normalize_profiles
21
21
  from frontengine.utils.logging.loggin_instance import front_engine_logger
22
22
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
23
- from frontengine.utils.multi_language.retranslate import retranslator
23
+ from frontengine.utils.multi_language.retranslate import tr
24
24
  from frontengine.utils.smart_pause.pause_rules import normalize_app_name
25
25
 
26
26
 
@@ -50,17 +50,13 @@ class AppProfileDialog(QDialog):
50
50
  self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
51
51
  self.table.horizontalHeader().setStretchLastSection(True)
52
52
 
53
- self.add_button = QPushButton(_t("app_profile_add", "Add"))
54
- retranslator.bind(self.add_button, "app_profile_add", "Add")
53
+ self.add_button = tr(QPushButton(), "app_profile_add", "Add")
55
54
  self.add_button.clicked.connect(lambda: self.add_row("", ""))
56
- self.remove_button = QPushButton(_t("app_profile_remove", "Remove"))
57
- retranslator.bind(self.remove_button, "app_profile_remove", "Remove")
55
+ self.remove_button = tr(QPushButton(), "app_profile_remove", "Remove")
58
56
  self.remove_button.clicked.connect(self.remove_selected_row)
59
- self.hint_label = QLabel(
60
- _t("app_profile_hint",
61
- "Presets are saved from the Presets menu. Without any saved preset "
62
- "there is nothing to apply."))
63
- retranslator.bind(self.hint_label, "app_profile_hint", "Presets are saved from the Presets menu. Without any saved preset " "there is nothing to apply.")
57
+ self.hint_label = tr(QLabel(), "app_profile_hint",
58
+ "Presets are saved from the Presets menu. Without any saved preset "
59
+ "there is nothing to apply.")
64
60
  self.hint_label.setWordWrap(True)
65
61
 
66
62
  self.button_box = QDialogButtonBox(
@@ -25,7 +25,7 @@ from frontengine.user_setting.user_setting_file import user_setting_dict, write_
25
25
  from frontengine.utils.clipboard.clipboard_history import ClipboardHistory, preview
26
26
  from frontengine.utils.logging.loggin_instance import front_engine_logger
27
27
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
28
- from frontengine.utils.multi_language.retranslate import retranslator
28
+ from frontengine.utils.multi_language.retranslate import tr
29
29
 
30
30
  _PIN_MARK = "📌 "
31
31
 
@@ -51,30 +51,23 @@ class ClipboardDialog(QDialog):
51
51
  self.entry_list.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
52
52
  self.entry_list.itemDoubleClicked.connect(lambda _item: self.copy_selected())
53
53
 
54
- self.copy_button = QPushButton(_t("clipboard_copy", "Copy"))
55
- retranslator.bind(self.copy_button, "clipboard_copy", "Copy")
54
+ self.copy_button = tr(QPushButton(), "clipboard_copy", "Copy")
56
55
  self.copy_button.clicked.connect(self.copy_selected)
57
- self.pin_button = QPushButton(_t("clipboard_pin", "Pin / unpin"))
58
- retranslator.bind(self.pin_button, "clipboard_pin", "Pin / unpin")
56
+ self.pin_button = tr(QPushButton(), "clipboard_pin", "Pin / unpin")
59
57
  self.pin_button.clicked.connect(self.toggle_pin_selected)
60
- self.remove_button = QPushButton(_t("clipboard_remove", "Remove"))
61
- retranslator.bind(self.remove_button, "clipboard_remove", "Remove")
58
+ self.remove_button = tr(QPushButton(), "clipboard_remove", "Remove")
62
59
  self.remove_button.clicked.connect(self.remove_selected)
63
- self.clear_button = QPushButton(_t("clipboard_clear", "Clear (keep pinned)"))
64
- retranslator.bind(self.clear_button, "clipboard_clear", "Clear (keep pinned)")
60
+ self.clear_button = tr(QPushButton(), "clipboard_clear", "Clear (keep pinned)")
65
61
  self.clear_button.clicked.connect(self.clear_history)
66
62
 
67
- self.persist_checkbox = QCheckBox(
68
- _t("clipboard_persist", "Keep this history between sessions"))
69
- retranslator.bind(self.persist_checkbox, "clipboard_persist", "Keep this history between sessions")
63
+ self.persist_checkbox = tr(QCheckBox(), "clipboard_persist",
64
+ "Keep this history between sessions")
70
65
  self.persist_checkbox.setChecked(bool(user_setting_dict.get("clipboard_persist")))
71
66
  self.persist_checkbox.toggled.connect(self._store_persist)
72
- self.hint_label = QLabel(
73
- _t("clipboard_hint",
74
- "History stays on this machine and is never sent anywhere. Unless you tick "
75
- "the box above it is kept in memory only, because clipboards often hold "
76
- "passwords."))
77
- retranslator.bind(self.hint_label, "clipboard_hint", "History stays on this machine and is never sent anywhere. Unless you tick " "the box above it is kept in memory only, because clipboards often hold " "passwords.")
67
+ self.hint_label = tr(QLabel(), "clipboard_hint",
68
+ "History stays on this machine and is never sent anywhere. Unless you tick "
69
+ "the box above it is kept in memory only, because clipboards often hold "
70
+ "passwords.")
78
71
  self.hint_label.setWordWrap(True)
79
72
 
80
73
  self.button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Close)
@@ -19,7 +19,7 @@ from PySide6.QtWidgets import (
19
19
  from frontengine.user_setting.user_setting_file import user_setting_dict, write_user_setting
20
20
  from frontengine.utils.logging.loggin_instance import front_engine_logger
21
21
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
22
- from frontengine.utils.multi_language.retranslate import retranslator
22
+ from frontengine.utils.multi_language.retranslate import tr
23
23
  from frontengine.utils.reminder.reminder_service import (
24
24
  KIND_AT, KIND_EVERY, normalize_reminder, normalize_reminders,
25
25
  )
@@ -55,17 +55,13 @@ class ReminderDialog(QDialog):
55
55
  self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
56
56
  self.table.horizontalHeader().setStretchLastSection(True)
57
57
 
58
- self.add_button = QPushButton(_t("reminder_add", "Add"))
59
- retranslator.bind(self.add_button, "reminder_add", "Add")
58
+ self.add_button = tr(QPushButton(), "reminder_add", "Add")
60
59
  self.add_button.clicked.connect(lambda: self.add_row())
61
- self.remove_button = QPushButton(_t("reminder_remove", "Remove"))
62
- retranslator.bind(self.remove_button, "reminder_remove", "Remove")
60
+ self.remove_button = tr(QPushButton(), "reminder_remove", "Remove")
63
61
  self.remove_button.clicked.connect(self.remove_selected_row)
64
- self.hint_label = QLabel(
65
- _t("reminder_hint",
66
- "Tick a row to keep it active. \"Every\" takes minutes, \"At\" takes a "
67
- "24-hour time such as 14:30."))
68
- retranslator.bind(self.hint_label, "reminder_hint", "Tick a row to keep it active. \"Every\" takes minutes, \"At\" takes a " "24-hour time such as 14:30.")
62
+ self.hint_label = tr(QLabel(), "reminder_hint",
63
+ "Tick a row to keep it active. \"Every\" takes minutes, \"At\" takes a "
64
+ "24-hour time such as 14:30.")
69
65
  self.hint_label.setWordWrap(True)
70
66
 
71
67
  self.button_box = QDialogButtonBox(
@@ -24,7 +24,7 @@ from frontengine.user_setting.user_setting_file import user_setting_dict, write_
24
24
  from frontengine.utils.logging.loggin_instance import front_engine_logger
25
25
  from frontengine.utils.midi.midi_input import available as midi_available, list_devices
26
26
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
27
- from frontengine.utils.multi_language.retranslate import retranslator
27
+ from frontengine.utils.multi_language.retranslate import tr
28
28
  from frontengine.utils.remote.remote_server import ALLOWED_ACTIONS
29
29
 
30
30
  MIDI_KEY = "midi_bindings"
@@ -60,40 +60,33 @@ class RemoteControlDialog(QDialog):
60
60
  self._midi = midi
61
61
  self._learning = False
62
62
 
63
- self.remote_checkbox = QCheckBox(_t("remote_enable", "Let my phone control FrontEngine"))
64
- retranslator.bind(self.remote_checkbox, "remote_enable", "Let my phone control FrontEngine")
63
+ self.remote_checkbox = tr(QCheckBox(), "remote_enable", "Let my phone control FrontEngine")
65
64
  self.remote_checkbox.setChecked(remote_enabled())
66
65
  self.remote_checkbox.toggled.connect(self._toggle_remote)
67
66
  self.remote_url_label = QLabel(self.remote_status())
68
67
  self.remote_url_label.setWordWrap(True)
69
68
  self.remote_url_label.setTextInteractionFlags(
70
69
  self.remote_url_label.textInteractionFlags().TextSelectableByMouse)
71
- self.remote_copy_button = QPushButton(_t("remote_copy", "Copy link"))
72
- retranslator.bind(self.remote_copy_button, "remote_copy", "Copy link")
70
+ self.remote_copy_button = tr(QPushButton(), "remote_copy", "Copy link")
73
71
  self.remote_copy_button.clicked.connect(self.copy_link)
74
- self.remote_hint = QLabel(
75
- _t("remote_hint",
76
- "This opens a port on this machine for your local network. The link carries a "
77
- "one-time token that changes every time it starts, and only the buttons on the "
78
- "page can be triggered - nothing else. It is plain HTTP, so treat it like any "
79
- "other device on your network: someone else on the same network could read the "
80
- "token and press the same buttons. Leave it off on networks you do not trust."))
81
- retranslator.bind(self.remote_hint, "remote_hint", "This opens a port on this machine for your local network. The link carries a " "one-time token that changes every time it starts, and only the buttons on the " "page can be triggered - nothing else. It is plain HTTP, so treat it like any " "other device on your network: someone else on the same network could read the " "token and press the same buttons. Leave it off on networks you do not trust.")
72
+ self.remote_hint = tr(QLabel(), "remote_hint",
73
+ "This opens a port on this machine for your local network. The link carries a "
74
+ "one-time token that changes every time it starts, and only the buttons on the "
75
+ "page can be triggered - nothing else. It is plain HTTP, so treat it like any "
76
+ "other device on your network: someone else on the same network could read the "
77
+ "token and press the same buttons. Leave it off on networks you do not trust.")
82
78
  self.remote_hint.setWordWrap(True)
83
79
 
84
- self.midi_label = QLabel(_t("remote_midi_label", "MIDI controller"))
85
- retranslator.bind(self.midi_label, "remote_midi_label", "MIDI controller")
80
+ self.midi_label = tr(QLabel(), "remote_midi_label", "MIDI controller")
86
81
  self.midi_combobox = QComboBox()
87
82
  for index, name in list_devices():
88
83
  self.midi_combobox.addItem(name, index)
89
84
  if self.midi_combobox.count() == 0:
90
85
  self.midi_combobox.addItem(_t("remote_midi_none", "No MIDI device found"), -1)
91
- self.learn_button = QPushButton(_t("remote_midi_learn", "Learn"))
92
- retranslator.bind(self.learn_button, "remote_midi_learn", "Learn")
86
+ self.learn_button = tr(QPushButton(), "remote_midi_learn", "Learn")
93
87
  self.learn_button.clicked.connect(self.start_learning)
94
88
  self.learn_button.setEnabled(midi_available())
95
- self.remove_button = QPushButton(_t("remote_midi_remove", "Remove"))
96
- retranslator.bind(self.remove_button, "remote_midi_remove", "Remove")
89
+ self.remove_button = tr(QPushButton(), "remote_midi_remove", "Remove")
97
90
  self.remove_button.clicked.connect(self.remove_selected)
98
91
 
99
92
  self.table = QTableWidget(0, 2)
@@ -22,7 +22,7 @@ from PySide6.QtWidgets import (
22
22
  from frontengine.user_setting.user_setting_file import user_setting_dict, write_user_setting
23
23
  from frontengine.utils.logging.loggin_instance import front_engine_logger
24
24
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
25
- from frontengine.utils.multi_language.retranslate import retranslator
25
+ from frontengine.utils.multi_language.retranslate import retranslator, tr
26
26
  from frontengine.utils.screen_privacy import capture_affinity
27
27
  from frontengine.utils.screen_privacy.share_watch import DEFAULT_SHARING_APPS
28
28
  from frontengine.utils.smart_pause.pause_rules import parse_app_list
@@ -54,12 +54,10 @@ class ScreenPrivacyDialog(QDialog):
54
54
  self.setWindowTitle(_t("screen_privacy_title", "Screen-sharing privacy"))
55
55
  settings = current_settings()
56
56
 
57
- self.enable_checkbox = QCheckBox(
58
- _t("screen_privacy_enable", "Hide overlays while one of these apps is open"))
59
- retranslator.bind(self.enable_checkbox, "screen_privacy_enable", "Hide overlays while one of these apps is open")
57
+ self.enable_checkbox = tr(QCheckBox(), "screen_privacy_enable",
58
+ "Hide overlays while one of these apps is open")
60
59
  self.enable_checkbox.setChecked(bool(settings.get("enabled")))
61
- self.apps_label = QLabel(_t("screen_privacy_apps_label", "Meeting and capture apps:"))
62
- retranslator.bind(self.apps_label, "screen_privacy_apps_label", "Meeting and capture apps:")
60
+ self.apps_label = tr(QLabel(), "screen_privacy_apps_label", "Meeting and capture apps:")
63
61
  self.apps_edit = QLineEdit(", ".join(settings.get("apps", [])))
64
62
  self.apps_edit.setPlaceholderText("zoom, teams, discord")
65
63
  # 提示句取決於平台支不支援,登記的必須是實際選到的那個鍵
@@ -24,7 +24,7 @@ from PySide6.QtWidgets import (
24
24
  from frontengine.user_setting.user_setting_file import user_setting_dict, write_user_setting
25
25
  from frontengine.utils.logging.loggin_instance import front_engine_logger
26
26
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
27
- from frontengine.utils.multi_language.retranslate import retranslator
27
+ from frontengine.utils.multi_language.retranslate import tr
28
28
  from frontengine.utils.screen_text.screen_text_service import API_KEY_ENV, api_key
29
29
 
30
30
  CONSENT_KEY = "screen_text_consent"
@@ -78,12 +78,10 @@ class ScreenTextDialog(QDialog):
78
78
 
79
79
  self.text_edit = QPlainTextEdit(str(text))
80
80
  self.text_edit.setReadOnly(False)
81
- self.copy_button = QPushButton(_t("screen_text_copy", "Copy"))
82
- retranslator.bind(self.copy_button, "screen_text_copy", "Copy")
81
+ self.copy_button = tr(QPushButton(), "screen_text_copy", "Copy")
83
82
  self.copy_button.clicked.connect(self.copy_text)
84
- self.consent_checkbox = QCheckBox(
85
- _t("screen_text_consent_toggle", "Allow sending captures to Anthropic"))
86
- retranslator.bind(self.consent_checkbox, "screen_text_consent_toggle", "Allow sending captures to Anthropic")
83
+ self.consent_checkbox = tr(QCheckBox(), "screen_text_consent_toggle",
84
+ "Allow sending captures to Anthropic")
87
85
  self.consent_checkbox.setChecked(has_consent())
88
86
  self.consent_checkbox.toggled.connect(set_consent)
89
87
  self.hint_label = QLabel(self.status_text())
@@ -15,7 +15,7 @@ from PySide6.QtWidgets import (
15
15
  from frontengine.user_setting.user_setting_file import user_setting_dict, write_user_setting
16
16
  from frontengine.utils.logging.loggin_instance import front_engine_logger
17
17
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
18
- from frontengine.utils.multi_language.retranslate import retranslator
18
+ from frontengine.utils.multi_language.retranslate import tr
19
19
  from frontengine.utils.signage.signage_service import (
20
20
  DEFAULT_INTERVAL_MINUTES, MAX_INTERVAL_MINUTES, MIN_INTERVAL_MINUTES, clamp_interval,
21
21
  normalize_playlist,
@@ -52,26 +52,20 @@ class SignageDialog(QDialog):
52
52
  self.setWindowTitle(_t("signage_title", "Signage mode"))
53
53
  settings = current_settings()
54
54
 
55
- self.enable_checkbox = QCheckBox(_t("signage_enable", "Rotate presets"))
56
- retranslator.bind(self.enable_checkbox, "signage_enable", "Rotate presets")
55
+ self.enable_checkbox = tr(QCheckBox(), "signage_enable", "Rotate presets")
57
56
  self.enable_checkbox.setChecked(bool(settings.get("enabled")))
58
- self.presets_label = QLabel(_t("signage_presets_label", "Presets, one per line:"))
59
- retranslator.bind(self.presets_label, "signage_presets_label", "Presets, one per line:")
57
+ self.presets_label = tr(QLabel(), "signage_presets_label", "Presets, one per line:")
60
58
  self.presets_edit = QPlainTextEdit("\n".join(settings.get("presets", [])))
61
- self.interval_label = QLabel(_t("signage_interval_label", "Change every (minutes)"))
62
- retranslator.bind(self.interval_label, "signage_interval_label", "Change every (minutes)")
59
+ self.interval_label = tr(QLabel(), "signage_interval_label", "Change every (minutes)")
63
60
  self.interval_spinbox = QSpinBox()
64
61
  self.interval_spinbox.setRange(MIN_INTERVAL_MINUTES, MAX_INTERVAL_MINUTES)
65
62
  self.interval_spinbox.setValue(settings.get("interval_minutes"))
66
- self.hide_checkbox = QCheckBox(
67
- _t("signage_hide_window", "Hide the main window while rotating"))
68
- retranslator.bind(self.hide_checkbox, "signage_hide_window", "Hide the main window while rotating")
63
+ self.hide_checkbox = tr(QCheckBox(), "signage_hide_window",
64
+ "Hide the main window while rotating")
69
65
  self.hide_checkbox.setChecked(bool(settings.get("hide_window", True)))
70
- self.hint_label = QLabel(
71
- _t("signage_hint",
72
- "Presets are saved from the Presets menu. The rotation wraps at the end, so a "
73
- "machine left running keeps cycling."))
74
- retranslator.bind(self.hint_label, "signage_hint", "Presets are saved from the Presets menu. The rotation wraps at the end, so a " "machine left running keeps cycling.")
66
+ self.hint_label = tr(QLabel(), "signage_hint",
67
+ "Presets are saved from the Presets menu. The rotation wraps at the end, so a "
68
+ "machine left running keeps cycling.")
75
69
  self.hint_label.setWordWrap(True)
76
70
 
77
71
  self.button_box = QDialogButtonBox(
@@ -16,7 +16,7 @@ from PySide6.QtWidgets import (
16
16
  from frontengine.user_setting.user_setting_file import user_setting_dict, write_user_setting
17
17
  from frontengine.utils.logging.loggin_instance import front_engine_logger
18
18
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
19
- from frontengine.utils.multi_language.retranslate import retranslator
19
+ from frontengine.utils.multi_language.retranslate import tr
20
20
  from frontengine.utils.smart_pause.pause_rules import DEFAULT_RULES, parse_app_list
21
21
 
22
22
 
@@ -43,23 +43,18 @@ class SmartPauseDialog(QDialog):
43
43
  self.setWindowTitle(_t("smart_pause_title", "Smart pause"))
44
44
  rules = current_rules()
45
45
 
46
- self.fullscreen_checkbox = QCheckBox(
47
- _t("smart_pause_fullscreen", "Pause while a fullscreen app is running"))
48
- retranslator.bind(self.fullscreen_checkbox, "smart_pause_fullscreen", "Pause while a fullscreen app is running")
46
+ self.fullscreen_checkbox = tr(QCheckBox(), "smart_pause_fullscreen",
47
+ "Pause while a fullscreen app is running")
49
48
  self.fullscreen_checkbox.setChecked(bool(rules.get("fullscreen", True)))
50
- self.battery_checkbox = QCheckBox(
51
- _t("smart_pause_battery", "Pause while running on battery"))
52
- retranslator.bind(self.battery_checkbox, "smart_pause_battery", "Pause while running on battery")
49
+ self.battery_checkbox = tr(QCheckBox(), "smart_pause_battery",
50
+ "Pause while running on battery")
53
51
  self.battery_checkbox.setChecked(bool(rules.get("battery", False)))
54
- self.apps_label = QLabel(
55
- _t("smart_pause_apps_label", "Pause while these apps have focus:"))
56
- retranslator.bind(self.apps_label, "smart_pause_apps_label", "Pause while these apps have focus:")
52
+ self.apps_label = tr(QLabel(), "smart_pause_apps_label",
53
+ "Pause while these apps have focus:")
57
54
  self.apps_edit = QLineEdit(", ".join(rules.get("apps", [])))
58
55
  self.apps_edit.setPlaceholderText("photoshop, premiere, blender")
59
- self.hint_label = QLabel(
60
- _t("smart_pause_hint",
61
- "Names are matched without the folder or .exe, so \"photoshop\" is enough."))
62
- retranslator.bind(self.hint_label, "smart_pause_hint", "Names are matched without the folder or .exe, so \"photoshop\" is enough.")
56
+ self.hint_label = tr(QLabel(), "smart_pause_hint",
57
+ "Names are matched without the folder or .exe, so \"photoshop\" is enough.")
63
58
  self.hint_label.setWordWrap(True)
64
59
 
65
60
  self.button_box = QDialogButtonBox(
@@ -20,7 +20,7 @@ from PySide6.QtWidgets import (
20
20
 
21
21
  from frontengine.utils.logging.loggin_instance import front_engine_logger
22
22
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
23
- from frontengine.utils.multi_language.retranslate import retranslator
23
+ from frontengine.utils.multi_language.retranslate import tr
24
24
  from frontengine.utils.usage_tracking.usage_tracker import UsageTracker, format_duration
25
25
 
26
26
 
@@ -47,8 +47,7 @@ class UsageReportDialog(QDialog):
47
47
  self._on_toggle = on_toggle
48
48
  self._on_clear = on_clear
49
49
 
50
- self.enable_checkbox = QCheckBox(_t("usage_enable", "Track which apps I use"))
51
- retranslator.bind(self.enable_checkbox, "usage_enable", "Track which apps I use")
50
+ self.enable_checkbox = tr(QCheckBox(), "usage_enable", "Track which apps I use")
52
51
  self.enable_checkbox.setChecked(bool(enabled))
53
52
  self.enable_checkbox.toggled.connect(self._toggle)
54
53
 
@@ -65,17 +64,13 @@ class UsageReportDialog(QDialog):
65
64
 
66
65
  self.week_label = QLabel()
67
66
  self.week_label.setWordWrap(True)
68
- self.refresh_button = QPushButton(_t("usage_refresh", "Refresh"))
69
- retranslator.bind(self.refresh_button, "usage_refresh", "Refresh")
67
+ self.refresh_button = tr(QPushButton(), "usage_refresh", "Refresh")
70
68
  self.refresh_button.clicked.connect(self.reload_report)
71
- self.clear_button = QPushButton(_t("usage_clear", "Clear history"))
72
- retranslator.bind(self.clear_button, "usage_clear", "Clear history")
69
+ self.clear_button = tr(QPushButton(), "usage_clear", "Clear history")
73
70
  self.clear_button.clicked.connect(self.clear_history)
74
- self.hint_label = QLabel(
75
- _t("usage_hint",
76
- "This is stored on this machine only and is never sent anywhere. "
77
- "Clearing deletes the file itself."))
78
- retranslator.bind(self.hint_label, "usage_hint", "This is stored on this machine only and is never sent anywhere. " "Clearing deletes the file itself.")
71
+ self.hint_label = tr(QLabel(), "usage_hint",
72
+ "This is stored on this machine only and is never sent anywhere. "
73
+ "Clearing deletes the file itself.")
79
74
  self.hint_label.setWordWrap(True)
80
75
 
81
76
  self.button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Close)
@@ -17,7 +17,7 @@ from PySide6.QtWidgets import (
17
17
 
18
18
  from frontengine.utils.logging.loggin_instance import front_engine_logger
19
19
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
20
- from frontengine.utils.multi_language.retranslate import retranslator
20
+ from frontengine.utils.multi_language.retranslate import retranslator, tr
21
21
  from frontengine.utils.window_pin import window_pin
22
22
 
23
23
 
@@ -37,18 +37,14 @@ class WindowPinDialog(QDialog):
37
37
 
38
38
  self.window_list = QListWidget()
39
39
  self.window_list.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
40
- self.refresh_button = QPushButton(_t("window_pin_refresh", "Refresh"))
41
- retranslator.bind(self.refresh_button, "window_pin_refresh", "Refresh")
40
+ self.refresh_button = tr(QPushButton(), "window_pin_refresh", "Refresh")
42
41
  self.refresh_button.clicked.connect(self.reload_windows)
43
- self.pin_button = QPushButton(_t("window_pin_pin", "Keep on top"))
44
- retranslator.bind(self.pin_button, "window_pin_pin", "Keep on top")
42
+ self.pin_button = tr(QPushButton(), "window_pin_pin", "Keep on top")
45
43
  self.pin_button.clicked.connect(lambda: self.apply_pin(True))
46
- self.unpin_button = QPushButton(_t("window_pin_unpin", "Release"))
47
- retranslator.bind(self.unpin_button, "window_pin_unpin", "Release")
44
+ self.unpin_button = tr(QPushButton(), "window_pin_unpin", "Release")
48
45
  self.unpin_button.clicked.connect(lambda: self.apply_pin(False))
49
46
 
50
- self.opacity_label = QLabel(_t("window_pin_opacity", "Opacity"))
51
- retranslator.bind(self.opacity_label, "window_pin_opacity", "Opacity")
47
+ self.opacity_label = tr(QLabel(), "window_pin_opacity", "Opacity")
52
48
  self.opacity_slider = QSlider(Qt.Orientation.Horizontal)
53
49
  self.opacity_slider.setRange(window_pin.MIN_OPACITY_PERCENT,
54
50
  window_pin.MAX_OPACITY_PERCENT)
@@ -34,6 +34,15 @@ def _t(key: str, fallback: str) -> str:
34
34
  return language_wrapper.language_word_dict.get(key, fallback)
35
35
 
36
36
 
37
+ # 同一段文字會出現在建構、登記與警告框三個地方,提成常數免得三份各自漂移。
38
+ # The same wording appears at construction, at registration and in a warning
39
+ # box; a constant keeps the three from drifting apart.
40
+ _AUTOSTART = "Start with the system"
41
+ _PLUGINS = "Load plugins (advanced)"
42
+ _EXPORT_SETTINGS = "Export settings..."
43
+ _IMPORT_SETTINGS = "Import settings..."
44
+
45
+
37
46
  def build_settings_menu(ui: "FrontEngineMainUI") -> None:
38
47
  """Build the Settings menu with hotkey configuration and settings I/O."""
39
48
  front_engine_logger.info(f"[SettingsMenu] build_settings_menu | ui={ui}")
@@ -55,8 +64,8 @@ def build_settings_menu(ui: "FrontEngineMainUI") -> None:
55
64
  menu.addAction(theme_schedule_action)
56
65
  ui.theme_schedule_action = theme_schedule_action
57
66
 
58
- autostart_action = QAction(_t("settings_menu_autostart", "Start with the system"), menu)
59
- retranslator.bind(autostart_action, "settings_menu_autostart", "Start with the system")
67
+ autostart_action = QAction(_t("settings_menu_autostart", _AUTOSTART), menu)
68
+ retranslator.bind(autostart_action, "settings_menu_autostart", _AUTOSTART)
60
69
  autostart_action.setCheckable(True)
61
70
  autostart_action.setChecked(autostart_service.is_enabled())
62
71
  autostart_action.toggled.connect(lambda checked: _toggle_autostart(ui, checked))
@@ -71,8 +80,8 @@ def build_settings_menu(ui: "FrontEngineMainUI") -> None:
71
80
  menu.addAction(restore_action)
72
81
  ui.restore_session_action = restore_action
73
82
 
74
- plugins_action = QAction(_t("settings_menu_plugins", "Load plugins (advanced)"), menu)
75
- retranslator.bind(plugins_action, "settings_menu_plugins", "Load plugins (advanced)")
83
+ plugins_action = QAction(_t("settings_menu_plugins", _PLUGINS), menu)
84
+ retranslator.bind(plugins_action, "settings_menu_plugins", _PLUGINS)
76
85
  plugins_action.setCheckable(True)
77
86
  plugins_action.setChecked(bool(user_setting_dict.get("load_plugins")))
78
87
  plugins_action.toggled.connect(lambda checked: _toggle_plugins(ui, checked))
@@ -137,13 +146,13 @@ def build_settings_menu(ui: "FrontEngineMainUI") -> None:
137
146
  ui.clipboard_toggle_action = clipboard_toggle
138
147
 
139
148
  menu.addSeparator()
140
- export_action = QAction(_t("settings_menu_export", "Export settings..."), menu)
141
- retranslator.bind(export_action, "settings_menu_export", "Export settings...")
149
+ export_action = QAction(_t("settings_menu_export", _EXPORT_SETTINGS), menu)
150
+ retranslator.bind(export_action, "settings_menu_export", _EXPORT_SETTINGS)
142
151
  export_action.triggered.connect(lambda: _export_settings(ui))
143
152
  menu.addAction(export_action)
144
153
 
145
- import_action = QAction(_t("settings_menu_import", "Import settings..."), menu)
146
- retranslator.bind(import_action, "settings_menu_import", "Import settings...")
154
+ import_action = QAction(_t("settings_menu_import", _IMPORT_SETTINGS), menu)
155
+ retranslator.bind(import_action, "settings_menu_import", _IMPORT_SETTINGS)
147
156
  import_action.triggered.connect(lambda: _import_settings(ui))
148
157
  menu.addAction(import_action)
149
158
 
@@ -214,7 +223,7 @@ def _toggle_autostart(ui: "FrontEngineMainUI", enabled: bool) -> None:
214
223
  action.blockSignals(False)
215
224
  QMessageBox.warning(
216
225
  ui,
217
- _t("settings_menu_autostart", "Start with the system"),
226
+ _t("settings_menu_autostart", _AUTOSTART),
218
227
  _t("settings_autostart_failed", "Could not change the autostart setting."),
219
228
  )
220
229
 
@@ -236,7 +245,7 @@ def _toggle_plugins(ui: "FrontEngineMainUI", enabled: bool) -> None:
236
245
  if enabled:
237
246
  QMessageBox.warning(
238
247
  ui,
239
- _t("settings_menu_plugins", "Load plugins (advanced)"),
248
+ _t("settings_menu_plugins", _PLUGINS),
240
249
  _t("settings_plugins_warning",
241
250
  "Plugins are Python code and run with the same privileges as FrontEngine. "
242
251
  "Only install plugins you trust. Takes effect on the next launch."),
@@ -266,7 +275,7 @@ def _open_hotkey_dialog(ui: "FrontEngineMainUI") -> None:
266
275
 
267
276
 
268
277
  def _export_settings(ui: "FrontEngineMainUI") -> None:
269
- title = _t("settings_menu_export", "Export settings...")
278
+ title = _t("settings_menu_export", _EXPORT_SETTINGS)
270
279
  destination, _ok = QFileDialog.getSaveFileName(
271
280
  ui, title, "frontengine_settings.json", _t("settings_file_filter", "Settings files (*.json)")
272
281
  )
@@ -281,7 +290,7 @@ def _export_settings(ui: "FrontEngineMainUI") -> None:
281
290
 
282
291
 
283
292
  def _import_settings(ui: "FrontEngineMainUI") -> None:
284
- title = _t("settings_menu_import", "Import settings...")
293
+ title = _t("settings_menu_import", _IMPORT_SETTINGS)
285
294
  source, _ok = QFileDialog.getOpenFileName(
286
295
  ui, title, "", _t("settings_file_filter", "Settings files (*.json)")
287
296
  )
@@ -18,7 +18,7 @@ from frontengine.ui.page.web.web_setting_ui import WEBSettingUI
18
18
  from frontengine.user_setting.user_setting_file import clear_overlay_geometry
19
19
  from frontengine.utils.logging.loggin_instance import front_engine_logger
20
20
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
21
- from frontengine.utils.multi_language.retranslate import retranslator, translate
21
+ from frontengine.utils.multi_language.retranslate import retranslator, tr, translate
22
22
  from frontengine.utils.screen_privacy import capture_affinity
23
23
  from frontengine.utils.power_mode.power_mode import (
24
24
  TIER_BALANCED, TIER_HIGH, TIER_SAVER, normalize_tier,
@@ -107,9 +107,7 @@ class ControlCenterUI(QWidget):
107
107
 
108
108
  # 畫質檔位:比省電模式更細,一次套用到所有覆蓋層
109
109
  # Quality tier: finer than the low-power switch, applied to every overlay.
110
- self.quality_label = QLabel(
111
- language_wrapper.language_word_dict.get("control_center_quality", "Quality"))
112
- retranslator.bind(self.quality_label, "control_center_quality", "Quality")
110
+ self.quality_label = tr(QLabel(), "control_center_quality", "Quality")
113
111
  self.quality_combobox = QComboBox()
114
112
  for tier, key, fallback in (
115
113
  (TIER_HIGH, "control_center_quality_high", "High"),
@@ -21,7 +21,7 @@ from frontengine.utils.focus_shield.focus_shield import (
21
21
  )
22
22
  from frontengine.utils.logging.loggin_instance import front_engine_logger
23
23
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
24
- from frontengine.utils.multi_language.retranslate import retranslator
24
+ from frontengine.utils.multi_language.retranslate import tr
25
25
 
26
26
 
27
27
  class FocusSettingUI(QWidget):
@@ -37,22 +37,16 @@ class FocusSettingUI(QWidget):
37
37
  self.mask_widget_list: List[DistractionMaskWidget] = []
38
38
 
39
39
  # Dim background windows
40
- self.dim_label = QLabel(
41
- language_wrapper.language_word_dict.get("focus_dim_label", "Dim background windows"))
42
- retranslator.bind(self.dim_label, "focus_dim_label", "Dim background windows")
40
+ self.dim_label = tr(QLabel(), "focus_dim_label", "Dim background windows")
43
41
  self.dim_slider = QSlider(Qt.Orientation.Horizontal)
44
42
  self.dim_slider.setRange(10, 90)
45
43
  self.dim_slider.setValue(45)
46
44
  self.dim_slider.valueChanged.connect(self._apply_dim_settings)
47
- self.dim_button = QPushButton(
48
- language_wrapper.language_word_dict.get("focus_dim_start", "Dim the background"))
49
- retranslator.bind(self.dim_button, "focus_dim_start", "Dim the background")
45
+ self.dim_button = tr(QPushButton(), "focus_dim_start", "Dim the background")
50
46
  self.dim_button.clicked.connect(self.toggle_dim)
51
47
 
52
48
  # Mask a distraction
53
- self.mask_label = QLabel(
54
- language_wrapper.language_word_dict.get("focus_mask_label", "Cover a distraction"))
55
- retranslator.bind(self.mask_label, "focus_mask_label", "Cover a distraction")
49
+ self.mask_label = tr(QLabel(), "focus_mask_label", "Cover a distraction")
56
50
  self.mask_region_combobox = QComboBox()
57
51
  for region, fallback in (
58
52
  (REGION_BOTTOM, "Bottom strip (taskbar)"), (REGION_BOTTOM_RIGHT, "Bottom-right corner"),
@@ -67,22 +61,15 @@ class FocusSettingUI(QWidget):
67
61
  self.mask_percent_slider.setRange(1, 50)
68
62
  self.mask_percent_slider.setValue(6)
69
63
  self.mask_percent_slider.valueChanged.connect(self._apply_mask_settings)
70
- self.mask_button = QPushButton(
71
- language_wrapper.language_word_dict.get("focus_mask_start", "Cover it up"))
72
- retranslator.bind(self.mask_button, "focus_mask_start", "Cover it up")
64
+ self.mask_button = tr(QPushButton(), "focus_mask_start", "Cover it up")
73
65
  self.mask_button.clicked.connect(self.toggle_mask)
74
66
 
75
67
  # Shared
76
- self.target_monitor_label = QLabel(
77
- language_wrapper.language_word_dict.get("target_monitor_label", "Target monitor"))
78
- retranslator.bind(self.target_monitor_label, "target_monitor_label", "Target monitor")
68
+ self.target_monitor_label = tr(QLabel(), "target_monitor_label", "Target monitor")
79
69
  self.target_monitor_combobox = build_target_monitor_combobox()
80
- self.hint_label = QLabel(
81
- language_wrapper.language_word_dict.get(
82
- "focus_hint",
83
- "Both overlays pass clicks through — what they cover still works, "
84
- "it just stops competing for your attention."))
85
- retranslator.bind(self.hint_label, "focus_hint", "Both overlays pass clicks through — what they cover still works, " "it just stops competing for your attention.")
70
+ self.hint_label = tr(QLabel(), "focus_hint",
71
+ "Both overlays pass clicks through — what they cover still works, "
72
+ "it just stops competing for your attention.")
86
73
  self.hint_label.setWordWrap(True)
87
74
 
88
75
  # Layout