frontengine-dev 0.0.56__py3-none-any.whl → 0.0.58__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 +13 -15
- frontengine/show/gif/paint_gif.py +4 -2
- frontengine/show/image/paint_image.py +4 -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/sound_player/sound_effect.py +1 -2
- frontengine/show/sound_player/sound_player.py +1 -2
- frontengine/show/text/draw_text.py +31 -4
- frontengine/show/video/video_player.py +1 -2
- frontengine/show/web/webview.py +1 -3
- frontengine/{ui/main/system_tray → system_tray}/extend_system_tray.py +1 -3
- frontengine/ui/dialog/choose_file_dialog.py +19 -43
- frontengine/ui/{main/main_ui.py → main_ui.py} +39 -44
- frontengine/ui/menu/help_menu.py +25 -0
- frontengine/ui/menu/how_to_menu.py +25 -0
- frontengine/ui/{main → menu}/language_menu.py +10 -10
- frontengine/ui/{setting → page}/control_center/control_center_ui.py +11 -18
- frontengine/ui/{setting → page}/gif/gif_setting_ui.py +20 -8
- frontengine/ui/{setting → page}/image/image_setting_ui.py +19 -7
- 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 +55 -0
- frontengine/ui/{setting → page}/sound_player/sound_player_setting_ui.py +0 -1
- frontengine/ui/{setting → page}/text/text_setting_ui.py +39 -11
- frontengine/ui/page/utils.py +23 -0
- frontengine/ui/{setting → page}/video/video_setting_ui.py +23 -7
- frontengine/ui/{setting → page}/web/web_setting_ui.py +19 -7
- frontengine/user_setting/scene_setting.py +34 -0
- frontengine/user_setting/user_setting_file.py +2 -1
- frontengine/utils/browser/browser.py +5 -0
- frontengine/utils/multi_language/english.py +14 -2
- frontengine/utils/multi_language/traditional_chinese.py +15 -2
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/METADATA +4 -51
- frontengine_dev-0.0.58.dist-info/RECORD +91 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/WHEEL +1 -1
- frontengine/show/chat/chat_toast.py +0 -55
- frontengine/show/image_generation/image_generation_show.py +0 -43
- frontengine/ui/setting/chat/chat_model.py +0 -65
- frontengine/ui/setting/chat/chat_scene_input.py +0 -72
- frontengine/ui/setting/chat/chat_scene_setting.py +0 -187
- frontengine/ui/setting/chat/chatthread.py +0 -78
- frontengine/ui/setting/chat/speech_to_text.py +0 -70
- frontengine/ui/setting/image_generation/generation_image_thread.py +0 -32
- frontengine/ui/setting/image_generation/image_generation_input.py +0 -63
- frontengine/ui/setting/scene_setting/scene_setting_ui.py +0 -48
- frontengine/ui/setting/scene_setting/scene_tabs/Image.py +0 -61
- frontengine/ui/setting/scene_setting/scene_tabs/gif.py +0 -74
- frontengine/ui/setting/scene_setting/scene_tabs/scene_control.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/sound.py +0 -44
- frontengine/ui/setting/scene_setting/scene_tabs/tableview_model.py +0 -65
- frontengine/ui/setting/scene_setting/scene_tabs/text.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/ui.py +0 -56
- frontengine/ui/setting/scene_setting/scene_tabs/video.py +0 -88
- frontengine/ui/setting/scene_setting/scene_tabs/web.py +0 -74
- frontengine/ui/setting/text/__init__.py +0 -0
- frontengine/ui/setting/video/__init__.py +0 -0
- frontengine/ui/setting/web/__init__.py +0 -0
- 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_dev-0.0.56.dist-info/RECORD +0 -112
- /frontengine/{show/chat → system_tray}/__init__.py +0 -0
- /frontengine/{show/image_generation → ui/menu}/__init__.py +0 -0
- /frontengine/ui/{main → page}/__init__.py +0 -0
- /frontengine/ui/{main/system_tray → page/control_center}/__init__.py +0 -0
- /frontengine/ui/{setting → page/gif}/__init__.py +0 -0
- /frontengine/ui/{setting/chat → page/image}/__init__.py +0 -0
- /frontengine/ui/{setting/control_center → page/scene_setting}/__init__.py +0 -0
- /frontengine/ui/{setting/gif → page/scene_setting/scene_page}/__init__.py +0 -0
- /frontengine/ui/{setting/image → page/sound_player}/__init__.py +0 -0
- /frontengine/ui/{setting/image_generation → page/text}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting → page/video}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting/scene_tabs → page/web}/__init__.py +0 -0
- /frontengine/{ui/setting/sound_player → utils/browser}/__init__.py +0 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/LICENSE +0 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from typing import TYPE_CHECKING
|
3
|
+
|
4
|
+
if TYPE_CHECKING:
|
5
|
+
from frontengine.ui.main_ui import FrontEngineMainUI
|
6
|
+
|
7
|
+
from frontengine.utils.browser.browser import open_browser
|
8
|
+
from PySide6.QtGui import QAction
|
9
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
10
|
+
|
11
|
+
|
12
|
+
def build_help_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
|
13
|
+
ui_we_want_to_set.help_menu = ui_we_want_to_set.menu_bar.addMenu(
|
14
|
+
language_wrapper.language_word_dict.get("help_menu_label")
|
15
|
+
)
|
16
|
+
ui_we_want_to_set.help_menu.open_issue_action = QAction(
|
17
|
+
language_wrapper.language_word_dict.get("help_menu_open_issue")
|
18
|
+
)
|
19
|
+
ui_we_want_to_set.help_menu.open_issue_action.triggered.connect(
|
20
|
+
lambda: open_browser("https://github.com/Integration-Automation/FrontEngine/issues")
|
21
|
+
)
|
22
|
+
ui_we_want_to_set.help_menu.addAction(
|
23
|
+
ui_we_want_to_set.help_menu.open_issue_action
|
24
|
+
)
|
25
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from typing import TYPE_CHECKING
|
3
|
+
|
4
|
+
from frontengine.utils.browser.browser import open_browser
|
5
|
+
|
6
|
+
if TYPE_CHECKING:
|
7
|
+
from frontengine.ui.main_ui import FrontEngineMainUI
|
8
|
+
from PySide6.QtGui import QAction
|
9
|
+
|
10
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
11
|
+
|
12
|
+
|
13
|
+
def build_how_to_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
|
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
|
25
|
+
)
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
|
5
5
|
if TYPE_CHECKING:
|
6
|
-
from frontengine.ui.
|
6
|
+
from frontengine.ui.main_ui import FrontEngineMainUI
|
7
7
|
from PySide6.QtGui import QAction
|
8
8
|
from PySide6.QtWidgets import QMessageBox
|
9
9
|
|
@@ -12,26 +12,26 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
12
12
|
|
13
13
|
|
14
14
|
def build_language_menu(ui_we_want_to_set: FrontEngineMainUI) -> None:
|
15
|
-
ui_we_want_to_set.
|
15
|
+
ui_we_want_to_set.language_menu = ui_we_want_to_set.menu_bar.addMenu(
|
16
16
|
language_wrapper.language_word_dict.get("menu_bar_language")
|
17
17
|
)
|
18
|
-
ui_we_want_to_set.
|
18
|
+
ui_we_want_to_set.language_menu.change_to_english_language_action = QAction(
|
19
19
|
language_wrapper.language_word_dict.get("language_menu_bar_english")
|
20
20
|
)
|
21
|
-
ui_we_want_to_set.
|
21
|
+
ui_we_want_to_set.language_menu.change_to_english_language_action.triggered.connect(
|
22
22
|
lambda: set_language("English", ui_we_want_to_set)
|
23
23
|
)
|
24
|
-
ui_we_want_to_set.
|
24
|
+
ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action = QAction(
|
25
25
|
language_wrapper.language_word_dict.get("language_menu_bar_traditional_chinese")
|
26
26
|
)
|
27
|
-
ui_we_want_to_set.
|
27
|
+
ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action.triggered.connect(
|
28
28
|
lambda: set_language("Traditional_Chinese", ui_we_want_to_set)
|
29
29
|
)
|
30
|
-
ui_we_want_to_set.
|
31
|
-
ui_we_want_to_set.
|
30
|
+
ui_we_want_to_set.language_menu.addAction(
|
31
|
+
ui_we_want_to_set.language_menu.change_to_english_language_action
|
32
32
|
)
|
33
|
-
ui_we_want_to_set.
|
34
|
-
ui_we_want_to_set.
|
33
|
+
ui_we_want_to_set.language_menu.addAction(
|
34
|
+
ui_we_want_to_set.language_menu.change_to_traditional_chinese_language_action
|
35
35
|
)
|
36
36
|
|
37
37
|
|
@@ -2,14 +2,13 @@ from PySide6.QtCore import QTimer, Qt
|
|
2
2
|
from PySide6.QtWidgets import QGridLayout, QWidget, QPushButton, QTextEdit, QScrollArea
|
3
3
|
|
4
4
|
from frontengine.ui.color.global_color import error_color, output_color
|
5
|
-
from frontengine.ui.
|
6
|
-
from frontengine.ui.
|
7
|
-
from frontengine.ui.
|
8
|
-
from frontengine.ui.
|
9
|
-
from frontengine.ui.
|
10
|
-
from frontengine.ui.
|
11
|
-
from frontengine.ui.
|
12
|
-
from frontengine.ui.setting.web.web_setting_ui import WEBSettingUI
|
5
|
+
from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
|
6
|
+
from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
|
7
|
+
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
8
|
+
from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
|
9
|
+
from frontengine.ui.page.text.text_setting_ui import TextSettingUI
|
10
|
+
from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
|
11
|
+
from frontengine.ui.page.web.web_setting_ui import WEBSettingUI
|
13
12
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
14
13
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
15
14
|
from frontengine.utils.redirect_manager.redirect_manager_class import redirect_manager_instance
|
@@ -25,8 +24,7 @@ class ControlCenterUI(QWidget):
|
|
25
24
|
gif_setting_ui: GIFSettingUI,
|
26
25
|
sound_player_setting_ui: SoundPlayerSettingUI,
|
27
26
|
text_setting_ui: TextSettingUI,
|
28
|
-
scene_setting_ui: SceneSettingUI
|
29
|
-
chat_scene_ui: ChatSceneUI
|
27
|
+
scene_setting_ui: SceneSettingUI
|
30
28
|
):
|
31
29
|
super().__init__()
|
32
30
|
# Layout
|
@@ -41,7 +39,6 @@ class ControlCenterUI(QWidget):
|
|
41
39
|
self.sound_player_setting_ui = sound_player_setting_ui
|
42
40
|
self.text_setting_ui = text_setting_ui
|
43
41
|
self.scene_setting_ui = scene_setting_ui
|
44
|
-
self.chat_scene_ui = chat_scene_ui
|
45
42
|
# Close video widget
|
46
43
|
self.clear_video_button = QPushButton(
|
47
44
|
language_wrapper.language_word_dict.get("control_center_close_all_video")
|
@@ -116,7 +113,7 @@ class ControlCenterUI(QWidget):
|
|
116
113
|
self.redirect_timer.setInterval(10)
|
117
114
|
self.redirect_timer.timeout.connect(self.redirect)
|
118
115
|
self.redirect_timer.start()
|
119
|
-
|
116
|
+
redirect_manager_instance.set_redirect(self, True)
|
120
117
|
|
121
118
|
def clear_video(self) -> None:
|
122
119
|
front_engine_logger.info("clear_video")
|
@@ -148,11 +145,7 @@ class ControlCenterUI(QWidget):
|
|
148
145
|
|
149
146
|
def clear_scene(self) -> None:
|
150
147
|
front_engine_logger.info("clear_scene")
|
151
|
-
self.scene_setting_ui.
|
152
|
-
|
153
|
-
def clear_chat(self):
|
154
|
-
front_engine_logger.info("clear_chat")
|
155
|
-
self.chat_scene_ui.close_chat_ui()
|
148
|
+
self.scene_setting_ui.close_scene()
|
156
149
|
|
157
150
|
def clear_all(self) -> None:
|
158
151
|
front_engine_logger.info("clear_all")
|
@@ -162,7 +155,7 @@ class ControlCenterUI(QWidget):
|
|
162
155
|
self.gif_setting_ui.gif_widget_list.clear()
|
163
156
|
self.sound_player_setting_ui.sound_widget_list.clear()
|
164
157
|
self.text_setting_ui.text_widget_list.clear()
|
165
|
-
self.scene_setting_ui.
|
158
|
+
self.scene_setting_ui.close_scene()
|
166
159
|
|
167
160
|
def redirect(self) -> None:
|
168
161
|
if not redirect_manager_instance.std_out_queue.empty():
|
@@ -1,10 +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, 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,15 +104,26 @@ 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
|
-
|
111
|
-
for screen in monitors:
|
112
|
-
monitor = screen.availableGeometry()
|
123
|
+
for monitor in monitors:
|
113
124
|
gif_widget = self._create_gif_widget()
|
114
|
-
gif_widget.
|
125
|
+
gif_widget.setScreen(monitor)
|
126
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
115
127
|
gif_widget.showFullScreen()
|
116
128
|
|
117
129
|
def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import QScreen
|
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,15 +89,26 @@ 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
|
-
|
96
|
-
for screen in monitors:
|
97
|
-
monitor = screen.availableGeometry()
|
108
|
+
for monitor in monitors:
|
98
109
|
image_widget = self._create_image_widget()
|
99
|
-
image_widget.
|
110
|
+
image_widget.setScreen(monitor)
|
111
|
+
image_widget.move(monitor.availableGeometry().topLeft())
|
100
112
|
image_widget.showFullScreen()
|
101
113
|
|
102
114
|
def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
|
@@ -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()
|
@@ -0,0 +1,83 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QLabel, QSlider, QMessageBox
|
3
|
+
|
4
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_image
|
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 ImageSceneSettingUI(QWidget):
|
11
|
+
|
12
|
+
def __init__(self, script_ui: SceneManagerUI):
|
13
|
+
super().__init__()
|
14
|
+
self.script_ui = script_ui
|
15
|
+
self.image_path: [str, None] = None
|
16
|
+
self.ready_to_play = False
|
17
|
+
# UI components
|
18
|
+
self.opacity_slider = QSlider()
|
19
|
+
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
20
|
+
self.opacity_label = QLabel(
|
21
|
+
language_wrapper.language_word_dict.get("Opacity")
|
22
|
+
)
|
23
|
+
self.opacity_slider.setMinimum(1)
|
24
|
+
self.opacity_slider.setMaximum(100)
|
25
|
+
self.opacity_slider.setValue(20)
|
26
|
+
self.opacity_slider.setTickInterval(1)
|
27
|
+
self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
|
28
|
+
self.opacity_slider.actionTriggered.connect(self.opacity_trick)
|
29
|
+
# Choose file button
|
30
|
+
self.choose_file_button = QPushButton(
|
31
|
+
language_wrapper.language_word_dict.get("image_setting_choose_file")
|
32
|
+
)
|
33
|
+
self.choose_file_button.clicked.connect(self.get_image)
|
34
|
+
self.ready_label = QLabel(
|
35
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
36
|
+
)
|
37
|
+
self.update_scene_button = QPushButton(
|
38
|
+
language_wrapper.language_word_dict.get("scene_add_image")
|
39
|
+
)
|
40
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
41
|
+
# Add to layout
|
42
|
+
self.grid_layout = QGridLayout()
|
43
|
+
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
44
|
+
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
45
|
+
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
46
|
+
self.grid_layout.addWidget(self.choose_file_button, 1, 0)
|
47
|
+
self.grid_layout.addWidget(self.ready_label, 1, 1)
|
48
|
+
self.grid_layout.addWidget(self.update_scene_button, 2, 0)
|
49
|
+
self.setLayout(self.grid_layout)
|
50
|
+
|
51
|
+
def opacity_trick(self) -> None:
|
52
|
+
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
53
|
+
|
54
|
+
def get_image(self):
|
55
|
+
self.ready_label.setText(
|
56
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
57
|
+
)
|
58
|
+
self.ready_to_play = False
|
59
|
+
self.image_path = choose_image(self)
|
60
|
+
if self.image_path is not None:
|
61
|
+
self.ready_label.setText(
|
62
|
+
language_wrapper.language_word_dict.get("Ready")
|
63
|
+
)
|
64
|
+
self.ready_to_play = True
|
65
|
+
|
66
|
+
def update_scene_json(self):
|
67
|
+
if self.image_path is None:
|
68
|
+
message_box = QMessageBox(self)
|
69
|
+
message_box.setText(
|
70
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
71
|
+
)
|
72
|
+
message_box.show()
|
73
|
+
else:
|
74
|
+
scene_json.update(
|
75
|
+
{
|
76
|
+
f"{len(scene_json)}": {
|
77
|
+
"type": "IMAGE",
|
78
|
+
"file_path": self.image_path,
|
79
|
+
"opacity": self.opacity_slider.value()
|
80
|
+
}
|
81
|
+
}
|
82
|
+
)
|
83
|
+
self.script_ui.renew_json_plain_text()
|
@@ -0,0 +1,84 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QPushButton, QSlider, QMessageBox
|
3
|
+
|
4
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_player_sound
|
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 SoundSceneSettingUI(QWidget):
|
11
|
+
|
12
|
+
def __init__(self, script_ui: SceneManagerUI):
|
13
|
+
super().__init__()
|
14
|
+
self.script_ui = script_ui
|
15
|
+
self.ready_to_play = False
|
16
|
+
# Volume setting
|
17
|
+
self.volume_label = QLabel(
|
18
|
+
language_wrapper.language_word_dict.get("Volume")
|
19
|
+
)
|
20
|
+
self.volume_slider = QSlider()
|
21
|
+
self.volume_slider.setMinimum(1)
|
22
|
+
self.volume_slider.setMaximum(100)
|
23
|
+
self.volume_slider.setTickInterval(1)
|
24
|
+
self.volume_slider.setValue(100)
|
25
|
+
self.volume_slider_value_label = QLabel(str(self.volume_slider.value()))
|
26
|
+
self.volume_slider.setOrientation(Qt.Orientation.Horizontal)
|
27
|
+
self.volume_slider.actionTriggered.connect(self.volume_trick)
|
28
|
+
# Choose file button
|
29
|
+
self.player_sound_path: [str, None] = None
|
30
|
+
# Choose file button
|
31
|
+
self.choose_player_file_button = QPushButton(
|
32
|
+
language_wrapper.language_word_dict.get("sound_player_setting_choose_sound_file")
|
33
|
+
)
|
34
|
+
self.choose_player_file_button.clicked.connect(self.get_sound)
|
35
|
+
# Ready label and variable
|
36
|
+
self.player_ready_label = QLabel(
|
37
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
38
|
+
)
|
39
|
+
self.update_scene_button = QPushButton(
|
40
|
+
language_wrapper.language_word_dict.get("scene_add_sound")
|
41
|
+
)
|
42
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
43
|
+
self.grid_layout = QGridLayout()
|
44
|
+
self.grid_layout.addWidget(self.volume_label, 0, 0)
|
45
|
+
self.grid_layout.addWidget(self.volume_slider_value_label, 0, 1)
|
46
|
+
self.grid_layout.addWidget(self.volume_slider, 0, 2)
|
47
|
+
self.grid_layout.addWidget(self.choose_player_file_button, 1, 0)
|
48
|
+
self.grid_layout.addWidget(self.player_ready_label, 1, 1)
|
49
|
+
self.grid_layout.addWidget(self.update_scene_button, 2, 0)
|
50
|
+
self.setLayout(self.grid_layout)
|
51
|
+
|
52
|
+
def volume_trick(self) -> None:
|
53
|
+
self.volume_slider_value_label.setText(str(self.volume_slider.value()))
|
54
|
+
|
55
|
+
def get_sound(self) -> None:
|
56
|
+
self.player_ready_label.setText(
|
57
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
58
|
+
)
|
59
|
+
self.ready_to_play = False
|
60
|
+
self.player_sound_path = choose_player_sound(self)
|
61
|
+
if self.player_sound_path is not None:
|
62
|
+
self.player_ready_label.setText(
|
63
|
+
language_wrapper.language_word_dict.get("Ready")
|
64
|
+
)
|
65
|
+
self.ready_to_play = True
|
66
|
+
|
67
|
+
def update_scene_json(self):
|
68
|
+
if self.player_sound_path is None:
|
69
|
+
message_box = QMessageBox(self)
|
70
|
+
message_box.setText(
|
71
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
72
|
+
)
|
73
|
+
message_box.show()
|
74
|
+
else:
|
75
|
+
scene_json.update(
|
76
|
+
{
|
77
|
+
f"{len(scene_json)}": {
|
78
|
+
"type": "SOUND",
|
79
|
+
"file_path": self.player_sound_path,
|
80
|
+
"volume": self.volume_slider.value()
|
81
|
+
}
|
82
|
+
}
|
83
|
+
)
|
84
|
+
self.script_ui.renew_json_plain_text()
|