frontengine 0.0.56__py3-none-any.whl → 0.0.57__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/__init__.py +1 -2
- frontengine/show/scene/extend_graphic_scene.py +0 -1
- frontengine/show/scene/extend_graphic_view.py +2 -1
- frontengine/show/scene/scene.py +23 -41
- frontengine/show/text/draw_text.py +28 -3
- frontengine/ui/dialog/choose_file_dialog.py +0 -9
- frontengine/ui/main_ui.py +2 -0
- frontengine/ui/menu/how_to_menu.py +13 -2
- frontengine/ui/page/control_center/control_center_ui.py +2 -6
- frontengine/ui/page/gif/gif_setting_ui.py +16 -4
- frontengine/ui/page/image/image_setting_ui.py +15 -3
- frontengine/ui/page/scene_setting/scene_manager.py +96 -0
- frontengine/ui/page/scene_setting/scene_page/gif.py +102 -0
- frontengine/ui/page/scene_setting/scene_page/image.py +83 -0
- frontengine/ui/page/scene_setting/scene_page/sound.py +84 -0
- frontengine/ui/page/scene_setting/scene_page/text.py +93 -0
- frontengine/ui/page/scene_setting/scene_page/video.py +122 -0
- frontengine/ui/page/scene_setting/scene_page/web.py +66 -0
- frontengine/ui/page/scene_setting/scene_setting_ui.py +30 -23
- frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -1
- frontengine/ui/page/text/text_setting_ui.py +35 -7
- frontengine/ui/page/utils.py +23 -0
- frontengine/ui/page/video/video_setting_ui.py +15 -3
- frontengine/ui/page/web/web_setting_ui.py +15 -3
- frontengine/user_setting/scene_setting.py +34 -0
- frontengine/utils/multi_language/english.py +10 -3
- frontengine/utils/multi_language/traditional_chinese.py +11 -3
- {frontengine-0.0.56.dist-info → frontengine-0.0.57.dist-info}/METADATA +1 -1
- {frontengine-0.0.56.dist-info → frontengine-0.0.57.dist-info}/RECORD +33 -45
- frontengine/ui/page/scene_setting/scene_tabs/Image.py +0 -61
- frontengine/ui/page/scene_setting/scene_tabs/gif.py +0 -74
- frontengine/ui/page/scene_setting/scene_tabs/scene_control.py +0 -78
- frontengine/ui/page/scene_setting/scene_tabs/sound.py +0 -44
- frontengine/ui/page/scene_setting/scene_tabs/tableview_model.py +0 -65
- frontengine/ui/page/scene_setting/scene_tabs/text.py +0 -77
- frontengine/ui/page/scene_setting/scene_tabs/ui.py +0 -56
- frontengine/ui/page/scene_setting/scene_tabs/video.py +0 -88
- frontengine/ui/page/scene_setting/scene_tabs/web.py +0 -74
- frontengine/user_setting/gif/__init__.py +0 -0
- frontengine/user_setting/gif/gif_setting.py +0 -5
- frontengine/user_setting/image/__init__.py +0 -0
- frontengine/user_setting/image/image_setting.py +0 -4
- frontengine/user_setting/sound/__init__.py +0 -0
- frontengine/user_setting/sound/sound_setting.py +0 -4
- frontengine/user_setting/text/__init__.py +0 -0
- frontengine/user_setting/text/text_setting.py +0 -5
- frontengine/user_setting/video/__init__.py +0 -0
- frontengine/user_setting/video/video_setting.py +0 -6
- frontengine/user_setting/web/__init__.py +0 -0
- frontengine/user_setting/web/web_setting.py +0 -4
- /frontengine/ui/page/scene_setting/{scene_tabs → scene_page}/__init__.py +0 -0
- {frontengine-0.0.56.dist-info → frontengine-0.0.57.dist-info}/LICENSE +0 -0
- {frontengine-0.0.56.dist-info → frontengine-0.0.57.dist-info}/WHEEL +0 -0
- {frontengine-0.0.56.dist-info → frontengine-0.0.57.dist-info}/top_level.txt +0 -0
frontengine/__init__.py
CHANGED
@@ -18,7 +18,6 @@ from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
|
|
18
18
|
from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
19
19
|
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
20
20
|
from frontengine.ui.main_ui import FrontEngineMainUI
|
21
|
-
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneControlSettingUI
|
22
21
|
from frontengine.ui.main_ui import FrontEngine_EXTEND_TAB
|
23
22
|
from frontengine.utils.redirect_manager.redirect_manager_class import RedirectManager
|
24
23
|
|
@@ -26,6 +25,6 @@ __all__ = [
|
|
26
25
|
"start_front_engine", "GifWidget", "SoundPlayer", "SoundEffectWidget", "TextWidget",
|
27
26
|
"WebWidget", "ImageWidget", "VideoWidget", "language_wrapper", "load_extend_ui_file", "load_ui_file",
|
28
27
|
"TextSettingUI", "WEBSettingUI", "GIFSettingUI", "ImageSettingUI", "SoundPlayerSettingUI",
|
29
|
-
"VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
|
28
|
+
"VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
|
30
29
|
"FrontEngine_EXTEND_TAB", "RedirectManager"
|
31
30
|
]
|
@@ -12,6 +12,7 @@ class ExtendGraphicView(QGraphicsView):
|
|
12
12
|
Qt.WindowType.WindowType_Mask |
|
13
13
|
Qt.WindowType.Tool
|
14
14
|
)
|
15
|
+
self.setStyleSheet("background:transparent")
|
15
16
|
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
16
17
|
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
17
18
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
@@ -23,7 +24,7 @@ class ExtendGraphicView(QGraphicsView):
|
|
23
24
|
pass
|
24
25
|
else:
|
25
26
|
current_position = event.position()
|
26
|
-
scene_position = self.mapToScene(QPoint(current_position.x(), current_position.y()))
|
27
|
+
scene_position = self.mapToScene(QPoint(int(current_position.x()), int(current_position.y())))
|
27
28
|
view_width = self.viewport().width()
|
28
29
|
view_height = self.viewport().height()
|
29
30
|
horizon_scale = current_position.x() / view_width
|
frontengine/show/scene/scene.py
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
from typing import List, Dict
|
2
2
|
|
3
|
-
from PySide6.QtWidgets import QGraphicsProxyWidget
|
3
|
+
from PySide6.QtWidgets import QGraphicsProxyWidget
|
4
|
+
from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
|
4
5
|
|
5
6
|
from frontengine.show.gif.paint_gif import GifWidget
|
6
7
|
from frontengine.show.image.paint_image import ImageWidget
|
7
|
-
from frontengine.show.load.load_someone_make_ui import load_ui_file, read_extend_ui
|
8
8
|
from frontengine.show.scene.extend_graphic_scene import ExtendGraphicScene
|
9
|
-
from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
|
10
9
|
from frontengine.show.sound_player.sound_player import SoundPlayer
|
11
10
|
from frontengine.show.text.draw_text import TextWidget
|
12
11
|
from frontengine.show.video.video_player import VideoWidget
|
@@ -20,25 +19,25 @@ class SceneManager(object):
|
|
20
19
|
):
|
21
20
|
super().__init__()
|
22
21
|
self.graphic_scene = ExtendGraphicScene()
|
23
|
-
self.graphic_view = ExtendGraphicView(self.graphic_scene)
|
24
22
|
self.widget_list: List[QGraphicsProxyWidget] = list()
|
23
|
+
self.view_list: List[ExtendGraphicView] = []
|
25
24
|
|
26
|
-
def add_image(self,
|
27
|
-
image_path =
|
25
|
+
def add_image(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
26
|
+
image_path = setting_dict.get("file_path")
|
28
27
|
image_widget = ImageWidget(image_path)
|
29
|
-
opacity = float(
|
28
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
30
29
|
opacity = opacity if opacity is not None else 0.2
|
31
30
|
image_widget.set_ui_variable(opacity)
|
32
31
|
proxy_widget = self.graphic_scene.addWidget(image_widget)
|
33
32
|
self.widget_list.append(proxy_widget)
|
34
33
|
return proxy_widget
|
35
34
|
|
36
|
-
def add_gif(self,
|
37
|
-
gif_image_path =
|
35
|
+
def add_gif(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
36
|
+
gif_image_path = setting_dict.get("file_path")
|
38
37
|
gif_widget = GifWidget(gif_image_path)
|
39
|
-
speed = int(
|
38
|
+
speed = int(setting_dict.get("speed"))
|
40
39
|
speed = speed if speed is not None else 100
|
41
|
-
opacity = float(
|
40
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
42
41
|
opacity = opacity if opacity is not None else 0.2
|
43
42
|
gif_widget.set_gif_variable(speed)
|
44
43
|
gif_widget.set_ui_variable(opacity)
|
@@ -46,30 +45,32 @@ class SceneManager(object):
|
|
46
45
|
self.widget_list.append(proxy_widget)
|
47
46
|
return proxy_widget
|
48
47
|
|
49
|
-
def add_sound(self,
|
50
|
-
sound_path =
|
48
|
+
def add_sound(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
49
|
+
sound_path = setting_dict.get("file_path")
|
51
50
|
sound_widget = SoundPlayer(sound_path)
|
52
|
-
volume = float(
|
51
|
+
volume = float(setting_dict.get("volume")) / 100
|
53
52
|
volume = volume if volume is not None else 1
|
54
53
|
sound_widget.set_player_variable(volume)
|
55
54
|
proxy_widget = self.graphic_scene.addWidget(sound_widget)
|
56
55
|
self.widget_list.append(proxy_widget)
|
57
56
|
return proxy_widget
|
58
57
|
|
59
|
-
def add_text(self,
|
60
|
-
text =
|
58
|
+
def add_text(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
59
|
+
text = setting_dict.get("text")
|
61
60
|
text_widget = TextWidget(text)
|
62
|
-
font_size = int(
|
61
|
+
font_size = int(setting_dict.get("font_size"))
|
63
62
|
font_size = font_size if font_size is not None else 100
|
64
|
-
opacity = float(
|
63
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
65
64
|
opacity = opacity if opacity is not None else 0.2
|
65
|
+
alignment = setting_dict.get("alignment", "Center")
|
66
66
|
text_widget.set_ui_variable(opacity)
|
67
67
|
text_widget.set_font_variable(font_size)
|
68
|
+
text_widget.set_alignment(alignment)
|
68
69
|
proxy_widget = self.graphic_scene.addWidget(text_widget)
|
69
70
|
self.widget_list.append(proxy_widget)
|
70
71
|
return proxy_widget
|
71
72
|
|
72
|
-
def add_video(self, video_setting: Dict
|
73
|
+
def add_video(self, video_setting: Dict) -> QGraphicsProxyWidget:
|
73
74
|
video_path = video_setting.get("file_path")
|
74
75
|
video_widget = VideoWidget(video_path)
|
75
76
|
opacity = float(video_setting.get("opacity")) / 100
|
@@ -84,31 +85,12 @@ class SceneManager(object):
|
|
84
85
|
self.widget_list.append(proxy_widget)
|
85
86
|
return proxy_widget
|
86
87
|
|
87
|
-
def add_web(self,
|
88
|
-
url =
|
88
|
+
def add_web(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
89
|
+
url = setting_dict.get("url")
|
89
90
|
web_widget = WebWidget(url)
|
90
|
-
opacity = float(
|
91
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
91
92
|
opacity = opacity if opacity is not None else 0.2
|
92
|
-
enable_input = web_setting.get("enable_input")
|
93
|
-
enable_input = enable_input if enable_input is not None else False
|
94
93
|
web_widget.set_ui_variable(opacity)
|
95
|
-
web_widget.set_ui_window_flag(enable_input=enable_input)
|
96
94
|
proxy_widget = self.graphic_scene.addWidget(web_widget)
|
97
95
|
self.widget_list.append(proxy_widget)
|
98
96
|
return proxy_widget
|
99
|
-
|
100
|
-
def add_extend_ui_file(self, ui_setting_dict: Dict[str, str]) -> QGraphicsProxyWidget:
|
101
|
-
ui_path = ui_setting_dict.get("file_path")
|
102
|
-
extend_widget = load_ui_file(ui_path)
|
103
|
-
proxy_widget = self.graphic_scene.addWidget(extend_widget)
|
104
|
-
self.widget_list.append(proxy_widget)
|
105
|
-
return proxy_widget
|
106
|
-
|
107
|
-
def add_extend_ui(self, ui: QWidget) -> QGraphicsProxyWidget:
|
108
|
-
extend_widget = read_extend_ui(ui)
|
109
|
-
proxy_widget = self.graphic_scene.addWidget(extend_widget)
|
110
|
-
self.widget_list.append(proxy_widget)
|
111
|
-
return proxy_widget
|
112
|
-
|
113
|
-
def show(self):
|
114
|
-
self.graphic_view.showMaximized()
|
@@ -8,7 +8,8 @@ from PySide6.QtWidgets import QWidget
|
|
8
8
|
|
9
9
|
class TextWidget(QWidget):
|
10
10
|
|
11
|
-
def __init__(self, text: str, draw_location_x: int = 0, draw_location_y: int = 0
|
11
|
+
def __init__(self, text: str, draw_location_x: int = 0, draw_location_y: int = 0,
|
12
|
+
alignment: str = "Center"):
|
12
13
|
super().__init__()
|
13
14
|
self.draw_location_x = draw_location_x
|
14
15
|
self.draw_location_y = draw_location_y
|
@@ -17,6 +18,16 @@ class TextWidget(QWidget):
|
|
17
18
|
self.text = text
|
18
19
|
self.font_size = 100
|
19
20
|
self.opacity = 0.2
|
21
|
+
if alignment == "TopLeft":
|
22
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
|
23
|
+
elif alignment == "TopRight":
|
24
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
|
25
|
+
elif alignment == "BottomLeft":
|
26
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
|
27
|
+
elif alignment == "BottomRight":
|
28
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
|
29
|
+
else:
|
30
|
+
self.alignment = Qt.AlignmentFlag.AlignCenter
|
20
31
|
self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
|
21
32
|
# Set Icon
|
22
33
|
self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
|
@@ -40,6 +51,21 @@ class TextWidget(QWidget):
|
|
40
51
|
def set_ui_variable(self, opacity: float = 0.2) -> None:
|
41
52
|
self.opacity = opacity
|
42
53
|
|
54
|
+
def set_font(self):
|
55
|
+
self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
|
56
|
+
|
57
|
+
def set_alignment(self, alignment: str = "Center") -> None:
|
58
|
+
if alignment == "TopLeft":
|
59
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
|
60
|
+
elif alignment == "TopRight":
|
61
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
|
62
|
+
elif alignment == "BottomLeft":
|
63
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
|
64
|
+
elif alignment == "BottomRight":
|
65
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
|
66
|
+
else:
|
67
|
+
self.alignment = Qt.AlignmentFlag.AlignCenter
|
68
|
+
|
43
69
|
def paintEvent(self, event) -> None:
|
44
70
|
painter = QPainter(self)
|
45
71
|
painter.setFont(
|
@@ -49,7 +75,7 @@ class TextWidget(QWidget):
|
|
49
75
|
painter.setOpacity(self.opacity)
|
50
76
|
painter.drawText(
|
51
77
|
QRect(self.draw_location_x, self.draw_location_y, self.width(), self.height()),
|
52
|
-
|
78
|
+
int(self.alignment),
|
53
79
|
self.text
|
54
80
|
)
|
55
81
|
painter.restore()
|
@@ -62,4 +88,3 @@ class TextWidget(QWidget):
|
|
62
88
|
|
63
89
|
def mouseGrabber(self) -> None:
|
64
90
|
super().mouseGrabber()
|
65
|
-
|
@@ -68,12 +68,3 @@ def choose_video(
|
|
68
68
|
return choose_file(
|
69
69
|
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
70
70
|
warning_message=language_wrapper.language_word_dict.get("video_setting_message_box"))
|
71
|
-
|
72
|
-
|
73
|
-
def choose_scene_json(
|
74
|
-
trigger_ui: QWidget, file_filter: str = "Json (*.json;)", extensions: list = None) -> str:
|
75
|
-
front_engine_logger.info("choose_scene_json")
|
76
|
-
extensions = extensions or [".json"]
|
77
|
-
return choose_file(
|
78
|
-
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
79
|
-
warning_message=language_wrapper.language_word_dict.get("scene_choose_message_box"))
|
frontengine/ui/main_ui.py
CHANGED
@@ -10,6 +10,7 @@ from qt_material import apply_stylesheet, QtStyleTools
|
|
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
|
13
|
+
from frontengine.ui.menu.how_to_menu import build_how_to_menu
|
13
14
|
from frontengine.ui.menu.language_menu import build_language_menu
|
14
15
|
from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
15
16
|
from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
|
@@ -95,6 +96,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
95
96
|
self.tab_widget.addTab(widget(), widget_name)
|
96
97
|
build_language_menu(self)
|
97
98
|
build_help_menu(self)
|
99
|
+
build_how_to_menu(self)
|
98
100
|
# Set Icon
|
99
101
|
self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
|
100
102
|
self.icon = QIcon(str(self.icon_path))
|
@@ -1,6 +1,8 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
from typing import TYPE_CHECKING
|
3
3
|
|
4
|
+
from frontengine.utils.browser.browser import open_browser
|
5
|
+
|
4
6
|
if TYPE_CHECKING:
|
5
7
|
from frontengine.ui.main_ui import FrontEngineMainUI
|
6
8
|
from PySide6.QtGui import QAction
|
@@ -9,6 +11,15 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
9
11
|
|
10
12
|
|
11
13
|
def build_how_to_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
|
12
|
-
ui_we_want_to_set.
|
13
|
-
language_wrapper.language_word_dict.get("
|
14
|
+
ui_we_want_to_set.how_to_menu = ui_we_want_to_set.menu_bar.addMenu(
|
15
|
+
language_wrapper.language_word_dict.get("doc_menu_label")
|
16
|
+
)
|
17
|
+
ui_we_want_to_set.how_to_menu.open_doc_action = QAction(
|
18
|
+
language_wrapper.language_word_dict.get("doc_menu_open_doc")
|
19
|
+
)
|
20
|
+
ui_we_want_to_set.how_to_menu.open_doc_action.triggered.connect(
|
21
|
+
lambda: open_browser("https://frontengine.readthedocs.io/en/latest/")
|
22
|
+
)
|
23
|
+
ui_we_want_to_set.how_to_menu.addAction(
|
24
|
+
ui_we_want_to_set.how_to_menu.open_doc_action
|
14
25
|
)
|
@@ -145,11 +145,7 @@ class ControlCenterUI(QWidget):
|
|
145
145
|
|
146
146
|
def clear_scene(self) -> None:
|
147
147
|
front_engine_logger.info("clear_scene")
|
148
|
-
self.scene_setting_ui.
|
149
|
-
|
150
|
-
def clear_chat(self):
|
151
|
-
front_engine_logger.info("clear_chat")
|
152
|
-
self.chat_scene_ui.close_chat_ui()
|
148
|
+
self.scene_setting_ui.close_scene()
|
153
149
|
|
154
150
|
def clear_all(self) -> None:
|
155
151
|
front_engine_logger.info("clear_all")
|
@@ -159,7 +155,7 @@ class ControlCenterUI(QWidget):
|
|
159
155
|
self.gif_setting_ui.gif_widget_list.clear()
|
160
156
|
self.sound_player_setting_ui.sound_widget_list.clear()
|
161
157
|
self.text_setting_ui.text_widget_list.clear()
|
162
|
-
self.scene_setting_ui.
|
158
|
+
self.scene_setting_ui.close_scene()
|
163
159
|
|
164
160
|
def redirect(self) -> None:
|
165
161
|
if not redirect_manager_instance.std_out_queue.empty():
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
2
|
from PySide6.QtGui import QGuiApplication
|
3
3
|
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QPushButton, QMessageBox, \
|
4
|
-
QCheckBox
|
4
|
+
QCheckBox, QDialog
|
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
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
|
|
@@ -19,7 +20,7 @@ class GIFSettingUI(QWidget):
|
|
19
20
|
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
20
21
|
# Init variable
|
21
22
|
self.gif_widget_list = list()
|
22
|
-
self.show_all_screen =
|
23
|
+
self.show_all_screen = False
|
23
24
|
self.ready_to_play = False
|
24
25
|
# Opacity setting
|
25
26
|
self.opacity_slider = QSlider()
|
@@ -103,11 +104,22 @@ class GIFSettingUI(QWidget):
|
|
103
104
|
message_box.show()
|
104
105
|
else:
|
105
106
|
front_engine_logger.info("start_play_gif")
|
106
|
-
|
107
|
+
monitors = QGuiApplication.screens()
|
108
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
107
109
|
gif_widget = self._create_gif_widget()
|
108
110
|
gif_widget.showFullScreen()
|
111
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
112
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
113
|
+
result = input_dialog.exec_()
|
114
|
+
if result == QDialog.DialogCode.Accepted:
|
115
|
+
select_monitor_index = int(combobox.currentText())
|
116
|
+
if len(monitors) > select_monitor_index:
|
117
|
+
monitor = monitors[select_monitor_index]
|
118
|
+
gif_widget = self._create_gif_widget()
|
119
|
+
gif_widget.setScreen(monitor)
|
120
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
121
|
+
gif_widget.showFullScreen()
|
109
122
|
else:
|
110
|
-
monitors = QGuiApplication.screens()
|
111
123
|
for monitor in monitors:
|
112
124
|
gif_widget = self._create_gif_widget()
|
113
125
|
gif_widget.setScreen(monitor)
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
2
|
from PySide6.QtGui import QScreen, QGuiApplication
|
3
3
|
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, \
|
4
|
-
QCheckBox
|
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
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
|
|
@@ -88,11 +89,22 @@ class ImageSettingUI(QWidget):
|
|
88
89
|
message_box.show()
|
89
90
|
else:
|
90
91
|
front_engine_logger.info("start_play_image")
|
91
|
-
|
92
|
+
monitors = QGuiApplication.screens()
|
93
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
92
94
|
image_widget = self._create_image_widget()
|
93
95
|
image_widget.showFullScreen()
|
96
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
97
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
98
|
+
result = input_dialog.exec_()
|
99
|
+
if result == QDialog.DialogCode.Accepted:
|
100
|
+
select_monitor_index = int(combobox.currentText())
|
101
|
+
if len(monitors) > select_monitor_index:
|
102
|
+
monitor = monitors[select_monitor_index]
|
103
|
+
gif_widget = self._create_image_widget()
|
104
|
+
gif_widget.setScreen(monitor)
|
105
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
106
|
+
gif_widget.showFullScreen()
|
94
107
|
else:
|
95
|
-
monitors = QGuiApplication.screens()
|
96
108
|
for monitor in monitors:
|
97
109
|
image_widget = self._create_image_widget()
|
98
110
|
image_widget.setScreen(monitor)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
from PySide6.QtCore import Qt
|
4
|
+
from PySide6.QtGui import QGuiApplication
|
5
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QPlainTextEdit, QPushButton, QCheckBox, QDialog
|
6
|
+
|
7
|
+
from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
|
8
|
+
from frontengine.ui.page.utils import monitor_choose_dialog
|
9
|
+
from frontengine.user_setting.scene_setting import choose_scene_json, write_scene_file, scene_json
|
10
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
11
|
+
|
12
|
+
|
13
|
+
class SceneManagerUI(QWidget):
|
14
|
+
|
15
|
+
def __init__(self, scene_manager):
|
16
|
+
super().__init__()
|
17
|
+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
18
|
+
self.grid_layout = QGridLayout()
|
19
|
+
self.grid_layout.setContentsMargins(0, 0, 0, 0)
|
20
|
+
self.scene = scene_manager
|
21
|
+
self.show_all_screen = False
|
22
|
+
# Read and write scene json button
|
23
|
+
self.read_scene_json_button = QPushButton(language_wrapper.language_word_dict.get("scene_input"))
|
24
|
+
self.read_scene_json_button.clicked.connect(self.update_scene_json)
|
25
|
+
self.write_scene_json_button = QPushButton(language_wrapper.language_word_dict.get("scene_output"))
|
26
|
+
self.write_scene_json_button.clicked.connect(lambda: write_scene_file(self))
|
27
|
+
# Json plaintext
|
28
|
+
self.json_plaintext = QPlainTextEdit()
|
29
|
+
self.json_plaintext.setReadOnly(True)
|
30
|
+
self.json_plaintext.appendPlainText("{}")
|
31
|
+
# Start button
|
32
|
+
self.start_button = QPushButton(
|
33
|
+
language_wrapper.language_word_dict.get("scene_start")
|
34
|
+
)
|
35
|
+
self.start_button.clicked.connect(self.start_scene)
|
36
|
+
# Show on all screen
|
37
|
+
self.show_on_all_screen_checkbox = QCheckBox(
|
38
|
+
language_wrapper.language_word_dict.get("Show on all screen")
|
39
|
+
)
|
40
|
+
self.show_on_all_screen_checkbox.clicked.connect(self.set_show_all_screen)
|
41
|
+
# Add to layout
|
42
|
+
self.grid_layout.addWidget(self.json_plaintext, 0, 0, -1, -1)
|
43
|
+
self.grid_layout.addWidget(self.read_scene_json_button, 1, 0)
|
44
|
+
self.grid_layout.addWidget(self.write_scene_json_button, 1, 1)
|
45
|
+
self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 0)
|
46
|
+
self.grid_layout.addWidget(self.start_button, 3, 0, 1, 0)
|
47
|
+
self.setLayout(self.grid_layout)
|
48
|
+
|
49
|
+
def set_show_all_screen(self) -> None:
|
50
|
+
self.show_all_screen = self.show_on_all_screen_checkbox.isChecked()
|
51
|
+
|
52
|
+
def start_scene(self):
|
53
|
+
scene: dict = json.loads(self.json_plaintext.toPlainText())
|
54
|
+
scene_add_function = {
|
55
|
+
"TEXT": self.scene.add_text,
|
56
|
+
"IMAGE": self.scene.add_image,
|
57
|
+
"GIF": self.scene.add_gif,
|
58
|
+
"SOUND": self.scene.add_sound,
|
59
|
+
"VIDEO": self.scene.add_video,
|
60
|
+
"WEB": self.scene.add_web
|
61
|
+
}
|
62
|
+
for scene_dict in scene.values():
|
63
|
+
scene_widget_type = scene_dict.get("type")
|
64
|
+
function = scene_add_function.get(scene_widget_type)
|
65
|
+
function(setting_dict=scene_dict)
|
66
|
+
monitors = QGuiApplication.screens()
|
67
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
68
|
+
graphic_view = ExtendGraphicView(self.scene.graphic_scene)
|
69
|
+
self.scene.view_list.append(graphic_view)
|
70
|
+
graphic_view.showMaximized()
|
71
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
72
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
73
|
+
result = input_dialog.exec_()
|
74
|
+
if result == QDialog.DialogCode.Accepted:
|
75
|
+
select_monitor_index = int(combobox.currentText())
|
76
|
+
if len(monitors) > select_monitor_index:
|
77
|
+
monitor = monitors[select_monitor_index]
|
78
|
+
graphic_view = ExtendGraphicView(self.scene.graphic_scene)
|
79
|
+
graphic_view.setScreen(monitor)
|
80
|
+
graphic_view.move(monitor.availableGeometry().topLeft())
|
81
|
+
self.scene.view_list.append(graphic_view)
|
82
|
+
graphic_view.showMaximized()
|
83
|
+
else:
|
84
|
+
for monitor in monitors:
|
85
|
+
graphic_view = ExtendGraphicView(self.scene.graphic_scene)
|
86
|
+
graphic_view.setScreen(monitor)
|
87
|
+
graphic_view.move(monitor.availableGeometry().topLeft())
|
88
|
+
self.scene.view_list.append(graphic_view)
|
89
|
+
graphic_view.showMaximized()
|
90
|
+
|
91
|
+
def update_scene_json(self):
|
92
|
+
choose_scene_json(self)
|
93
|
+
self.renew_json_plain_text()
|
94
|
+
|
95
|
+
def renew_json_plain_text(self):
|
96
|
+
self.json_plaintext.setPlainText(json.dumps(scene_json, indent=4))
|
@@ -0,0 +1,102 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox
|
3
|
+
|
4
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_gif
|
5
|
+
from frontengine.ui.page.scene_setting.scene_manager import SceneManagerUI
|
6
|
+
from frontengine.user_setting.scene_setting import scene_json
|
7
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
8
|
+
|
9
|
+
|
10
|
+
class GIFSceneSettingUI(QWidget):
|
11
|
+
|
12
|
+
def __init__(self, script_ui: SceneManagerUI):
|
13
|
+
super().__init__()
|
14
|
+
self.script_ui = script_ui
|
15
|
+
# UI components
|
16
|
+
self.opacity_slider = QSlider()
|
17
|
+
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
18
|
+
self.opacity_label = QLabel(
|
19
|
+
language_wrapper.language_word_dict.get("Opacity")
|
20
|
+
)
|
21
|
+
self.opacity_slider.setMinimum(1)
|
22
|
+
self.opacity_slider.setMaximum(100)
|
23
|
+
self.opacity_slider.setValue(20)
|
24
|
+
self.opacity_slider.setTickInterval(1)
|
25
|
+
self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
|
26
|
+
self.opacity_slider.actionTriggered.connect(self.opacity_trick)
|
27
|
+
# Speed setting
|
28
|
+
self.speed_label = QLabel(
|
29
|
+
language_wrapper.language_word_dict.get("Speed")
|
30
|
+
)
|
31
|
+
self.speed_slider = QSlider()
|
32
|
+
self.speed_slider.setMinimum(1)
|
33
|
+
self.speed_slider.setMaximum(200)
|
34
|
+
self.speed_slider.setTickInterval(1)
|
35
|
+
self.speed_slider.setValue(100)
|
36
|
+
self.speed_slider_value_label = QLabel(str(self.speed_slider.value()))
|
37
|
+
self.speed_slider.setOrientation(Qt.Orientation.Horizontal)
|
38
|
+
self.speed_slider.actionTriggered.connect(self.speed_trick)
|
39
|
+
# Choose file button
|
40
|
+
self.choose_file_button = QPushButton(
|
41
|
+
language_wrapper.language_word_dict.get("gif_setting_ui_choose_file")
|
42
|
+
)
|
43
|
+
self.choose_file_button.clicked.connect(self.get_gif)
|
44
|
+
self.ready_to_play = False
|
45
|
+
self.ready_label = QLabel(
|
46
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
47
|
+
)
|
48
|
+
self.gif_image_path: [str, None] = None
|
49
|
+
self.update_scene_button = QPushButton(
|
50
|
+
language_wrapper.language_word_dict.get("scene_add_gif")
|
51
|
+
)
|
52
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
53
|
+
# Add to layout
|
54
|
+
self.grid_layout = QGridLayout()
|
55
|
+
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
56
|
+
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
57
|
+
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
58
|
+
self.grid_layout.addWidget(self.speed_label, 1, 0)
|
59
|
+
self.grid_layout.addWidget(self.speed_slider_value_label, 1, 1)
|
60
|
+
self.grid_layout.addWidget(self.speed_slider, 1, 2)
|
61
|
+
self.grid_layout.addWidget(self.choose_file_button, 2, 0)
|
62
|
+
self.grid_layout.addWidget(self.ready_label, 2, 1)
|
63
|
+
self.grid_layout.addWidget(self.update_scene_button, 3, 0)
|
64
|
+
self.setLayout(self.grid_layout)
|
65
|
+
|
66
|
+
def opacity_trick(self) -> None:
|
67
|
+
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
68
|
+
|
69
|
+
def speed_trick(self) -> None:
|
70
|
+
self.speed_slider_value_label.setText(str(self.speed_slider.value()))
|
71
|
+
|
72
|
+
def get_gif(self):
|
73
|
+
self.ready_label.setText(
|
74
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
75
|
+
)
|
76
|
+
self.ready_to_play = False
|
77
|
+
self.gif_image_path = choose_gif(self)
|
78
|
+
if self.gif_image_path is not None:
|
79
|
+
self.ready_label.setText(
|
80
|
+
language_wrapper.language_word_dict.get("Ready")
|
81
|
+
)
|
82
|
+
self.ready_to_play = True
|
83
|
+
|
84
|
+
def update_scene_json(self):
|
85
|
+
if self.gif_image_path is None:
|
86
|
+
message_box = QMessageBox(self)
|
87
|
+
message_box.setText(
|
88
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
89
|
+
)
|
90
|
+
message_box.show()
|
91
|
+
else:
|
92
|
+
scene_json.update(
|
93
|
+
{
|
94
|
+
f"{len(scene_json)}": {
|
95
|
+
"type": "GIF",
|
96
|
+
"file_path": self.gif_image_path,
|
97
|
+
"opacity": self.opacity_slider.value(),
|
98
|
+
"speed": self.speed_slider.value()
|
99
|
+
}
|
100
|
+
}
|
101
|
+
)
|
102
|
+
self.script_ui.renew_json_plain_text()
|