frontengine 0.0.66__py3-none-any.whl → 0.0.68__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. frontengine/gl_widget/__init__.py +0 -0
  2. frontengine/show/clicker/__init__.py +0 -0
  3. frontengine/show/clicker/clicker_scene.py +7 -0
  4. frontengine/show/clicker/clicker_ui.py +30 -0
  5. frontengine/show/gif/paint_gif.py +1 -0
  6. frontengine/show/image/paint_image.py +1 -0
  7. frontengine/show/particle/particle_scene.py +18 -12
  8. frontengine/show/particle/particle_utils.py +19 -33
  9. frontengine/show/video/video_player.py +1 -0
  10. frontengine/ui/main_ui.py +3 -19
  11. frontengine/ui/page/gif/gif_setting_ui.py +11 -8
  12. frontengine/ui/page/image/image_setting_ui.py +13 -9
  13. frontengine/ui/page/particle/particle_setting_ui.py +2 -2
  14. frontengine/ui/page/utils.py +21 -1
  15. frontengine/ui/page/video/video_setting_ui.py +11 -8
  16. frontengine/utils/multi_language/english.py +1 -0
  17. frontengine/utils/multi_language/france.py +1 -0
  18. frontengine/utils/multi_language/germany.py +1 -0
  19. frontengine/utils/multi_language/italy.py +1 -0
  20. frontengine/utils/multi_language/russian.py +1 -0
  21. frontengine/utils/multi_language/simplified_chinese.py +1 -0
  22. frontengine/utils/multi_language/traditional_chinese.py +1 -0
  23. frontengine/worker/__init__.py +0 -0
  24. frontengine/worker/qthread_worker.py +34 -0
  25. {frontengine-0.0.66.dist-info → frontengine-0.0.68.dist-info}/METADATA +1 -1
  26. {frontengine-0.0.66.dist-info → frontengine-0.0.68.dist-info}/RECORD +30 -24
  27. /frontengine/show/particle/{paint_particle.py → particle_ui.py} +0 -0
  28. {frontengine-0.0.66.dist-info → frontengine-0.0.68.dist-info}/LICENSE +0 -0
  29. {frontengine-0.0.66.dist-info → frontengine-0.0.68.dist-info}/WHEEL +0 -0
  30. {frontengine-0.0.66.dist-info → frontengine-0.0.68.dist-info}/top_level.txt +0 -0
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ from PySide6.QtWidgets import QGraphicsScene
2
+
3
+
4
+ class ClickerGraphicScene(QGraphicsScene):
5
+
6
+ def __init__(self):
7
+ super().__init__()
@@ -0,0 +1,30 @@
1
+ from PySide6.QtCore import Qt
2
+ from PySide6.QtWidgets import QWidget, QGridLayout
3
+
4
+ from frontengine.show.clicker.clicker_scene import ClickerGraphicScene
5
+ from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
6
+
7
+
8
+ class ClickerWidget(QWidget):
9
+
10
+ def __init__(self):
11
+ super().__init__()
12
+ self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
13
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
14
+ self.clicker_view = ExtendGraphicView()
15
+ self.clicker_scene = ClickerGraphicScene()
16
+ self.clicker_view.setScene(self.clicker_scene)
17
+ self.grid_layout = QGridLayout()
18
+ self.grid_layout.addWidget(self.clicker_view, 0, 0, -1, -1)
19
+ self.setLayout(self.grid_layout)
20
+
21
+ def set_ui_window_flag(self, show_on_bottom: bool = False) -> None:
22
+ self.setWindowFlag(
23
+ Qt.WindowType.WindowTransparentForInput |
24
+ Qt.WindowType.FramelessWindowHint |
25
+ Qt.WindowType.Tool
26
+ )
27
+ if not show_on_bottom:
28
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)
29
+ else:
30
+ self.setWindowFlag(Qt.WindowType.WindowStaysOnBottomHint)
@@ -28,6 +28,7 @@ class GifWidget(QWidget):
28
28
  self.movie.frameChanged.connect(self.repaint)
29
29
  self.gif_label.setMovie(self.movie)
30
30
  self.movie.start()
31
+ self.resize(self.movie.frameRect().size())
31
32
  else:
32
33
  message_box: QMessageBox = QMessageBox(self)
