frontengine 0.0.66__py3-none-any.whl → 0.0.67__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.
- frontengine/gl_widget/__init__.py +0 -0
- frontengine/show/clicker/__init__.py +0 -0
- frontengine/show/clicker/clicker_scene.py +7 -0
- frontengine/show/clicker/clicker_ui.py +30 -0
- frontengine/show/particle/particle_scene.py +18 -12
- frontengine/show/particle/particle_utils.py +19 -33
- frontengine/show/video/video_player.py +1 -0
- frontengine/ui/main_ui.py +3 -19
- frontengine/ui/page/gif/gif_setting_ui.py +9 -7
- frontengine/ui/page/image/image_setting_ui.py +11 -8
- frontengine/ui/page/particle/particle_setting_ui.py +2 -2
- frontengine/ui/page/utils.py +14 -1
- frontengine/ui/page/video/video_setting_ui.py +9 -7
- frontengine/utils/multi_language/english.py +1 -0
- frontengine/utils/multi_language/france.py +1 -0
- frontengine/utils/multi_language/germany.py +1 -0
- frontengine/utils/multi_language/italy.py +1 -0
- frontengine/utils/multi_language/russian.py +1 -0
- frontengine/utils/multi_language/simplified_chinese.py +1 -0
- frontengine/utils/multi_language/traditional_chinese.py +1 -0
- frontengine/worker/__init__.py +0 -0
- frontengine/worker/qthread_worker.py +34 -0
- {frontengine-0.0.66.dist-info → frontengine-0.0.67.dist-info}/METADATA +1 -1
- {frontengine-0.0.66.dist-info → frontengine-0.0.67.dist-info}/RECORD +28 -22
- /frontengine/show/particle/{paint_particle.py → particle_ui.py} +0 -0
- {frontengine-0.0.66.dist-info → frontengine-0.0.67.dist-info}/LICENSE +0 -0
- {frontengine-0.0.66.dist-info → frontengine-0.0.67.dist-info}/WHEEL +0 -0
- {frontengine-0.0.66.dist-info → frontengine-0.0.67.dist-info}/top_level.txt +0 -0
File without changes
|
File without changes
|
@@ -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)
|
@@ -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,
|
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(
|
44
|
-
self.update_timer.timeout.connect(self.
|
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}":
|
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
|
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 =
|
59
|
-
pixmap_item.
|
60
|
-
|
61
|
-
|
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
|
7
|
+
particle.update({"y": particle.get("y") + random.randint(0, particle_speed)})
|
22
8
|
|
23
9
|
|
24
|
-
def particle_up(particle_dict: Dict[str,
|
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
|
12
|
+
particle.update({"y": particle.get("y") - random.randint(0, particle_speed)})
|
27
13
|
|
28
14
|
|
29
|
-
def particle_left(particle_dict: Dict[str,
|
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
|
17
|
+
particle.update({"x": particle.get("x") - random.randint(0, particle_speed)})
|
32
18
|
|
33
19
|
|
34
|
-
def particle_right(particle_dict: Dict[str,
|
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
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
62
|
-
particle.x
|
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,
|
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
|
68
|
-
particle.x
|
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,
|
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,
|
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
|
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
|
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,7 @@ 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
|
9
9
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
10
10
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
11
11
|
|
@@ -61,6 +61,11 @@ class GIFSettingUI(QWidget):
|
|
61
61
|
language_wrapper.language_word_dict.get("gif_setting_ui_play")
|
62
62
|
)
|
63
63
|
self.start_button.clicked.connect(self.start_play_gif)
|
64
|
+
# Expand
|
65
|
+
self.fullscreen_checkbox = QCheckBox(
|
66
|
+
language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
|
67
|
+
)
|
68
|
+
self.fullscreen_checkbox.setChecked(True)
|
64
69
|
# Show on all screen
|
65
70
|
self.show_on_all_screen_checkbox = QCheckBox(
|
66
71
|
language_wrapper.language_word_dict.get("Show on all screen")
|
@@ -79,6 +84,7 @@ class GIFSettingUI(QWidget):
|
|
79
84
|
self.grid_layout.addWidget(self.speed_slider, 1, 2)
|
80
85
|
self.grid_layout.addWidget(self.choose_file_button, 2, 0)
|
81
86
|
self.grid_layout.addWidget(self.ready_label, 2, 1)
|
87
|
+
self.grid_layout.addWidget(self.fullscreen_checkbox, 2, 2)
|
82
88
|
self.grid_layout.addWidget(self.start_button, 3, 0)
|
83
89
|
self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 3, 1)
|
84
90
|
self.grid_layout.addWidget(self.show_on_bottom_checkbox, 3, 2)
|
@@ -116,15 +122,11 @@ class GIFSettingUI(QWidget):
|
|
116
122
|
if len(monitors) > select_monitor_index:
|
117
123
|
monitor = monitors[select_monitor_index]
|
118
124
|
gif_widget = self._create_gif_widget()
|
119
|
-
gif_widget.
|
120
|
-
gif_widget.move(monitor.availableGeometry().topLeft())
|
121
|
-
gif_widget.showFullScreen()
|
125
|
+
check_show_fullscreen(gif_widget, self.fullscreen_checkbox, monitor)
|
122
126
|
else:
|
123
127
|
for monitor in monitors:
|
124
128
|
gif_widget = self._create_gif_widget()
|
125
|
-
gif_widget.
|
126
|
-
gif_widget.move(monitor.availableGeometry().topLeft())
|
127
|
-
gif_widget.showFullScreen()
|
129
|
+
check_show_fullscreen(gif_widget, self.fullscreen_checkbox, monitor)
|
128
130
|
|
129
131
|
def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
|
130
132
|
self.ready_label.setText(
|
@@ -1,11 +1,11 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import
|
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
|
9
9
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
10
10
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
11
11
|
|
@@ -50,6 +50,11 @@ class ImageSettingUI(QWidget):
|
|
50
50
|
language_wrapper.language_word_dict.get("image_setting_ui_play")
|
51
51
|
)
|
52
52
|
self.start_button.clicked.connect(self.start_play_image)
|
53
|
+
# Expand
|
54
|
+
self.fullscreen_checkbox = QCheckBox(
|
55
|
+
language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
|
56
|
+
)
|
57
|
+
self.fullscreen_checkbox.setChecked(True)
|
53
58
|
# Show on all screen
|
54
59
|
self.show_on_all_screen_checkbox = QCheckBox(
|
55
60
|
language_wrapper.language_word_dict.get("Show on all screen")
|
@@ -65,6 +70,7 @@ class ImageSettingUI(QWidget):
|
|
65
70
|
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
66
71
|
self.grid_layout.addWidget(self.choose_file_button, 1, 0)
|
67
72
|
self.grid_layout.addWidget(self.ready_label, 1, 1)
|
73
|
+
self.grid_layout.addWidget(self.fullscreen_checkbox, 1, 2)
|
68
74
|
self.grid_layout.addWidget(self.start_button, 2, 0)
|
69
75
|
self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 1)
|
70
76
|
self.grid_layout.addWidget(self.show_on_bottom_checkbox, 2, 2)
|
@@ -101,15 +107,12 @@ class ImageSettingUI(QWidget):
|
|
101
107
|
if len(monitors) > select_monitor_index:
|
102
108
|
monitor = monitors[select_monitor_index]
|
103
109
|
image_widget = self._create_image_widget()
|
104
|
-
image_widget.
|
105
|
-
|
106
|
-
image_widget.showFullScreen()
|
110
|
+
check_show_fullscreen(image_widget, self.fullscreen_checkbox, monitor)
|
111
|
+
|
107
112
|
else:
|
108
113
|
for monitor in monitors:
|
109
114
|
image_widget = self._create_image_widget()
|
110
|
-
image_widget.
|
111
|
-
image_widget.move(monitor.availableGeometry().topLeft())
|
112
|
-
image_widget.showFullScreen()
|
115
|
+
check_show_fullscreen(image_widget, self.fullscreen_checkbox, monitor)
|
113
116
|
|
114
117
|
def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
|
115
118
|
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.
|
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,
|
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
|
frontengine/ui/page/utils.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
from PySide6.
|
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,15 @@ 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(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()
|
@@ -4,7 +4,7 @@ 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
|
8
8
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
9
9
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
10
10
|
|
@@ -70,6 +70,11 @@ class VideoSettingUI(QWidget):
|
|
70
70
|
language_wrapper.language_word_dict.get("video_setting_start_play")
|
71
71
|
)
|
72
72
|
self.start_button.clicked.connect(self.start_play_gif)
|
73
|
+
# Expand
|
74
|
+
self.fullscreen_checkbox = QCheckBox(
|
75
|
+
language_wrapper.language_word_dict.get("fullscreen_checkbox_label")
|
76
|
+
)
|
77
|
+
self.fullscreen_checkbox.setChecked(True)
|
73
78
|
# Show on all screen
|
74
79
|
self.show_on_all_screen_checkbox = QCheckBox(
|
75
80
|
language_wrapper.language_word_dict.get("Show on all screen")
|
@@ -92,6 +97,7 @@ class VideoSettingUI(QWidget):
|
|
92
97
|
self.grid_layout.addWidget(self.choose_file_button, 3, 0)
|
93
98
|
self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 4, 0)
|
94
99
|
self.grid_layout.addWidget(self.show_on_bottom_checkbox, 4, 1)
|
100
|
+
self.grid_layout.addWidget(self.fullscreen_checkbox, 4, 2)
|
95
101
|
self.grid_layout.addWidget(self.start_button, 5, 0)
|
96
102
|
self.grid_layout.addWidget(self.ready_label, 5, 1)
|
97
103
|
self.setLayout(self.grid_layout)
|
@@ -131,18 +137,14 @@ class VideoSettingUI(QWidget):
|
|
131
137
|
if len(monitors) > select_monitor_index:
|
132
138
|
monitor = monitors[select_monitor_index]
|
133
139
|
video_widget = self._create_video_widget()
|
134
|
-
video_widget.
|
135
|
-
video_widget.move(monitor.availableGeometry().topLeft())
|
136
|
-
video_widget.showFullScreen()
|
140
|
+
check_show_fullscreen(video_widget, self.fullscreen_checkbox, monitor)
|
137
141
|
else:
|
138
142
|
count = 0
|
139
143
|
for monitor in monitors:
|
140
144
|
video_widget = self._create_video_widget()
|
141
145
|
if count >= 1:
|
142
146
|
video_widget.media_player.audioOutput().setVolume(0)
|
143
|
-
video_widget.
|
144
|
-
video_widget.move(monitor.availableGeometry().topLeft())
|
145
|
-
video_widget.showFullScreen()
|
147
|
+
check_show_fullscreen(video_widget, self.fullscreen_checkbox, monitor)
|
146
148
|
count = count + 1
|
147
149
|
|
148
150
|
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",
|
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,5 +1,9 @@
|
|
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
8
|
frontengine/show/gif/paint_gif.py,sha256=N_jj4wf5sPYj1vEjFFqlBDcjCD8hxF45ipRJ5yO6XOs,3024
|
5
9
|
frontengine/show/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -7,9 +11,9 @@ frontengine/show/image/paint_image.py,sha256=BtKyFJP7UdOLMBsCoQ1fnT8ft-cUxDaufFz
|
|
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/
|
11
|
-
frontengine/show/particle/
|
12
|
-
frontengine/show/particle/particle_utils.py,sha256=
|
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=
|
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=
|
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=
|
44
|
+
frontengine/ui/page/utils.py,sha256=kb77e3Vc9WgXI4WDS5bpeOXrxs5G9F0u2d5_b5X0qhs,1595
|
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=
|
48
|
+
frontengine/ui/page/gif/gif_setting_ui.py,sha256=lVVMAxNcl2xDgRlXdabG7cT2xlsxpm-0322ZM5Efqgg,7028
|
45
49
|
frontengine/ui/page/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
46
|
-
frontengine/ui/page/image/image_setting_ui.py,sha256=
|
50
|
+
frontengine/ui/page/image/image_setting_ui.py,sha256=8whUEXIOTKeiobGO6-FXBbmjyfL-gGcq2KqGQDVsghY,6151
|
47
51
|
frontengine/ui/page/particle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
frontengine/ui/page/particle/particle_setting_ui.py,sha256=
|
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=
|
68
|
+
frontengine/ui/page/video/video_setting_ui.py,sha256=2HKaPHG-SiHx0ryo-arpm6pK4gGxuaOHkna9u4q-M4Y,8190
|
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
|
93
|
-
frontengine/utils/multi_language/france.py,sha256=
|
94
|
-
frontengine/utils/multi_language/germany.py,sha256=
|
95
|
-
frontengine/utils/multi_language/italy.py,sha256=
|
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=
|
98
|
-
frontengine/utils/multi_language/simplified_chinese.py,sha256=
|
99
|
-
frontengine/utils/multi_language/traditional_chinese.py,sha256=
|
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
|
103
|
-
frontengine
|
104
|
-
frontengine-0.0.
|
105
|
-
frontengine-0.0.
|
106
|
-
frontengine-0.0.
|
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.67.dist-info/LICENSE,sha256=b3VlPBXnrDylKGffOEOLWMgOX-yfd65XC7PA1_sox2o,1085
|
109
|
+
frontengine-0.0.67.dist-info/METADATA,sha256=8B4D3rAwLA4cz6w4iayrzVkedIVV9WhdwwU-xKJQXW4,2166
|
110
|
+
frontengine-0.0.67.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
111
|
+
frontengine-0.0.67.dist-info/top_level.txt,sha256=btCybScN_ubeQ8phsSDBB0T-HyHjqt7b-WPy61uTox0,12
|
112
|
+
frontengine-0.0.67.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|