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,93 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QMessageBox, QSlider, QLabel, QLineEdit, QPushButton, QComboBox
|
3
|
+
|
4
|
+
from frontengine.ui.page.scene_setting.scene_manager import SceneManagerUI
|
5
|
+
from frontengine.user_setting.scene_setting import scene_json
|
6
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
7
|
+
|
8
|
+
|
9
|
+
class TextSceneSettingUI(QWidget):
|
10
|
+
|
11
|
+
def __init__(self, script_ui: SceneManagerUI):
|
12
|
+
super().__init__()
|
13
|
+
self.script_ui = script_ui
|
14
|
+
# Opacity setting
|
15
|
+
self.opacity_slider = QSlider()
|
16
|
+
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
17
|
+
self.opacity_label = QLabel(
|
18
|
+
language_wrapper.language_word_dict.get("Opacity")
|
19
|
+
)
|
20
|
+
self.opacity_slider.setMinimum(1)
|
21
|
+
self.opacity_slider.setMaximum(100)
|
22
|
+
self.opacity_slider.setValue(20)
|
23
|
+
self.opacity_slider.setTickInterval(1)
|
24
|
+
self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
|
25
|
+
self.opacity_slider.actionTriggered.connect(self.opacity_trick)
|
26
|
+
# Font size setting
|
27
|
+
self.font_size_slider = QSlider()
|
28
|
+
self.font_size_slider.setOrientation(Qt.Orientation.Horizontal)
|
29
|
+
self.font_size_label = QLabel(
|
30
|
+
language_wrapper.language_word_dict.get("Font size")
|
31
|
+
)
|
32
|
+
self.font_size_slider.setMinimum(1)
|
33
|
+
self.font_size_slider.setMaximum(600)
|
34
|
+
self.font_size_slider.setValue(100)
|
35
|
+
self.font_size_slider.setTickInterval(1)
|
36
|
+
self.font_size_slider_value_label = QLabel(str(self.font_size_slider.value()))
|
37
|
+
self.font_size_slider.actionTriggered.connect(self.font_size_trick)
|
38
|
+
# Font input button
|
39
|
+
self.line_edit = QLineEdit()
|
40
|
+
self.update_scene_button = QPushButton(
|
41
|
+
language_wrapper.language_word_dict.get("scene_add_text")
|
42
|
+
)
|
43
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
44
|
+
# Text position
|
45
|
+
self.text_position_label = QLabel(
|
46
|
+
language_wrapper.language_word_dict.get("text_setting_choose_alignment")
|
47
|
+
)
|
48
|
+
self.text_position_combobox = QComboBox()
|
49
|
+
self.text_position_combobox.addItem("TopLeft")
|
50
|
+
self.text_position_combobox.addItem("TopRight")
|
51
|
+
self.text_position_combobox.addItem("BottomLeft")
|
52
|
+
self.text_position_combobox.addItem("BottomRight")
|
53
|
+
self.text_position_combobox.addItem("Center")
|
54
|
+
|
55
|
+
self.grid_layout = QGridLayout()
|
56
|
+
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
57
|
+
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
58
|
+
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
59
|
+
self.grid_layout.addWidget(self.font_size_label, 1, 0)
|
60
|
+
self.grid_layout.addWidget(self.font_size_slider_value_label, 1, 1)
|
61
|
+
self.grid_layout.addWidget(self.font_size_slider, 1, 2)
|
62
|
+
self.grid_layout.addWidget(self.text_position_label, 2, 0)
|
63
|
+
self.grid_layout.addWidget(self.text_position_combobox, 2, 1)
|
64
|
+
self.grid_layout.addWidget(self.update_scene_button, 3, 0)
|
65
|
+
self.grid_layout.addWidget(self.line_edit, 3, 1)
|
66
|
+
self.setLayout(self.grid_layout)
|
67
|
+
|
68
|
+
def opacity_trick(self) -> None:
|
69
|
+
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
70
|
+
|
71
|
+
def font_size_trick(self) -> None:
|
72
|
+
self.font_size_slider_value_label.setText(str(self.font_size_slider.value()))
|
73
|
+
|
74
|
+
def update_scene_json(self):
|
75
|
+
if self.line_edit.text() == "" or self.line_edit.text().strip() == "":
|
76
|
+
message_box = QMessageBox(self)
|
77
|
+
message_box.setText(
|
78
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
79
|
+
)
|
80
|
+
message_box.show()
|
81
|
+
else:
|
82
|
+
scene_json.update(
|
83
|
+
{
|
84
|
+
f"{len(scene_json)}": {
|
85
|
+
"type": "TEXT",
|
86
|
+
"text": self.line_edit.text(),
|
87
|
+
"font_size": self.font_size_slider.value(),
|
88
|
+
"opacity": self.opacity_slider.value(),
|
89
|
+
"alignment": self.text_position_combobox.currentText()
|
90
|
+
}
|
91
|
+
}
|
92
|
+
)
|
93
|
+
self.script_ui.renew_json_plain_text()
|
@@ -0,0 +1,122 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QPushButton, QMessageBox
|
3
|
+
|
4
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_video
|
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 VideoSceneSettingUI(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
|
+
# Opacity setting
|
17
|
+
self.opacity_slider = QSlider()
|
18
|
+
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
19
|
+
self.opacity_label = QLabel(
|
20
|
+
language_wrapper.language_word_dict.get("Opacity")
|
21
|
+
)
|
22
|
+
self.opacity_slider.setMinimum(1)
|
23
|
+
self.opacity_slider.setMaximum(100)
|
24
|
+
self.opacity_slider.setValue(20)
|
25
|
+
self.opacity_slider.setTickInterval(1)
|
26
|
+
self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
|
27
|
+
self.opacity_slider.actionTriggered.connect(self.opacity_trick)
|
28
|
+
# Play rate setting
|
29
|
+
self.play_rate_label = QLabel(
|
30
|
+
language_wrapper.language_word_dict.get("Play rate")
|
31
|
+
)
|
32
|
+
self.play_rate_slider = QSlider()
|
33
|
+
self.play_rate_slider.setMinimum(1)
|
34
|
+
self.play_rate_slider.setMaximum(200)
|
35
|
+
self.play_rate_slider.setTickInterval(1)
|
36
|
+
self.play_rate_slider.setValue(100)
|
37
|
+
self.play_rate_slider_value_label = QLabel(str(self.play_rate_slider.value()))
|
38
|
+
self.play_rate_slider.setOrientation(Qt.Orientation.Horizontal)
|
39
|
+
self.play_rate_slider.actionTriggered.connect(self.play_rate_trick)
|
40
|
+
# Volume setting
|
41
|
+
self.volume_label = QLabel(
|
42
|
+
language_wrapper.language_word_dict.get("Volume")
|
43
|
+
)
|
44
|
+
self.volume_slider = QSlider()
|
45
|
+
self.volume_slider.setMinimum(1)
|
46
|
+
self.volume_slider.setMaximum(100)
|
47
|
+
self.volume_slider.setTickInterval(1)
|
48
|
+
self.volume_slider.setValue(100)
|
49
|
+
self.volume_slider_value_label = QLabel(str(self.volume_slider.value()))
|
50
|
+
self.volume_slider.setOrientation(Qt.Orientation.Horizontal)
|
51
|
+
self.volume_slider.actionTriggered.connect(self.volume_trick)
|
52
|
+
# Ready label and variable
|
53
|
+
self.ready_label = QLabel(
|
54
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
55
|
+
)
|
56
|
+
# Choose video file
|
57
|
+
self.choose_file_button = QPushButton(
|
58
|
+
language_wrapper.language_word_dict.get("video_setting_choose_file")
|
59
|
+
)
|
60
|
+
self.choose_file_button.clicked.connect(self.get_video)
|
61
|
+
# Update scene json
|
62
|
+
self.update_scene_button = QPushButton(
|
63
|
+
language_wrapper.language_word_dict.get("scene_add_video")
|
64
|
+
)
|
65
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
66
|
+
self.video_path: [str, None] = None
|
67
|
+
self.grid_layout = QGridLayout()
|
68
|
+
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
69
|
+
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
70
|
+
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
71
|
+
self.grid_layout.addWidget(self.play_rate_label, 1, 0)
|
72
|
+
self.grid_layout.addWidget(self.play_rate_slider_value_label, 1, 1)
|
73
|
+
self.grid_layout.addWidget(self.play_rate_slider, 1, 2)
|
74
|
+
self.grid_layout.addWidget(self.volume_label, 2, 0)
|
75
|
+
self.grid_layout.addWidget(self.volume_slider_value_label, 2, 1)
|
76
|
+
self.grid_layout.addWidget(self.volume_slider, 2, 2)
|
77
|
+
self.grid_layout.addWidget(self.choose_file_button, 3, 0)
|
78
|
+
self.grid_layout.addWidget(self.ready_label, 3, 1)
|
79
|
+
self.grid_layout.addWidget(self.update_scene_button, 4, 0)
|
80
|
+
self.setLayout(self.grid_layout)
|
81
|
+
|
82
|
+
def get_video(self) -> None:
|
83
|
+
self.ready_label.setText(
|
84
|
+
language_wrapper.language_word_dict.get("Not Ready")
|
85
|
+
)
|
86
|
+
self.ready_to_play = False
|
87
|
+
self.video_path = choose_video(self)
|
88
|
+
if self.video_path is not None:
|
89
|
+
self.ready_label.setText(
|
90
|
+
language_wrapper.language_word_dict.get("Ready")
|
91
|
+
)
|
92
|
+
self.ready_to_play = True
|
93
|
+
|
94
|
+
def opacity_trick(self) -> None:
|
95
|
+
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
96
|
+
|
97
|
+
def play_rate_trick(self) -> None:
|
98
|
+
self.play_rate_slider_value_label.setText(str(self.play_rate_slider.value()))
|
99
|
+
|
100
|
+
def volume_trick(self) -> None:
|
101
|
+
self.volume_slider_value_label.setText(str(self.volume_slider.value()))
|
102
|
+
|
103
|
+
def update_scene_json(self):
|
104
|
+
if self.video_path is None:
|
105
|
+
message_box = QMessageBox(self)
|
106
|
+
message_box.setText(
|
107
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
108
|
+
)
|
109
|
+
message_box.show()
|
110
|
+
else:
|
111
|
+
scene_json.update(
|
112
|
+
{
|
113
|
+
f"{len(scene_json)}": {
|
114
|
+
"type": "VIDEO",
|
115
|
+
"file_path": self.video_path,
|
116
|
+
"opacity": self.opacity_slider.value(),
|
117
|
+
"volume": self.volume_slider.value(),
|
118
|
+
"play_rate": self.play_rate_slider.value()
|
119
|
+
}
|
120
|
+
}
|
121
|
+
)
|
122
|
+
self.script_ui.renew_json_plain_text()
|
@@ -0,0 +1,66 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QLineEdit, QMessageBox, QPushButton
|
3
|
+
|
4
|
+
from frontengine.ui.page.scene_setting.scene_manager import SceneManagerUI
|
5
|
+
from frontengine.user_setting.scene_setting import scene_json
|
6
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
7
|
+
|
8
|
+
|
9
|
+
class WebSceneSettingUI(QWidget):
|
10
|
+
|
11
|
+
def __init__(self, script_ui: SceneManagerUI):
|
12
|
+
super().__init__()
|
13
|
+
self.script_ui = script_ui
|
14
|
+
# Opacity setting
|
15
|
+
self.opacity_slider = QSlider()
|
16
|
+
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
17
|
+
self.opacity_label = QLabel(
|
18
|
+
language_wrapper.language_word_dict.get("Opacity")
|
19
|
+
)
|
20
|
+
self.opacity_slider.setMinimum(1)
|
21
|
+
self.opacity_slider.setMaximum(100)
|
22
|
+
self.opacity_slider.setValue(20)
|
23
|
+
self.opacity_slider.setTickInterval(1)
|
24
|
+
self.opacity_slider_value_label = QLabel(str(self.opacity_slider.value()))
|
25
|
+
self.opacity_slider.actionTriggered.connect(self.opacity_trick)
|
26
|
+
# WEB URL input
|
27
|
+
self.web_url_input = QLineEdit()
|
28
|
+
self.url_label = QLabel(
|
29
|
+
language_wrapper.language_word_dict.get("scene_url_label")
|
30
|
+
)
|
31
|
+
self.grid_layout = QGridLayout()
|
32
|
+
# Update scene json
|
33
|
+
self.update_scene_button = QPushButton(
|
34
|
+
language_wrapper.language_word_dict.get("scene_add_web")
|
35
|
+
)
|
36
|
+
self.update_scene_button.clicked.connect(self.update_scene_json)
|
37
|
+
# Add to layout
|
38
|
+
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
39
|
+
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
40
|
+
self.grid_layout.addWidget(self.opacity_slider, 0, 2)
|
41
|
+
self.grid_layout.addWidget(self.url_label, 1, 0)
|
42
|
+
self.grid_layout.addWidget(self.web_url_input, 1, 1)
|
43
|
+
self.grid_layout.addWidget(self.update_scene_button, 2, 0)
|
44
|
+
self.setLayout(self.grid_layout)
|
45
|
+
|
46
|
+
def opacity_trick(self) -> None:
|
47
|
+
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
48
|
+
|
49
|
+
def update_scene_json(self):
|
50
|
+
if self.web_url_input.text() == "" or self.web_url_input.text().strip() == "":
|
51
|
+
message_box = QMessageBox(self)
|
52
|
+
message_box.setText(
|
53
|
+
language_wrapper.language_word_dict.get('not_prepare')
|
54
|
+
)
|
55
|
+
message_box.show()
|
56
|
+
else:
|
57
|
+
scene_json.update(
|
58
|
+
{
|
59
|
+
f"{len(scene_json)}": {
|
60
|
+
"type": "WEB",
|
61
|
+
"url": self.web_url_input.text(),
|
62
|
+
"opacity": self.opacity_slider.value(),
|
63
|
+
}
|
64
|
+
}
|
65
|
+
)
|
66
|
+
self.script_ui.renew_json_plain_text()
|
@@ -0,0 +1,55 @@
|
|
1
|
+
from PySide6.QtCore import Qt
|
2
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QTabWidget
|
3
|
+
from frontengine.ui.page.scene_setting.scene_page.gif import GIFSceneSettingUI
|
4
|
+
|
5
|
+
from frontengine.show.scene.scene import SceneManager
|
6
|
+
from frontengine.ui.page.scene_setting.scene_manager import SceneManagerUI
|
7
|
+
from frontengine.ui.page.scene_setting.scene_page.image import ImageSceneSettingUI
|
8
|
+
from frontengine.ui.page.scene_setting.scene_page.sound import SoundSceneSettingUI
|
9
|
+
from frontengine.ui.page.scene_setting.scene_page.text import TextSceneSettingUI
|
10
|
+
from frontengine.ui.page.scene_setting.scene_page.video import VideoSceneSettingUI
|
11
|
+
from frontengine.ui.page.scene_setting.scene_page.web import WebSceneSettingUI
|
12
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
13
|
+
|
14
|
+
|
15
|
+
class SceneSettingUI(QWidget):
|
16
|
+
|
17
|
+
def __init__(self):
|
18
|
+
super().__init__()
|
19
|
+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
20
|
+
self.grid_layout = QGridLayout()
|
21
|
+
self.grid_layout.setContentsMargins(0, 0, 0, 0)
|
22
|
+
# scene
|
23
|
+
self.scene = SceneManager()
|
24
|
+
# Tab
|
25
|
+
self.tab_widget = QTabWidget(self)
|
26
|
+
self.scene_manager_ui = SceneManagerUI(self.scene)
|
27
|
+
self.tab_widget.addTab(
|
28
|
+
self.scene_manager_ui, language_wrapper.language_word_dict.get("scene_script")
|
29
|
+
)
|
30
|
+
self.tab_widget.addTab(
|
31
|
+
GIFSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_gif_text")
|
32
|
+
)
|
33
|
+
self.tab_widget.addTab(
|
34
|
+
ImageSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_image_text")
|
35
|
+
)
|
36
|
+
self.tab_widget.addTab(
|
37
|
+
SoundSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_sound_text")
|
38
|
+
)
|
39
|
+
self.tab_widget.addTab(
|
40
|
+
TextSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_text_text")
|
41
|
+
)
|
42
|
+
self.tab_widget.addTab(
|
43
|
+
VideoSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_video_text")
|
44
|
+
)
|
45
|
+
self.tab_widget.addTab(
|
46
|
+
WebSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_web_text")
|
47
|
+
)
|
48
|
+
# Add to layout
|
49
|
+
self.grid_layout.addWidget(self.tab_widget, 0, 0, -1, -1)
|
50
|
+
self.setLayout(self.grid_layout)
|
51
|
+
|
52
|
+
def close_scene(self) -> None:
|
53
|
+
self.scene.widget_list.clear()
|
54
|
+
for view in self.scene.view_list:
|
55
|
+
view.close()
|
@@ -1,8 +1,10 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import QScreen
|
3
|
-
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QLineEdit, QPushButton, QCheckBox
|
2
|
+
from PySide6.QtGui import QScreen, QGuiApplication
|
3
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QLineEdit, QPushButton, QCheckBox, QComboBox, \
|
4
|
+
QDialog
|
4
5
|
|
5
6
|
from frontengine.show.text.draw_text import TextWidget
|
7
|
+
from frontengine.ui.page.utils import monitor_choose_dialog
|
6
8
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
7
9
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
8
10
|
|
@@ -36,7 +38,7 @@ class TextSettingUI(QWidget):
|
|
36
38
|
language_wrapper.language_word_dict.get("Font size")
|
37
39
|
)
|
38
40
|
self.font_size_slider.setMinimum(1)
|
39
|
-
self.font_size_slider.setMaximum(
|
41
|
+
self.font_size_slider.setMaximum(600)
|
40
42
|
self.font_size_slider.setValue(100)
|
41
43
|
self.font_size_slider.setTickInterval(1)
|
42
44
|
self.font_size_slider_value_label = QLabel(str(self.font_size_slider.value()))
|
@@ -57,6 +59,16 @@ class TextSettingUI(QWidget):
|
|
57
59
|
self.show_on_bottom_checkbox = QCheckBox(
|
58
60
|
language_wrapper.language_word_dict.get("Show on bottom")
|
59
61
|
)
|
62
|
+
# Text position
|
63
|
+
self.text_position_label = QLabel(
|
64
|
+
language_wrapper.language_word_dict.get("text_setting_choose_alignment")
|
65
|
+
)
|
66
|
+
self.text_position_combobox = QComboBox()
|
67
|
+
self.text_position_combobox.addItem("TopLeft")
|
68
|
+
self.text_position_combobox.addItem("TopRight")
|
69
|
+
self.text_position_combobox.addItem("BottomLeft")
|
70
|
+
self.text_position_combobox.addItem("BottomRight")
|
71
|
+
self.text_position_combobox.addItem("Center")
|
60
72
|
# Add to layout
|
61
73
|
self.grid_layout.addWidget(self.opacity_label, 0, 0)
|
62
74
|
self.grid_layout.addWidget(self.opacity_slider_value_label, 0, 1)
|
@@ -66,18 +78,23 @@ class TextSettingUI(QWidget):
|
|
66
78
|
self.grid_layout.addWidget(self.font_size_slider, 1, 2)
|
67
79
|
self.grid_layout.addWidget(self.show_on_all_screen_checkbox, 2, 0)
|
68
80
|
self.grid_layout.addWidget(self.show_on_bottom_checkbox, 2, 1)
|
69
|
-
self.grid_layout.addWidget(self.
|
70
|
-
self.grid_layout.addWidget(self.
|
81
|
+
self.grid_layout.addWidget(self.text_position_label, 3, 0)
|
82
|
+
self.grid_layout.addWidget(self.text_position_combobox, 3, 1)
|
83
|
+
self.grid_layout.addWidget(self.start_button, 4, 0)
|
84
|
+
self.grid_layout.addWidget(self.line_edit, 4, 1)
|
71
85
|
self.setLayout(self.grid_layout)
|
72
86
|
|
73
87
|
def set_show_all_screen(self) -> None:
|
74
88
|
self.show_all_screen = self.show_on_all_screen_checkbox.isChecked()
|
75
89
|
|
76
90
|
def _create_text_widget(self) -> TextWidget:
|
77
|
-
text_widget = TextWidget(
|
91
|
+
text_widget = TextWidget(
|
92
|
+
text=self.line_edit.text(),
|
93
|
+
alignment=self.text_position_combobox.currentText())
|
78
94
|
text_widget.set_font_variable(self.font_size_slider.value())
|
79
95
|
text_widget.set_ui_variable(float(self.opacity_slider.value()) / 100)
|
80
96
|
text_widget.set_ui_window_flag(self.show_on_bottom_checkbox.isChecked())
|
97
|
+
text_widget.set_font()
|
81
98
|
self.text_widget_list.append(text_widget)
|
82
99
|
return text_widget
|
83
100
|
|
@@ -89,13 +106,24 @@ class TextSettingUI(QWidget):
|
|
89
106
|
|
90
107
|
def start_draw_text_on_screen(self) -> None:
|
91
108
|
front_engine_logger.info("start_draw_text_on_screen")
|
92
|
-
|
109
|
+
monitors = QGuiApplication.screens()
|
110
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
93
111
|
text_widget = self._create_text_widget()
|
94
112
|
text_widget.showFullScreen()
|
113
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
114
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
115
|
+
result = input_dialog.exec_()
|
116
|
+
if result == QDialog.DialogCode.Accepted:
|
117
|
+
select_monitor_index = int(combobox.currentText())
|
118
|
+
if len(monitors) > select_monitor_index:
|
119
|
+
monitor = monitors[select_monitor_index]
|
120
|
+
gif_widget = self._create_text_widget()
|
121
|
+
gif_widget.setScreen(monitor)
|
122
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
123
|
+
gif_widget.showFullScreen()
|
95
124
|
else:
|
96
|
-
|
97
|
-
for screen in monitors:
|
98
|
-
monitor = screen.availableGeometry()
|
125
|
+
for monitor in monitors:
|
99
126
|
text_widget = self._create_text_widget()
|
100
|
-
text_widget.
|
127
|
+
text_widget.setScreen(monitor)
|
128
|
+
text_widget.move(monitor.availableGeometry().topLeft())
|
101
129
|
text_widget.showFullScreen()
|
@@ -0,0 +1,23 @@
|
|
1
|
+
from PySide6.QtWidgets import QWidget, QDialog, QGridLayout, QLabel, QComboBox, QPushButton
|
2
|
+
|
3
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
4
|
+
|
5
|
+
|
6
|
+
def monitor_choose_dialog(parent: QWidget, monitors: list):
|
7
|
+
input_dialog = QDialog(parent)
|
8
|
+
input_dialog.setWindowTitle(language_wrapper.language_word_dict.get("show_on_which_monitor"))
|
9
|
+
grid_layout = QGridLayout()
|
10
|
+
label = QLabel(language_wrapper.language_word_dict.get("show_on_which_monitor"))
|
11
|
+
combobox = QComboBox()
|
12
|
+
ok_button = QPushButton(language_wrapper.language_word_dict.get("ok"))
|
13
|
+
ok_button.clicked.connect(input_dialog.accept)
|
14
|
+
no_button = QPushButton(language_wrapper.language_word_dict.get("no"))
|
15
|
+
no_button.clicked.connect(input_dialog.reject)
|
16
|
+
for index in range(len(monitors)):
|
17
|
+
combobox.addItem(str(index))
|
18
|
+
grid_layout.addWidget(label, 0, 0)
|
19
|
+
grid_layout.addWidget(combobox, 1, 0)
|
20
|
+
grid_layout.addWidget(ok_button, 2, 0)
|
21
|
+
grid_layout.addWidget(no_button, 2, 1)
|
22
|
+
input_dialog.setLayout(grid_layout)
|
23
|
+
return input_dialog, combobox
|
@@ -1,9 +1,10 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import QScreen
|
3
|
-
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, QCheckBox
|
2
|
+
from PySide6.QtGui import QScreen, QGuiApplication
|
3
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QPushButton, QMessageBox, QCheckBox, QDialog
|
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
8
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
8
9
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
9
10
|
|
@@ -119,17 +120,32 @@ class VideoSettingUI(QWidget):
|
|
119
120
|
message_box.show()
|
120
121
|
else:
|
121
122
|
front_engine_logger.info("start_play_gif")
|
122
|
-
|
123
|
+
monitors = QGuiApplication.screens()
|
124
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
123
125
|
video_widget = self._create_video_widget()
|
124
126
|
video_widget.set_ui_window_flag(self.show_on_bottom_checkbox.isChecked())
|
125
127
|
video_widget.showMaximized()
|
128
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
129
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
130
|
+
result = input_dialog.exec_()
|
131
|
+
if result == QDialog.DialogCode.Accepted:
|
132
|
+
select_monitor_index = int(combobox.currentText())
|
133
|
+
if len(monitors) > select_monitor_index:
|
134
|
+
monitor = monitors[select_monitor_index]
|
135
|
+
gif_widget = self._create_video_widget()
|
136
|
+
gif_widget.setScreen(monitor)
|
137
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
138
|
+
gif_widget.showFullScreen()
|
126
139
|
else:
|
127
|
-
|
128
|
-
for
|
129
|
-
monitor = screen.availableGeometry()
|
140
|
+
count = 0
|
141
|
+
for monitor in monitors:
|
130
142
|
video_widget = self._create_video_widget()
|
131
|
-
|
143
|
+
if count >= 1:
|
144
|
+
video_widget.media_player.audioOutput().setVolume(0)
|
145
|
+
video_widget.setScreen(monitor)
|
146
|
+
video_widget.move(monitor.availableGeometry().topLeft())
|
132
147
|
video_widget.showMaximized()
|
148
|
+
count = count + 1
|
133
149
|
|
134
150
|
def choose_and_copy_file_to_cwd_gif_dir_then_play(self) -> None:
|
135
151
|
self.ready_label.setText(
|
@@ -1,8 +1,9 @@
|
|
1
1
|
from PySide6.QtCore import Qt
|
2
2
|
from PySide6.QtGui import QScreen
|
3
|
-
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QLineEdit, QPushButton, QCheckBox
|
3
|
+
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSlider, QLineEdit, QPushButton, QCheckBox, QDialog
|
4
4
|
|
5
5
|
from frontengine.show.web.webview import WebWidget
|
6
|
+
from frontengine.ui.page.utils import monitor_choose_dialog
|
6
7
|
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
7
8
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
8
9
|
|
@@ -93,14 +94,25 @@ class WEBSettingUI(QWidget):
|
|
93
94
|
self.opacity_slider_value_label.setText(str(self.opacity_slider.value()))
|
94
95
|
|
95
96
|
def start_open_web_with_url(self) -> None:
|
96
|
-
|
97
|
+
monitors = QScreen.virtualSiblings(self.screen())
|
98
|
+
if self.show_all_screen is False and len(monitors) <= 1:
|
97
99
|
web_widget = self._create_web_widget()
|
98
100
|
web_widget.showMaximized()
|
101
|
+
elif self.show_all_screen is False and len(monitors) >= 2:
|
102
|
+
input_dialog, combobox = monitor_choose_dialog(self, monitors)
|
103
|
+
result = input_dialog.exec_()
|
104
|
+
if result == QDialog.DialogCode.Accepted:
|
105
|
+
select_monitor_index = int(combobox.currentText())
|
106
|
+
if len(monitors) > select_monitor_index:
|
107
|
+
monitor = monitors[select_monitor_index]
|
108
|
+
gif_widget = self._create_web_widget()
|
109
|
+
gif_widget.setScreen(monitor)
|
110
|
+
gif_widget.move(monitor.availableGeometry().topLeft())
|
111
|
+
gif_widget.showFullScreen()
|
99
112
|
else:
|
100
113
|
front_engine_logger.info("start_open_web_with_url")
|
101
|
-
|
102
|
-
for screen in monitors:
|
103
|
-
monitor = screen.availableGeometry()
|
114
|
+
for monitor in monitors:
|
104
115
|
web_widget = self._create_web_widget()
|
105
|
-
web_widget.
|
106
|
-
web_widget.
|
116
|
+
web_widget.setScreen(monitor)
|
117
|
+
web_widget.move(monitor.availableGeometry().topLeft())
|
118
|
+
web_widget.showFullScreen()
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from PySide6.QtWidgets import QWidget, QFileDialog
|
4
|
+
|
5
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_file
|
6
|
+
from frontengine.utils.json.json_file import write_json, read_json
|
7
|
+
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
8
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
9
|
+
|
10
|
+
scene_json = {
|
11
|
+
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
def choose_scene_json(
|
16
|
+
trigger_ui: QWidget, file_filter: str = "Json (*.json;)", extensions: list = None) -> str:
|
17
|
+
front_engine_logger.info("choose_scene_json")
|
18
|
+
extensions = extensions or [".json"]
|
19
|
+
file_path = choose_file(
|
20
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
21
|
+
warning_message=language_wrapper.language_word_dict.get("scene_choose_message_box"))
|
22
|
+
if file_path:
|
23
|
+
scene_json.update(read_json(file_path))
|
24
|
+
|
25
|
+
|
26
|
+
def write_scene_file(parent_qt_instance: QWidget, file_filter: str = "Json (*.json;)"):
|
27
|
+
file_path = QFileDialog().getSaveFileName(
|
28
|
+
parent=parent_qt_instance,
|
29
|
+
dir=os.getcwd(),
|
30
|
+
filter=file_filter
|
31
|
+
)
|
32
|
+
if file_path:
|
33
|
+
file_path = file_path[0]
|
34
|
+
write_json(str(file_path), scene_json)
|
@@ -54,6 +54,9 @@ english_word_dict = {
|
|
54
54
|
"seconds": "sec",
|
55
55
|
"close_delay": "Message disappear time sec",
|
56
56
|
"country_code": "locale code",
|
57
|
+
"show_on_which_monitor": "Show on which monitor",
|
58
|
+
"ok": "ok",
|
59
|
+
"no": "no",
|
57
60
|
# GIF setting ui
|
58
61
|
"gif_setting_ui_choose_file": "Choose GIF or WEBP file",
|
59
62
|
"gif_setting_ui_play": "Start Play GIF or WEBP",
|
@@ -71,6 +74,7 @@ english_word_dict = {
|
|
71
74
|
"sound_player_setting_message_box_sound": "Please choose a sound file",
|
72
75
|
# Text setting ui
|
73
76
|
"text_setting_start_draw": "Start draw text on screen",
|
77
|
+
"text_setting_choose_position": "Choose text alignment",
|
74
78
|
# Video setting ui
|
75
79
|
"video_setting_choose_file": "Choose video file",
|
76
80
|
"video_setting_start_play": "Start Play Video",
|
@@ -81,6 +85,7 @@ english_word_dict = {
|
|
81
85
|
"web_setting_open_enable_input": "Enable input",
|
82
86
|
# Scene UI
|
83
87
|
"tab_scene_text": "Scene",
|
88
|
+
"scene_start": "Start scene",
|
84
89
|
"scene_table_view_type": "Type",
|
85
90
|
"scene_file_path": "File path",
|
86
91
|
"scene_setting_start_scene_button": "Start Scene",
|
@@ -90,13 +95,14 @@ english_word_dict = {
|
|
90
95
|
"scene_add_text": "Add text to scene",
|
91
96
|
"scene_add_video": "Add video to scene",
|
92
97
|
"scene_add_web": "Add web to scene",
|
98
|
+
"scene_url_label": "URL",
|
93
99
|
"scene_add_UI": "Add ui to scene",
|
94
100
|
"scene_choose_message_box": "Please choose a scene file",
|
95
101
|
"scene_choose_output_path_message_box": "Please choose a scene file output path",
|
96
102
|
"scene_output": "output scene file",
|
97
103
|
"scene_input": "load scene file",
|
98
|
-
"
|
99
|
-
"
|
104
|
+
"scene_script_clear": "clear all script",
|
105
|
+
"scene_script": "Scene script",
|
100
106
|
# Chat scene input
|
101
107
|
"chat_scene_input_title": "input chat content",
|
102
108
|
"chat_scene_send_chat": "send text",
|
@@ -116,4 +122,10 @@ english_word_dict = {
|
|
116
122
|
"start_generate_image": "Star generate",
|
117
123
|
"input_error": "Please input something",
|
118
124
|
"save_generation_image": "Save Image",
|
125
|
+
# Help Menu
|
126
|
+
"help_menu_label": "Help menu",
|
127
|
+
"help_menu_open_issue": "Open issue tracker",
|
128
|
+
# HowTo Menu
|
129
|
+
"doc_menu_label": "Doc menu",
|
130
|
+
"doc_menu_open_doc": "Open doc",
|
119
131
|
}
|