33
34
  message_box.setText(
@@ -19,6 +19,7 @@ class ImageWidget(QWidget):
19
19
  if self.image_path.exists() and self.image_path.is_file():
20
20
  print(f"Origin file {str(self.image_path)}")
21
21
  self.image = QImage(str(self.image_path))
22
+ self.resize(self.image.size())
22
23
  else:
23
24
  message_box: QMessageBox = QMessageBox(self)
24
25
  message_box.setText(
@@ -1,3 +1,4 @@
1
+ import random
1
2
  from typing import Callable
2
3
 
3
4
  from PySide6.QtCore import QTimer, QPoint, QRect
@@ -5,7 +6,7 @@ from PySide6.QtGui import QPixmap
5
6
  from PySide6.QtWidgets import QGraphicsScene
6
7
 
7
8
  from frontengine.show.particle.particle_utils import particle_down, particle_up, particle_left, particle_right, \
8
- particle_left_down, particle_left_up, particle_right_down, particle_right_up, particle_random_minus, Particle, \
9
+ particle_left_down, particle_left_up, particle_right_down, particle_right_up, particle_random_minus, \
9
10
  particle_random_add, particle_random
10
11
 
11
12
 
@@ -40,26 +41,31 @@ class ParticleGraphicScene(QGraphicsScene):
40
41
  }.get(self.particle_direction)
41
42
  self.setSceneRect(QRect(0, 0, screen_width, screen_height))
42
43
  self.update_timer: QTimer = QTimer()
43
- self.update_timer.setInterval(10)
44
- self.update_timer.timeout.connect(self.update_particle)
44
+ self.update_timer.setInterval(100)
45
+ self.update_timer.timeout.connect(self.update_particle_xy)
45
46
  self.update_timer.start()
46
47
 
47
48
  def create_particle(self):
48
49
  self.particle_dict = {}
49
50
  for count in range(self.particle_count):
51
+ item = self.addPixmap(self.particle_pixmap)
52
+ item.setOpacity(self.opacity)
50
53
  self.particle_dict.update({
51
- f"particle_{count}": Particle(self.screen_height, self.screen_width, self.particle_pixmap)
54
+ f"particle_{count}": {
55
+ "x": random.randint(0, self.screen_width),
56
+ "y": random.randint(0, self.screen_height),
57
+ "height": self.screen_height,
58
+ "width": self.screen_width,
59
+ "pixmap_item": item,
60
+ }
52
61
  })
53
62
 
54
- def update_particle(self):
55
- self.clear()
63
+ def update_particle_xy(self):
56
64
  self.update_function(self.particle_dict, self.particle_speed)
57
65
  for particle_key, particle in self.particle_dict.items():
58
- pixmap_item = self.addPixmap(particle.pixmap)
59
- pixmap_item.setOpacity(self.opacity)
60
- pixmap_item.setPos(particle.x, particle.y)
61
- particle.pixmap_item = pixmap_item
62
- if not self.sceneRect().contains(QPoint(particle.x, particle.y)):
63
- self.removeItem(particle.pixmap_item)
66
+ pixmap_item = particle.get("pixmap_item")
67
+ pixmap_item.setPos(particle.get("x"), particle.get("y"))
68
+ if not self.sceneRect().contains(QPoint(particle.get("x"), particle.get("y"))):
69
+ self.removeItem(particle.get("pixmap_item"))
64
70
  if len(self.items()) == 0:
65
71
  self.create_particle()
@@ -1,74 +1,60 @@
1
1
  import random
2
2
  from typing import Dict, Callable
3
3
 
4
- from PySide6.QtGui import QPixmap
5
- from PySide6.QtWidgets import QGraphicsPixmapItem
6
4
 
7
-
8
- class Particle(object):
9
-
10
- def __init__(self, height: int, width: int, pixmap: QPixmap):
11
- self.pixmap: QPixmap = pixmap
12
- self.x: int = random.randint(0, width)
13
- self.y: int = random.randint(0, height)
14
- self.height = self.pixmap.height()
15
- self.width = self.pixmap.width()
16
- self.pixmap_item: [QGraphicsPixmapItem, None] = None
17
-
18
-
19
- def particle_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
5
+ def particle_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
20
6
  for particle in particle_dict.values():
21
- particle.y += random.randint(0, particle_speed)
7
+ particle.update({"y": particle.get("y") + random.randint(0, particle_speed)})
22
8
 
23
9
 
24
- def particle_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
10
+ def particle_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
25
11
  for particle in particle_dict.values():
26
- particle.y -= random.randint(0, particle_speed)
12
+ particle.update({"y": particle.get("y") - random.randint(0, particle_speed)})
27
13
 
28
14
 
29
- def particle_left(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
15
+ def particle_left(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
30
16
  for particle in particle_dict.values():
31
- particle.x -= random.randint(0, particle_speed)
17
+ particle.update({"x": particle.get("x") - random.randint(0, particle_speed)})
32
18
 
33
19
 
34
- def particle_right(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
20
+ def particle_right(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
35
21
  for particle in particle_dict.values():
36
- particle.x += random.randint(0, particle_speed)
22
+ particle.update({"x": particle.get("x") + random.randint(0, particle_speed)})
37
23
 
38
24
 
39
- def particle_left_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
25
+ def particle_left_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
40
26
  particle_left(particle_dict, particle_speed)
41
27
  particle_down(particle_dict, particle_speed)
42
28
 
43
29
 
44
- def particle_left_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
30
+ def particle_left_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
45
31
  particle_left(particle_dict, particle_speed)
46
32
  particle_up(particle_dict, particle_speed)
47
33
 
48
34
 
49
- def particle_right_down(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
35
+ def particle_right_down(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
50
36
  particle_right(particle_dict, particle_speed)
51
37
  particle_down(particle_dict, particle_speed)
52
38
 
53
39
 
54
- def particle_right_up(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
40
+ def particle_right_up(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
55
41
  particle_right(particle_dict, particle_speed)
56
42
  particle_up(particle_dict, particle_speed)
57
43
 
58
44
 
59
- def particle_random_minus(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
45
+ def particle_random_minus(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
60
46
  for particle in particle_dict.values():
61
- particle.y += random.randint(0, particle_speed)
62
- particle.x -= random.randint(0, particle_speed)
47
+ particle.update({"y": particle.get("y") + random.randint(0, particle_speed)})
48
+ particle.update({"x": particle.get("x") - random.randint(0, particle_speed)})
63
49
 
64
50
 
65
- def particle_random_add(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
51
+ def particle_random_add(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
66
52
  for particle in particle_dict.values():
67
- particle.y -= random.randint(0, particle_speed)
68
- particle.x += random.randint(0, particle_speed)
53
+ particle.update({"y": particle.get("y") - random.randint(0, particle_speed)})
54
+ particle.update({"x": particle.get("x") + random.randint(0, particle_speed)})
69
55
 
70
56
 
71
- def particle_random(particle_dict: Dict[str, Particle], particle_speed: int = 30) -> None:
57
+ def particle_random(particle_dict: Dict[str, dict], particle_speed: int = 30) -> None:
72
58
  function: Callable = random.choice(
73
59
  [particle_down, particle_up, particle_left, particle_right, particle_right_up, particle_left_down,
74
60
  particle_left_up, particle_right_down, particle_random_add, particle_random_minus])
@@ -45,6 +45,7 @@ class VideoWidget(QVideoWidget):
45
45
  if self.icon_path.exists() and self.icon_path.is_file():
46
46
  self.setWindowIcon(QIcon(str(self.icon_path)))
47
47
 
48
+
48
49
  def set_ui_window_flag(self, show_on_bottom: bool = False) -> None:
49
50
  self.setWindowFlag(
50
51
  Qt.WindowType.WindowTransparentForInput |
frontengine/ui/main_ui.py CHANGED
@@ -4,9 +4,9 @@ from pathlib import Path
4
4
  from typing import Dict, Type
5
5
 
6
6
  from PySide6.QtCore import QTimer, QCoreApplication
7
- from PySide6.QtGui import QIcon, QAction, Qt
7
+ from PySide6.QtGui import QIcon, Qt
8
8
  from PySide6.QtWidgets import QMainWindow, QApplication, QGridLayout, QTabWidget, QMenuBar, QWidget
9
- from qt_material import apply_stylesheet, QtStyleTools
9
+ from qt_material import apply_stylesheet
10
10
 
11
11
  from frontengine.system_tray.extend_system_tray import ExtendSystemTray
12
12
  from frontengine.ui.menu.help_menu import build_help_menu
@@ -29,7 +29,7 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
29
29
  FrontEngine_EXTEND_TAB: Dict[str, Type[QWidget]] = {}
30
30
 
31
31
 
32
- class FrontEngineMainUI(QMainWindow, QtStyleTools):
32
+ class FrontEngineMainUI(QMainWindow):
33
33
 
34
34
  def __init__(self, debug: bool = False, show_system_tray_ray: bool = True):
35
35
  super().__init__()
@@ -69,7 +69,6 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
69
69
  )
70
70
  # Style menu bar
71
71
  self.menu_bar = QMenuBar()
72
- self.add_style_menu()
73
72
  self.setMenuBar(self.menu_bar)
74
73
  self.tab_widget.addTab(
75
74
  self.video_setting_ui, language_wrapper.language_word_dict.get("tab_video_text"))
@@ -131,22 +130,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
131
130
  apply_stylesheet(self, theme=user_setting_dict.get("theme"))
132
131
  self.showMaximized()
133
132
 
134
- def add_style_menu(self) -> None:
135
- self.menu_bar.style_menu = self.menu_bar.addMenu(
136
- language_wrapper.language_word_dict.get("menu_bar_ui_style")
137
- )
138
- for style in [
139
- 'dark_amber.xml', 'dark_blue.xml', 'dark_cyan.xml', 'dark_lightgreen.xml', 'dark_pink.xml',
140
- 'dark_purple.xml', 'dark_red.xml', 'dark_teal.xml', 'dark_yellow.xml', 'light_amber.xml',
141
- 'light_blue.xml', 'light_cyan.xml', 'light_cyan_500.xml', 'light_lightgreen.xml',
142
- 'light_pink.xml', 'light_purple.xml', 'light_red.xml', 'light_teal.xml', 'light_yellow.xml'
143
- ]:
144
- change_style_action = QAction(style, parent=self)
145
- change_style_action.triggered.connect(self.set_style)
146
- self.menu_bar.style_menu.addAction(change_style_action)
147
-
148
133
  def set_style(self) -> None:
149
- self.apply_stylesheet(self, self.sender().text())
150
134
  user_setting_dict.update({"theme": self.sender().text()})
151
135
 
152
136
  def closeEvent(self, event) -> None:
@@ -5,7 +5,8 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QPushButton
5
5
 
6
6
  from frontengine.show.gif.paint_gif import GifWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_gif
8
- from frontengine.ui.page.utils import monitor_choose_dialog
8
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen_multi_screen, \
9
+ check_show_fullscreen_one_screen
9
10
  from frontengine.utils.logging.loggin_instance import front_engine_logger
10
11
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
12
 
@@ -61,6 +62,11 @@ class GIFSettingUI(QWidget):
61
62
  language_wrapper.language_word_dict.get("gif_setting_ui_play")
62
63
  )
63
64
  self.start_button.clicked.connect(self.start_play_gif)
65
+ # Expand
66
+ self.fullscreen_checkbox = QCheckBox(
67
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
68
+ )
69
+ self.fullscreen_checkbox.setChecked(True)
64
70
  # Show on all screen
65
71
  self.show_on_all_screen_checkbox = QCheckBox(
66
72
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -79,6 +85,7 @@ class GIFSettingUI(QWidget):
79
85
  self.grid_layout.addWidget(self.speed_slider, 1, 2)
80
86
  self.grid_layout.addWidget(self.choose_file_button, 2, 0)
81
87
  self.grid_layout.addWidget(self.ready_label, 2, 1)
88
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 2, 2)
82
89
  self.grid_layout.addWidget(self.start_button, 3, 0)
83
90
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 3, 1)
84
91
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 3, 2)
@@ -107,7 +114,7 @@ class GIFSettingUI(QWidget):
107
114
  monitors = QGuiApplication.screens()
108
115
  if self.show_all_screen is False and len(monitors) <= 1:
109
116
  gif_widget = self._create_gif_widget()
110
- gif_widget.showFullScreen()
117
+ check_show_fullscreen_one_screen(gif_widget, self.fullscreen_checkbox)
111
118
  elif self.show_all_screen is False and len(monitors) >= 2:
112
119
  input_dialog, combobox = monitor_choose_dialog(self, monitors)
113
120
  result = input_dialog.exec_()
@@ -116,15 +123,11 @@ class GIFSettingUI(QWidget):
116
123
  if len(monitors) > select_monitor_index:
117
124
  monitor = monitors[select_monitor_index]
118
125
  gif_widget = self._create_gif_widget()
119
- gif_widget.setScreen(monitor)
120
- gif_widget.move(monitor.availableGeometry().topLeft())
121
- gif_widget.showFullScreen()
126
+ check_show_fullscreen_multi_screen(gif_widget, self.fullscreen_checkbox, monitor)
122
127
  else:
123
128
  for monitor in monitors:
124
129
  gif_widget = self._create_gif_widget()
125
- gif_widget.setScreen(monitor)
126
- gif_widget.move(monitor.availableGeometry().topLeft())
127
- gif_widget.showFullScreen()
130
+ check_show_fullscreen_multi_screen(gif_widget, self.fullscreen_checkbox, monitor)
128
131
 
129
132
  def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
130
133
  self.ready_label.setText(
@@ -1,11 +1,12 @@
1
1
  from PySide6.QtCore import Qt
2
- from PySide6.QtGui import QScreen, QGuiApplication
2
+ from PySide6.QtGui import QGuiApplication
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
4
  QCheckBox, QDialog
5
5
 
6
6
  from frontengine.show.image.paint_image import ImageWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_image
8
- from frontengine.ui.page.utils import monitor_choose_dialog
8
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen_multi_screen, \
9
+ check_show_fullscreen_one_screen
9
10
  from frontengine.utils.logging.loggin_instance import front_engine_logger
10
11
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
12
 
@@ -50,6 +51,11 @@ class ImageSettingUI(QWidget):
50
51
  language_wrapper.language_word_dict.get("image_setting_ui_play")
51
52
  )
52
53
  self.start_button.clicked.connect(self.start_play_image)
54
+ # Expand
55
+ self.fullscreen_checkbox = QCheckBox(
56
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
57
+ )
58
+ self.fullscreen_checkbox.setChecked(True)
53
59
  # Show on all screen
54
60
  self.show_on_all_screen_checkbox = QCheckBox(
55
61
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -65,6 +71,7 @@ class ImageSettingUI(QWidget):
65
71
  self.grid_layout.addWidget(self.opacity_slider, 0, 2)
66
72
  self.grid_layout.addWidget(self.choose_file_button, 1, 0)
67
73
  self.grid_layout.addWidget(self.ready_label, 1, 1)
74
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 1, 2)
68
75
  self.grid_layout.addWidget(self.start_button, 2, 0)
69
76
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 1)
70
77
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 2, 2)
@@ -92,7 +99,7 @@ class ImageSettingUI(QWidget):
92
99
  monitors = QGuiApplication.screens()
93
100
  if self.show_all_screen is False and len(monitors) <= 1:
94
101
  image_widget = self._create_image_widget()
95
- image_widget.showFullScreen()
102
+ check_show_fullscreen_one_screen(image_widget, self.fullscreen_checkbox)
96
103
  elif self.show_all_screen is False and len(monitors) >= 2:
97
104
  input_dialog, combobox = monitor_choose_dialog(self, monitors)
98
105
  result = input_dialog.exec_()
@@ -101,15 +108,12 @@ class ImageSettingUI(QWidget):
101
108
  if len(monitors) > select_monitor_index:
102
109
  monitor = monitors[select_monitor_index]
103
110
  image_widget = self._create_image_widget()
104
- image_widget.setScreen(monitor)
105
- image_widget.move(monitor.availableGeometry().topLeft())
106
- image_widget.showFullScreen()
111
+ check_show_fullscreen_multi_screen(image_widget, self.fullscreen_checkbox, monitor)
112
+
107
113
  else:
108
114
  for monitor in monitors:
109
115
  image_widget = self._create_image_widget()
110
- image_widget.setScreen(monitor)
111
- image_widget.move(monitor.availableGeometry().topLeft())
112
- image_widget.showFullScreen()
116
+ check_show_fullscreen_multi_screen(image_widget, self.fullscreen_checkbox, monitor)
113
117
 
114
118
  def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
115
119
  self.ready_label.setText(
@@ -3,7 +3,7 @@ from PySide6.QtGui import QGuiApplication, QPixmap
3
3
  from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
4
4
  QCheckBox, QDialog, QComboBox
5
5
 
6
- from frontengine.show.particle.paint_particle import ParticleWidget
6
+ from frontengine.show.particle.particle_ui import ParticleWidget
7
7
  from frontengine.ui.dialog.choose_file_dialog import choose_image
8
8
  from frontengine.ui.page.utils import monitor_choose_dialog
9
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
@@ -60,7 +60,7 @@ class ParticleSettingUI(QWidget):
60
60
  # Particle count
61
61
  self.particle_count_label = QLabel(language_wrapper.language_word_dict.get("particle_count"))
62
62
  self.particle_count_combobox = QComboBox()
63
- for count in range(50, 1010, 10):
63
+ for count in range(50, 10010, 10):
64
64
  self.particle_count_combobox.addItem(str(count))
65
65
  self.particle_count_combobox.setCurrentText("100")
66
66
  # Particle count
@@ -1,4 +1,5 @@
1
- from PySide6.QtWidgets import QWidget, QDialog, QGridLayout, QLabel, QComboBox, QPushButton
1
+ from PySide6.QtGui import QScreen
2
+ from PySide6.QtWidgets import QWidget, QDialog, QGridLayout, QLabel, QComboBox, QPushButton, QCheckBox
2
3
 
3
4
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
4
5
 
@@ -21,3 +22,22 @@ def monitor_choose_dialog(parent: QWidget, monitors: list):
21
22
  grid_layout.addWidget(no_button, 2, 1)
22
23
  input_dialog.setLayout(grid_layout)
23
24
  return input_dialog, combobox
25
+
26
+
27
+ def check_show_fullscreen_multi_screen(widget: QWidget, fullscreen_checkbox: QCheckBox, monitor: QScreen):
28
+ if fullscreen_checkbox.isChecked():
29
+ widget.setScreen(monitor)
30
+ widget.move(monitor.availableGeometry().topLeft())
31
+ widget.showFullScreen()
32
+ else:
33
+ widget.setScreen(monitor)
34
+ center = monitor.availableGeometry().center()
35
+ widget.move(center - widget.rect().center())
36
+ widget.show()
37
+
38
+
39
+ def check_show_fullscreen_one_screen(widget: QWidget, fullscreen_checkbox: QCheckBox):
40
+ if fullscreen_checkbox.isChecked():
41
+ widget.showFullScreen()
42
+ else:
43
+ widget.show()
@@ -4,7 +4,8 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton
4
4
 
5
5
  from frontengine.show.video.video_player import VideoWidget
6
6
  from frontengine.ui.dialog.choose_file_dialog import choose_video
7
- from frontengine.ui.page.utils import monitor_choose_dialog
7
+ from frontengine.ui.page.utils import monitor_choose_dialog, check_show_fullscreen_multi_screen, \
8
+ check_show_fullscreen_one_screen
8
9
  from frontengine.utils.logging.loggin_instance import front_engine_logger
9
10
  from frontengine.utils.multi_language.language_wrapper import language_wrapper
10
11
 
@@ -70,6 +71,11 @@ class VideoSettingUI(QWidget):
70
71
  language_wrapper.language_word_dict.get("video_setting_start_play")
71
72
  )
72
73
  self.start_button.clicked.connect(self.start_play_gif)
74
+ # Expand
75
+ self.fullscreen_checkbox = QCheckBox(
76
+ language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
77
+ )
78
+ self.fullscreen_checkbox.setChecked(True)
73
79
  # Show on all screen
74
80
  self.show_on_all_screen_checkbox = QCheckBox(
75
81
  language_wrapper.language_word_dict.get("Show on all screen")
@@ -92,6 +98,7 @@ class VideoSettingUI(QWidget):
92
98
  self.grid_layout.addWidget(self.choose_file_button, 3, 0)
93
99
  self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 4, 0)
94
100
  self.grid_layout.addWidget(self.show_on_bottom_checkbox, 4, 1)
101
+ self.grid_layout.addWidget(self.fullscreen_checkbox, 4, 2)
95
102
  self.grid_layout.addWidget(self.start_button, 5, 0)
96
103
  self.grid_layout.addWidget(self.ready_label, 5, 1)
97
104
  self.setLayout(self.grid_layout)
@@ -122,7 +129,7 @@ class VideoSettingUI(QWidget):
122
129
  monitors = QGuiApplication.screens()
123
130
  if self.show_all_screen is False and len(monitors) <= 1:
124
131
  video_widget = self._create_video_widget()
125
- video_widget.showFullScreen()
132
+ check_show_fullscreen_one_screen(video_widget, self.fullscreen_checkbox)
126
133
  elif self.show_all_screen is False and len(monitors) >= 2:
127
134
  input_dialog, combobox = monitor_choose_dialog(self, monitors)
128
135
  result = input_dialog.exec_()
@@ -131,18 +138,14 @@ class VideoSettingUI(QWidget):
131
138
  if len(monitors) > select_monitor_index:
132
139
  monitor = monitors[select_monitor_index]
133
140
  video_widget = self._create_video_widget()
134
- video_widget.setScreen(monitor)
135
- video_widget.move(monitor.availableGeometry().topLeft())
136
- video_widget.showFullScreen()
141
+ check_show_fullscreen_multi_screen(video_widget, self.fullscreen_checkbox, monitor)
137
142
  else:
138
143
  count = 0
139
144
  for monitor in monitors:
140
145
  video_widget = self._create_video_widget()
141
146
  if count >= 1:
142
147
  video_widget.media_player.audioOutput().setVolume(0)
143
- video_widget.setScreen(monitor)
144
- video_widget.move(monitor.availableGeometry().topLeft())
145
- video_widget.showFullScreen()
148
+ check_show_fullscreen_multi_screen(video_widget, self.fullscreen_checkbox, monitor)
146
149
  count = count + 1
147
150
 
148
151
  def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
@@ -62,6 +62,7 @@ english_word_dict = {
62
62
  "show_on_which_monitor": "Show on which monitor",
63
63
  "ok": "ok",
64
64
  "no": "no",
65
+ "fullscreen_checkbox_label": "Fullscreen?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Choose GIF or WEBP file",
67
68
  "gif_setting_ui_play": "Start Play GIF or WEBP",
@@ -62,6 +62,7 @@ french_word_dict = {
62
62
  "show_on_which_monitor": "Afficher sur quel écran",
63
63
  "ok": "OK",
64
64
  "no": "Non",
65
+ "fullscreen_checkbox_label": "Plein écran?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Choisir un fichier GIF ou WEBP",
67
68
  "gif_setting_ui_play": "Lancer la lecture du GIF ou WEBP",
@@ -62,6 +62,7 @@ germany_word_dict = {
62
62
  "show_on_which_monitor": "Auf welchem Monitor anzeigen",
63
63
  "ok": "OK",
64
64
  "no": "Nein",
65
+ "fullscreen_checkbox_label": "Vollbild?",
65
66
  # GIF-Einstellungs-UI
66
67
  "gif_setting_ui_choose_file": "GIF- oder WEBP-Datei auswählen",
67
68
  "gif_setting_ui_play": "GIF oder WEBP abspielen",
@@ -62,6 +62,7 @@ italian_word_dict = {
62
62
  "show_on_which_monitor": "Mostra su quale schermo",
63
63
  "ok": "OK",
64
64
  "no": "No",
65
+ "fullscreen_checkbox_label": "Schermo intero?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Scegli un file GIF o WEBP",
67
68
  "gif_setting_ui_play": "Avvia la riproduzione di GIF o WEBP",
@@ -62,6 +62,7 @@ russian_word_dict = {
62
62
  "show_on_which_monitor": "На каком мониторе показать",
63
63
  "ok": "ОК",
64
64
  "no": "Нет",
65
+ "fullscreen_checkbox_label": "Полноэкранный режим?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "Выберите файл GIF или WEBP",
67
68
  "gif_setting_ui_play": "Начать воспроизведение GIF или WEBP",
@@ -62,6 +62,7 @@ simplified_chinese_word_dict = {
62
62
  "show_on_which_monitor": "显示在哪个屏幕",
63
63
  "ok": "确定",
64
64
  "no": "否",
65
+ "fullscreen_checkbox_label": "全屏?",
65
66
  # GIF 设置 UI
66
67
  "gif_setting_ui_choose_file": "选择 GIF 或 WEBP 文件",
67
68
  "gif_setting_ui_play": "开始播放 GIF 或 WEBP",
@@ -62,6 +62,7 @@ traditional_chinese_word_dict = {
62
62
  "show_on_which_monitor": "顯示在哪個螢幕",
63
63
  "ok": "確定",
64
64
  "no": "否",
65
+ "fullscreen_checkbox_label": "全螢幕?",
65
66
  # GIF setting ui
66
67
  "gif_setting_ui_choose_file": "選擇 GIF 或 WEBP 檔案",
67
68
  "gif_setting_ui_play": "開始撥放 GIF 或 WEBP",
File without changes
@@ -0,0 +1,34 @@
1
+ import traceback
2
+ from typing import Callable
3
+
4
+ from PySide6 import QtCore
5
+ from PySide6.QtCore import Signal, QRunnable, Slot
6
+
7
+
8
+ class QThreadSignal(QtCore.QObject):
9
+ finished = Signal()
10
+ error = Signal(tuple)
11
+ result = Signal(object)
12
+ progress = Signal(int)
13
+
14
+
15
+ class QThreadWorker(QRunnable):
16
+
17
+ def __init__(self, function: Callable, *args, **kwargs):
18
+ super().__init__()
19
+ self.function = function
20
+ self.args = args
21
+ self.kwargs = kwargs
22
+ self.signal = QThreadSignal()
23
+
24
+ @Slot()
25
+ def run(self):
26
+ try:
27
+ result = self.function(*self.args, **self.kwargs)
28
+ except Exception as e:
29
+ traceback.print_exc()
30
+ self.signal.error.emit(e)
31
+ else:
32
+ self.signal.result.emit(result)
33
+ finally:
34
+ self.signal.finished.emit()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: frontengine
3
- Version: 0.0.66
3
+ Version: 0.0.68
4
4
  Summary: FrontEngine is BingGPT that can use-define front end or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  License: MIT
@@ -1,15 +1,19 @@
1
1
  frontengine/__init__.py,sha256=kRQu2NKQX6VjF70N7Alqp31mxqJ5SRZL1Ri4abYvz0c,1938
2
+ frontengine/gl_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
3
  frontengine/show/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ frontengine/show/clicker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ frontengine/show/clicker/clicker_scene.py,sha256=pZJdy4xP52fgU1aZP74KNimJdW7jw6RKmjco2Ct_G5Y,149
6
+ frontengine/show/clicker/clicker_ui.py,sha256=XzayxCffi_LKocMzaIWV9WQ6Zpx1DnadFRCWeaB0j3k,1204
3
7
  frontengine/show/gif/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- frontengine/show/gif/paint_gif.py,sha256=N_jj4wf5sPYj1vEjFFqlBDcjCD8hxF45ipRJ5yO6XOs,3024
8
+ frontengine/show/gif/paint_gif.py,sha256=IDF5HVZGKuuKs8fqjGgICe2fWvMTUPrTZJ6u2oteO8U,3080
5
9
  frontengine/show/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- frontengine/show/image/paint_image.py,sha256=BtKyFJP7UdOLMBsCoQ1fnT8ft-cUxDaufFzURgbwpJU,2467
10
+ frontengine/show/image/paint_image.py,sha256=1mlTMYvScXjvxdkIEu3x8TmMsVvFciMaQFUl_STcqrQ,2511
7
11
  frontengine/show/load/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
12
  frontengine/show/load/load_someone_make_ui.py,sha256=yjMrkA76VEYkKXygwKmoKaADymjjDlebI-7PNa6DrEo,1010
9
13
  frontengine/show/particle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- frontengine/show/particle/paint_particle.py,sha256=TacLlBOuWN_18GBYEd1Auqvu5vnM1QYBvY3rDmAeny8,1881
11
- frontengine/show/particle/particle_scene.py,sha256=3W9iZDwZOQRa3J90qDdE3dk7dbg-omh3eD6CcEqzwHg,2897
12
- frontengine/show/particle/particle_utils.py,sha256=AUHIHZpvvIJWF_iU6Urd9JXSeZdlwGJlTSWT5ywyg94,2999
14
+ frontengine/show/particle/particle_scene.py,sha256=KH09td30_hnZksdf3pAByugq2WUIHIjKFqM7puNbTCA,3142
15
+ frontengine/show/particle/particle_ui.py,sha256=TacLlBOuWN_18GBYEd1Auqvu5vnM1QYBvY3rDmAeny8,1881
16
+ frontengine/show/particle/particle_utils.py,sha256=ekfRYOidAchPlRpuoAuftFBNROMS3e9aA4Z2shQ3Y9c,2725
13
17
  frontengine/show/scene/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
18
  frontengine/show/scene/extend_graphic_scene.py,sha256=7UiEr_kRbhheGOj_rYeq3fAUtRacq2WH8fQZV0Q-tA4,148
15
19
  frontengine/show/scene/extend_graphic_view.py,sha256=b5yAA_PqMTCnn7-63Q8Fhm9HBiWfjo48_1xjh2nP67I,1999
@@ -20,13 +24,13 @@ frontengine/show/sound_player/sound_player.py,sha256=VOXwKI6-VdMH18u__atCay3wVJF
20
24
  frontengine/show/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
25
  frontengine/show/text/draw_text.py,sha256=7uXWXDVU6TE5sfQ52bXCNkl0uBIR3dku7xyZPKOqRD4,3685
22
26
  frontengine/show/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- frontengine/show/video/video_player.py,sha256=_Sjbcy0KwY3hdr5JIYDIFtnmeDj2EUP0A8w_nSDPnu0,3358
27
+ frontengine/show/video/video_player.py,sha256=ndiMp4nNvxJ3cpuBw_qvtbdm8dnwdm7Jnxl3ke0i0ZU,3360
24
28
  frontengine/show/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
29
  frontengine/show/web/webview.py,sha256=2-7HW395Fp0SZnjUcrTGW-AWk_5OAAyzgjoXnnPpQoE,2842
26
30
  frontengine/system_tray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
31
  frontengine/system_tray/extend_system_tray.py,sha256=k4u2lEox-fCwmQKy1qnek9SGoqUkMFv8Av_DcNanwcE,1595
28
32
  frontengine/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- frontengine/ui/main_ui.py,sha256=HZJRW4au1zcpb1pON2sKuOu84MsaABka9hUdtgzVx58,8259
33
+ frontengine/ui/main_ui.py,sha256=47vTOtnNbiPV3J1LtKRRSnXlTmaedJSX7Cf4neIwhyA,7304
30
34
  frontengine/ui/color/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
35
  frontengine/ui/color/global_color.py,sha256=Rh-R-X2BHVjcK5MTBZ1nEMVHgLj1rP4nk-wTQKbiwFA,125
32
36
  frontengine/ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -37,15 +41,15 @@ frontengine/ui/menu/help_menu.py,sha256=WD6t4Mp5OKAlfI9RDKz2kN9ODBcil2rf4H61REK6
37
41
  frontengine/ui/menu/how_to_menu.py,sha256=s1azoiD8H2lApbFPcrv8QvsR1mwh6O_gFHRngQ7bsbc,952
38
42
  frontengine/ui/menu/language_menu.py,sha256=p0nA4bgxc7CIX8_WxUKlnjNLFyvmqCx-h6GXSazlVeM,4271
39
43
  frontengine/ui/page/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- frontengine/ui/page/utils.py,sha256=UxHVStfVg-6563T20pEjnVMYzMvy9JePAj1VOm8HX_g,1103
44
+ frontengine/ui/page/utils.py,sha256=xhCZuF8DwB4mYn8H76PDIAgSpz1WuIl4V07tSbzm9Ks,1808
41
45
  frontengine/ui/page/control_center/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
46
  frontengine/ui/page/control_center/control_center_ui.py,sha256=BxXlWwW9uf48b1jfWgtTBCGZOShlW03m8kzI43YjpaM,8237
43
47
  frontengine/ui/page/gif/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- frontengine/ui/page/gif/gif_setting_ui.py,sha256=HherbCmOJgO5TLXHt9sflTspmCQh1pv1IGyfKmp7kog,6908
48
+ frontengine/ui/page/gif/gif_setting_ui.py,sha256=UwtgEozpLcs4n0gbiH26gWDNwcfMMWOgYpWV3Nk9XLA,7151
45
49
  frontengine/ui/page/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- frontengine/ui/page/image/image_setting_ui.py,sha256=eyNbJqxJhbKzyGjTlrJgVmPmkcC4-6N7hjvyBQJBC4o,6046
50
+ frontengine/ui/page/image/image_setting_ui.py,sha256=M09doSyJhjYR0vMsTWhLJ9gqNAH2Qffb3JGOB6EnHk0,6274
47
51
  frontengine/ui/page/particle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- frontengine/ui/page/particle/particle_setting_ui.py,sha256=xtzvAM7N-W_jq4MKFWBizb-LgMxyTDAImbl-mJYvs48,8949
52
+ frontengine/ui/page/particle/particle_setting_ui.py,sha256=mYRrXT2weh0Rn-d_Dz9yFR6CHYXjEgHxNlhapTwXD6E,8947
49
53
  frontengine/ui/page/scene_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
54
  frontengine/ui/page/scene_setting/scene_manager.py,sha256=3s7UlMbQVTyDZd725wdzDvXqeiunE1Q5UQj5hxWGhIs,4978
51
55
  frontengine/ui/page/scene_setting/scene_setting_ui.py,sha256=jc6BGKHJGmPbFxChyILW3BBU_EF1yT0l63OJNqJYWSM,2590
@@ -61,7 +65,7 @@ frontengine/ui/page/sound_player/sound_player_setting_ui.py,sha256=OFRxUyUXVj3-P
61
65
  frontengine/ui/page/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
66
  frontengine/ui/page/text/text_setting_ui.py,sha256=nSrXkezs7X9-7Kd16raaz3WZJFwyL4cuz3j74VQIS9U,6317
63
67
  frontengine/ui/page/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- frontengine/ui/page/video/video_setting_ui.py,sha256=crFydSKtBLDkdXyRENQupbXBX68OCBX_D97Fn3zowmk,8078
68
+ frontengine/ui/page/video/video_setting_ui.py,sha256=6q_cG6PlTZpAlAm0oB7vEBMjsYtoXQE32dy2GXFrtL4,8313
65
69
  frontengine/ui/page/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
70
  frontengine/ui/page/web/web_setting_ui.py,sha256=FgTCn68WTeFp197mhvilWKK25m0xF0gSZ9b7hfG2ELQ,5596
67
71
  frontengine/user_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -89,18 +93,20 @@ frontengine/utils/json_format/json_process.py,sha256=xJt_4Hm_o3sNDoeGtRW9Q7fsRj3
89
93
  frontengine/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
94
  frontengine/utils/logging/loggin_instance.py,sha256=Zjr384o2q8x0QWv_hNoHIM_zCp5-HFgW14t-d30GUcQ,598
91
95
  frontengine/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- frontengine/utils/multi_language/english.py,sha256=K_0LJzJSgsQN9EDZyvODf2VEPiED0GIv_NuAxTtmMAY,6146
93
- frontengine/utils/multi_language/france.py,sha256=GZG9n3oV7AeC7PlcH8A9rj7OtMCbkl4NLsyXQbHjzqQ,7146
94
- frontengine/utils/multi_language/germany.py,sha256=Ql3Hm9yW0OW0ogWUs-fJMJUaUb5s5VFv3U5zLfFAW8c,6851
95
- frontengine/utils/multi_language/italy.py,sha256=Jo81Qs1c1c-yaP9VbfZSOM5tv-4UqwqsYb0D3LEEp80,6921
96
+ frontengine/utils/multi_language/english.py,sha256=-Xc9wLLJuqaUIPrPv_g2V7T347FcVmaNKMrjNf2Kpb0,6195
97
+ frontengine/utils/multi_language/france.py,sha256=_N3gNqYsaLqOty8jUrF_ghA_uxwQ72jJzjG3i7_M6WQ,7197
98
+ frontengine/utils/multi_language/germany.py,sha256=RXJ-v9PViP9UkQq_jTj19fFlAhkp4G6IhvcgmJ8Eoag,6898
99
+ frontengine/utils/multi_language/italy.py,sha256=WALzKGHm3iWlUrgKW7qM3YjPJ_bRT--dCg8qDSoEn7o,6974
96
100
  frontengine/utils/multi_language/language_wrapper.py,sha256=GpQxvMlDMiHOAp71Ki0bOM0sL5kiI9tszpE1fQCZC14,1588
97
- frontengine/utils/multi_language/russian.py,sha256=lCI9LiLHZ8FBVlAoq9VdkYPKmcc0QPy-M5SkdFClweg,8745
98
- frontengine/utils/multi_language/simplified_chinese.py,sha256=CIGC8VrdwB513YimHgrG0gsftzGbyXgqdGRkdLPFSo8,6358
99
- frontengine/utils/multi_language/traditional_chinese.py,sha256=8dRi6x6PJwi2wIoJWef-9zcfzKl0OEQH-3sB4ZnFAF0,6365
101
+ frontengine/utils/multi_language/russian.py,sha256=KoORJ56Cjt_qJekBopHIolXjbeu5DRrM2cj6i9-v66o,8821
102
+ frontengine/utils/multi_language/simplified_chinese.py,sha256=ViN7N2XXdscSJmxnefAh7IpSK53-SLMypmxtCZcvv7Y,6403
103
+ frontengine/utils/multi_language/traditional_chinese.py,sha256=Xd4i4uiJz6zyssVPAxEAcU-WzjzkbcUoeI3X9KLNEEU,6413
100
104
  frontengine/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
105
  frontengine/utils/redirect_manager/redirect_manager_class.py,sha256=zGJeVpjRU12MCnhVAdksAIhK_IhddI4cNKVb7DMgOZA,1888
102
- frontengine-0.0.66.dist-info/LICENSE,sha256=b3VlPBXnrDylKGffOEOLWMgOX-yfd65XC7PA1_sox2o,1085
103
- frontengine-0.0.66.dist-info/METADATA,sha256=2nDO9CJn6wlm5wBIkVfbTRsbKDkwg5pfkVEi7xbFL-I,2166
104
- frontengine-0.0.66.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
105
- frontengine-0.0.66.dist-info/top_level.txt,sha256=btCybScN_ubeQ8phsSDBB0T-HyHjqt7b-WPy61uTox0,12
106
- frontengine-0.0.66.dist-info/RECORD,,
106
+ frontengine/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
+ frontengine/worker/qthread_worker.py,sha256=TcmRv4PUlWxYLzMoB_6fUefEZpVhNy5D6_hhShAdKzU,875
108
+ frontengine-0.0.68.dist-info/LICENSE,sha256=b3VlPBXnrDylKGffOEOLWMgOX-yfd65XC7PA1_sox2o,1085
109
+ frontengine-0.0.68.dist-info/METADATA,sha256=ErxGmFPRxDrdtQm0Wlch5X_lNSr751oV9tz09H-vfEY,2166
110
+ frontengine-0.0.68.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
111
+ frontengine-0.0.68.dist-info/top_level.txt,sha256=btCybScN_ubeQ8phsSDBB0T-HyHjqt7b-WPy61uTox0,12
112
+ frontengine-0.0.68.dist-info/RECORD,,