frontengine-dev 0.0.57__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 +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_dev-0.0.57.dist-info → frontengine_dev-0.0.58.dist-info}/METADATA +1 -1
- {frontengine_dev-0.0.57.dist-info → frontengine_dev-0.0.58.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_dev-0.0.57.dist-info → frontengine_dev-0.0.58.dist-info}/LICENSE +0 -0
- {frontengine_dev-0.0.57.dist-info → frontengine_dev-0.0.58.dist-info}/WHEEL +0 -0
- {frontengine_dev-0.0.57.dist-info → frontengine_dev-0.0.58.dist-info}/top_level.txt +0 -0
@@ -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()
|
@@ -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()
|
@@ -1,17 +1,14 @@
|
|
1
|
-
from typing import Union
|
2
|
-
|
3
1
|
from PySide6.QtCore import Qt
|
4
2
|
from PySide6.QtWidgets import QWidget, QGridLayout, QTabWidget
|
3
|
+
from frontengine.ui.page.scene_setting.scene_page.gif import GIFSceneSettingUI
|
5
4
|
|
6
5
|
from frontengine.show.scene.scene import SceneManager
|
7
|
-
from frontengine.ui.page.scene_setting.
|
8
|
-
from frontengine.ui.page.scene_setting.
|
9
|
-
from frontengine.ui.page.scene_setting.
|
10
|
-
from frontengine.ui.page.scene_setting.
|
11
|
-
from frontengine.ui.page.scene_setting.
|
12
|
-
from frontengine.ui.page.scene_setting.
|
13
|
-
from frontengine.ui.page.scene_setting.scene_tabs.video import VideoSceneSettingUI
|
14
|
-
from frontengine.ui.page.scene_setting.scene_tabs.web import WEBSceneSettingUI
|
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
|
15
12
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
16
13
|
|
17
14
|
|
@@ -22,27 +19,37 @@ class SceneSettingUI(QWidget):
|
|
22
19
|
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
23
20
|
self.grid_layout = QGridLayout()
|
24
21
|
self.grid_layout.setContentsMargins(0, 0, 0, 0)
|
25
|
-
#
|
26
|
-
self.scene
|
27
|
-
|
28
|
-
# Tab widget
|
22
|
+
# scene
|
23
|
+
self.scene = SceneManager()
|
24
|
+
# Tab
|
29
25
|
self.tab_widget = QTabWidget(self)
|
26
|
+
self.scene_manager_ui = SceneManagerUI(self.scene)
|
30
27
|
self.tab_widget.addTab(
|
31
|
-
|
32
|
-
|
33
|
-
ImageSceneSettingUI(), language_wrapper.language_word_dict.get("tab_image_text"))
|
28
|
+
self.scene_manager_ui, language_wrapper.language_word_dict.get("scene_script")
|
29
|
+
)
|
34
30
|
self.tab_widget.addTab(
|
35
|
-
GIFSceneSettingUI(), language_wrapper.language_word_dict.get("tab_gif_text")
|
31
|
+
GIFSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_gif_text")
|
32
|
+
)
|
36
33
|
self.tab_widget.addTab(
|
37
|
-
|
34
|
+
ImageSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_image_text")
|
35
|
+
)
|
38
36
|
self.tab_widget.addTab(
|
39
|
-
|
37
|
+
SoundSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_sound_text")
|
38
|
+
)
|
40
39
|
self.tab_widget.addTab(
|
41
|
-
|
40
|
+
TextSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_text_text")
|
41
|
+
)
|
42
42
|
self.tab_widget.addTab(
|
43
|
-
|
43
|
+
VideoSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_video_text")
|
44
|
+
)
|
44
45
|
self.tab_widget.addTab(
|
45
|
-
|
46
|
+
WebSceneSettingUI(self.scene_manager_ui), language_wrapper.language_word_dict.get("tab_web_text")
|
47
|
+
)
|
46
48
|
# Add to layout
|
47
49
|
self.grid_layout.addWidget(self.tab_widget, 0, 0, -1, -1)
|
48
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
2
|
from PySide6.QtGui import QScreen, QGuiApplication
|
3
|
-
from PySide6.QtWidgets import QWidget, QGridLayout, QSlider, QLabel, QLineEdit, QPushButton, QCheckBox
|
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,11 +106,22 @@ 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
|
-
monitors = QGuiApplication.screens()
|
97
125
|
for monitor in monitors:
|
98
126
|
text_widget = self._create_text_widget()
|
99
127
|
text_widget.setScreen(monitor)
|
@@ -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
|