frontengine 0.0.55__py3-none-any.whl → 0.0.57__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. frontengine/__init__.py +13 -15
  2. frontengine/show/gif/paint_gif.py +4 -2
  3. frontengine/show/image/paint_image.py +4 -2
  4. frontengine/show/scene/extend_graphic_scene.py +0 -1
  5. frontengine/show/scene/extend_graphic_view.py +2 -1
  6. frontengine/show/scene/scene.py +23 -41
  7. frontengine/show/sound_player/sound_effect.py +1 -2
  8. frontengine/show/sound_player/sound_player.py +1 -2
  9. frontengine/show/text/draw_text.py +31 -4
  10. frontengine/show/video/video_player.py +1 -2
  11. frontengine/show/web/webview.py +1 -3
  12. frontengine/{ui/main/system_tray → system_tray}/extend_system_tray.py +1 -3
  13. frontengine/ui/dialog/choose_file_dialog.py +19 -43
  14. frontengine/ui/{main/main_ui.py → main_ui.py} +39 -44
  15. frontengine/ui/menu/help_menu.py +25 -0
  16. frontengine/ui/menu/how_to_menu.py +25 -0
  17. frontengine/ui/{main → menu}/language_menu.py +10 -10
  18. frontengine/ui/{setting → page}/control_center/control_center_ui.py +11 -18
  19. frontengine/ui/{setting → page}/gif/gif_setting_ui.py +20 -8
  20. frontengine/ui/{setting → page}/image/image_setting_ui.py +19 -7
  21. frontengine/ui/page/scene_setting/scene_manager.py +96 -0
  22. frontengine/ui/page/scene_setting/scene_page/gif.py +102 -0
  23. frontengine/ui/page/scene_setting/scene_page/image.py +83 -0
  24. frontengine/ui/page/scene_setting/scene_page/sound.py +84 -0
  25. frontengine/ui/page/scene_setting/scene_page/text.py +93 -0
  26. frontengine/ui/page/scene_setting/scene_page/video.py +122 -0
  27. frontengine/ui/page/scene_setting/scene_page/web.py +66 -0
  28. frontengine/ui/page/scene_setting/scene_setting_ui.py +55 -0
  29. frontengine/ui/{setting → page}/sound_player/sound_player_setting_ui.py +0 -1
  30. frontengine/ui/{setting → page}/text/text_setting_ui.py +39 -11
  31. frontengine/ui/page/utils.py +23 -0
  32. frontengine/ui/{setting → page}/video/video_setting_ui.py +23 -7
  33. frontengine/ui/{setting → page}/web/web_setting_ui.py +19 -7
  34. frontengine/user_setting/scene_setting.py +34 -0
  35. frontengine/user_setting/user_setting_file.py +2 -1
  36. frontengine/utils/browser/browser.py +5 -0
  37. frontengine/utils/multi_language/english.py +14 -2
  38. frontengine/utils/multi_language/traditional_chinese.py +15 -2
  39. {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/METADATA +3 -50
  40. frontengine-0.0.57.dist-info/RECORD +91 -0
  41. {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/WHEEL +1 -1
  42. frontengine/show/chat/chat_toast.py +0 -55
  43. frontengine/show/image_generation/image_generation_show.py +0 -43
  44. frontengine/ui/setting/chat/chat_model.py +0 -65
  45. frontengine/ui/setting/chat/chat_scene_input.py +0 -72
  46. frontengine/ui/setting/chat/chat_scene_setting.py +0 -187
  47. frontengine/ui/setting/chat/chatthread.py +0 -78
  48. frontengine/ui/setting/chat/speech_to_text.py +0 -70
  49. frontengine/ui/setting/image_generation/generation_image_thread.py +0 -32
  50. frontengine/ui/setting/image_generation/image_generation_input.py +0 -63
  51. frontengine/ui/setting/scene_setting/scene_setting_ui.py +0 -48
  52. frontengine/ui/setting/scene_setting/scene_tabs/Image.py +0 -61
  53. frontengine/ui/setting/scene_setting/scene_tabs/gif.py +0 -74
  54. frontengine/ui/setting/scene_setting/scene_tabs/scene_control.py +0 -77
  55. frontengine/ui/setting/scene_setting/scene_tabs/sound.py +0 -44
  56. frontengine/ui/setting/scene_setting/scene_tabs/tableview_model.py +0 -65
  57. frontengine/ui/setting/scene_setting/scene_tabs/text.py +0 -77
  58. frontengine/ui/setting/scene_setting/scene_tabs/ui.py +0 -56
  59. frontengine/ui/setting/scene_setting/scene_tabs/video.py +0 -88
  60. frontengine/ui/setting/scene_setting/scene_tabs/web.py +0 -74
  61. frontengine/ui/setting/text/__init__.py +0 -0
  62. frontengine/ui/setting/video/__init__.py +0 -0
  63. frontengine/ui/setting/web/__init__.py +0 -0
  64. frontengine/user_setting/gif/__init__.py +0 -0
  65. frontengine/user_setting/gif/gif_setting.py +0 -5
  66. frontengine/user_setting/image/__init__.py +0 -0
  67. frontengine/user_setting/image/image_setting.py +0 -4
  68. frontengine/user_setting/sound/__init__.py +0 -0
  69. frontengine/user_setting/sound/sound_setting.py +0 -4
  70. frontengine/user_setting/text/__init__.py +0 -0
  71. frontengine/user_setting/text/text_setting.py +0 -5
  72. frontengine/user_setting/video/__init__.py +0 -0
  73. frontengine/user_setting/video/video_setting.py +0 -6
  74. frontengine/user_setting/web/__init__.py +0 -0
  75. frontengine/user_setting/web/web_setting.py +0 -4
  76. frontengine-0.0.55.dist-info/RECORD +0 -112
  77. /frontengine/{show/chat → system_tray}/__init__.py +0 -0
  78. /frontengine/{show/image_generation → ui/menu}/__init__.py +0 -0
  79. /frontengine/ui/{main → page}/__init__.py +0 -0
  80. /frontengine/ui/{main/system_tray → page/control_center}/__init__.py +0 -0
  81. /frontengine/ui/{setting → page/gif}/__init__.py +0 -0
  82. /frontengine/ui/{setting/chat → page/image}/__init__.py +0 -0
  83. /frontengine/ui/{setting/control_center → page/scene_setting}/__init__.py +0 -0
  84. /frontengine/ui/{setting/gif → page/scene_setting/scene_page}/__init__.py +0 -0
  85. /frontengine/ui/{setting/image → page/sound_player}/__init__.py +0 -0
  86. /frontengine/ui/{setting/image_generation → page/text}/__init__.py +0 -0
  87. /frontengine/ui/{setting/scene_setting → page/video}/__init__.py +0 -0
  88. /frontengine/ui/{setting/scene_setting/scene_tabs → page/web}/__init__.py +0 -0
  89. /frontengine/{ui/setting/sound_player → utils/browser}/__init__.py +0 -0
  90. {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/LICENSE +0 -0
  91. {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/top_level.txt +0 -0
@@ -1,78 +0,0 @@
1
- import asyncio
2
- import json
3
- from pathlib import Path
4
- from queue import Queue
5
- from threading import Thread
6
-
7
- from re_edge_gpt import Chatbot, ConversationStyle
8
- from PySide6.QtWidgets import QPlainTextEdit
9
-
10
-
11
- class DelegateChat(object):
12
-
13
- def __init__(self):
14
- self.chat_bot = None
15
- self.style = ConversationStyle.creative
16
-
17
- def new_topic(self, message_panel: QPlainTextEdit):
18
- self.chat_bot = None
19
- message_panel.clear()
20
-
21
- def change_style(self, style: str):
22
- if style == "creative":
23
- self.style = ConversationStyle.creative
24
- elif style == "precise":
25
- self.style = ConversationStyle.precise
26
- else:
27
- self.style = ConversationStyle.balanced
28
-
29
-
30
- class ChatThread(Thread):
31
-
32
- def __init__(self, chat_send_message: str, locale: str):
33
- super().__init__()
34
- self.current_message = None
35
- self.chat_send_message = chat_send_message
36
- PANEL_MESSAGE_QUEUE.put_nowait("Q: " + chat_send_message)
37
- self.locale = locale
38
- if DELEGATE_CHAT.chat_bot is not None:
39
- self.chat_bot = DELEGATE_CHAT.chat_bot
40
-
41
- def run(self) -> None:
42
- try:
43
- chat_response = dict()
44
-
45
- async def send_chat_async():
46
- nonlocal chat_response
47
- if DELEGATE_CHAT.chat_bot is None:
48
- cookies = json.loads(open(
49
- str(Path(str(Path.cwd()) + "/bing_cookies.json")), encoding="utf-8").read())
50
- bot = await Chatbot.create(cookies=cookies)
51
- response = await bot.ask(
52
- prompt=self.chat_send_message, conversation_style=DELEGATE_CHAT.style, locale=self.locale
53
- )
54
- chat_response = response
55
- DELEGATE_CHAT.chat_bot = bot
56
- else:
57
- response = await DELEGATE_CHAT.chat_bot.ask(
58
- prompt=self.chat_send_message, conversation_style=DELEGATE_CHAT.style)
59
- chat_response = response
60
-
61
- asyncio.run(send_chat_async())
62
- self.current_message = chat_response
63
- if self.current_message is not None:
64
- for text_dict in self.current_message.get("item").get("messages"):
65
- if text_dict.get("author") == "bot":
66
- response_text: str = text_dict.get("text")
67
- if response_text is not None and not response_text.isspace():
68
- MESSAGE_QUEUE.put_nowait(response_text)
69
- PANEL_MESSAGE_QUEUE.put_nowait("A: " + response_text)
70
- except Exception as error:
71
- EXCEPTION_QUEUE.put_nowait(repr(error))
72
- raise error
73
-
74
-
75
- MESSAGE_QUEUE = Queue()
76
- PANEL_MESSAGE_QUEUE = Queue()
77
- DELEGATE_CHAT = DelegateChat()
78
- EXCEPTION_QUEUE = Queue()
@@ -1,70 +0,0 @@
1
- import queue
2
- import sys
3
- import time
4
-
5
- from PySide6.QtCore import QTimer, Qt
6
- from PySide6.QtWidgets import QWidget, QPushButton, QBoxLayout, QLineEdit
7
- from speech_recognition import Microphone
8
- from speech_recognition import Recognizer
9
- from speech_recognition import RequestError, UnknownValueError
10
- from threading import Thread
11
-
12
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
13
-
14
- LISTENER_QUEUE = queue.Queue()
15
-
16
-
17
- def callback(recognizer: Recognizer, audio):
18
- try:
19
- text = recognizer.recognize_google(audio)
20
- LISTENER_QUEUE.put_nowait(text)
21
- except (RequestError, UnknownValueError) as error:
22
- print(repr(error), file=sys.stderr)
23
-
24
-
25
- class ChatSpeechToText(QWidget):
26
-
27
- def __init__(self):
28
- super().__init__()
29
- # UI
30
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
31
- self.box_layout = QBoxLayout(QBoxLayout.Direction.LeftToRight)
32
- self.voice_text_edit = QLineEdit()
33
- self.start_listen_button = QPushButton(
34
- language_wrapper.language_word_dict.get("chat_recognizer_voice_button"))
35
- self.start_listen_button.clicked.connect(self.start_listener_thread)
36
- self.send_text_button = QPushButton(
37
- language_wrapper.language_word_dict.get("chat_scene_send_chat"))
38
- self.box_layout.addWidget(self.voice_text_edit)
39
- self.box_layout.addWidget(self.start_listen_button)
40
- self.box_layout.addWidget(self.send_text_button)
41
- self.setLayout(self.box_layout)
42
- # Listener Timer
43
- self.listener_timer = QTimer()
44
- self.listener_timer.setInterval(100)
45
- self.listener_timer.timeout.connect(self.update_voice_edit)
46
- self.listener_timer.start()
47
-
48
- def start_listener_thread(self):
49
- listener_thread = Thread(target=self.start_listener)
50
- listener_thread.daemon = True
51
- listener_thread.start()
52
-
53
- @classmethod
54
- def start_listener(cls):
55
- recognizer = Recognizer()
56
- microphone = Microphone()
57
- with microphone as source:
58
- recognizer.adjust_for_ambient_noise(source, duration=0.1)
59
- stop_listening = recognizer.listen_in_background(microphone, callback)
60
- for receive_sound_time in range(50):
61
- time.sleep(0.1)
62
- stop_listening(wait_for_stop=False)
63
-
64
- def update_voice_edit(self):
65
- if not LISTENER_QUEUE.empty():
66
- self.voice_text_edit.setText(str(LISTENER_QUEUE.get_nowait()))
67
-
68
- def close(self) -> bool:
69
- self.listener_timer.stop()
70
- return super().close()
@@ -1,32 +0,0 @@
1
- import asyncio
2
- from queue import Queue
3
- from threading import Thread
4
- from re_edge_gpt import ImageGenAsync
5
-
6
-
7
- class ImageGenThread(Thread):
8
-
9
- def __init__(self, image_keyword: str):
10
- super().__init__()
11
- auth_cooker = open("bing_cookies.txt", "r+").read()
12
- self.async_gen = ImageGenAsync(auth_cookie=auth_cooker)
13
- self.image_keyword = image_keyword
14
-
15
- def run(self) -> None:
16
- try:
17
- image_list = list()
18
-
19
- async def send_chat_async():
20
- nonlocal image_list
21
- image_list = await self.async_gen.get_images(self.image_keyword)
22
-
23
- asyncio.run(send_chat_async())
24
- for image in image_list:
25
- IMAGE_QUEUE.put_nowait(image)
26
- except Exception as error:
27
- EXCEPTION_QUEUE.put_nowait(repr(error))
28
- raise error
29
-
30
-
31
- IMAGE_QUEUE = Queue()
32
- EXCEPTION_QUEUE = Queue()
@@ -1,63 +0,0 @@
1
- from typing import List
2
-
3
- import requests
4
- from PySide6.QtCore import QTimer
5
- from PySide6.QtGui import QPixmap, Qt
6
- from PySide6.QtWidgets import QWidget, QPushButton, QLineEdit, QGridLayout, QMessageBox, QPlainTextEdit
7
-
8
- from frontengine.show.image_generation.image_generation_show import ImageGenerateShow
9
- from frontengine.ui.setting.image_generation.generation_image_thread import ImageGenThread, IMAGE_QUEUE
10
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
-
12
-
13
- class ImageGenerationUI(QWidget):
14
- def __init__(self):
15
- super().__init__()
16
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
17
- # UI
18
- self.image_keyword_input = QLineEdit()
19
- self.send_text_button = QPushButton()
20
- self.send_text_button.setText(language_wrapper.language_word_dict.get("start_generate_image"))
21
- self.image_panel = QPlainTextEdit()
22
- self.image_panel.setReadOnly(True)
23
- self.send_text_button.clicked.connect(self.generate_image)
24
- # Layout
25
- self.grid_layout = QGridLayout()
26
- self.grid_layout.setContentsMargins(0, 0, 0, 0)
27
- self.grid_layout.addWidget(self.image_keyword_input, 0, 0)
28
- self.grid_layout.addWidget(self.send_text_button, 0, 1)
29
- self.grid_layout.addWidget(self.image_panel, 1, 0, -1, -1)
30
- self.setLayout(self.grid_layout)
31
- # Pull image timer
32
- self.pull_image_timer = QTimer()
33
- self.pull_image_timer.setInterval(1000)
34
- self.pull_image_timer.timeout.connect(self.get_image)
35
- self.pull_image_timer.start()
36
- # Manage show
37
- self.show_list: List[QWidget] = list()
38
-
39
- def generate_image(self):
40
- if self.image_keyword_input.text() == "" or self.image_keyword_input.text().isspace():
41
- input_error_message = QMessageBox(self)
42
- input_error_message.setText(language_wrapper.language_word_dict.get("input_error"))
43
- input_error_message.show()
44
- else:
45
- image_thread = ImageGenThread(self.image_keyword_input.text())
46
- image_thread.daemon = True
47
- image_thread.start()
48
-
49
- def get_image(self):
50
- if not IMAGE_QUEUE.empty():
51
- image_link = IMAGE_QUEUE.get_nowait()
52
- image_response = requests.get(image_link)
53
- image = QPixmap()
54
- image.loadFromData(image_response.content)
55
- image_show = ImageGenerateShow(image, image_link)
56
- self.show_list.append(image_show)
57
- image_show.show()
58
- self.image_panel.appendPlainText(image_link)
59
-
60
- def close(self) -> bool:
61
- for widget in self.show_list:
62
- widget.close()
63
- return super().close()
@@ -1,48 +0,0 @@
1
- from typing import Union
2
-
3
- from PySide6.QtCore import Qt
4
- from PySide6.QtWidgets import QWidget, QGridLayout, QTabWidget
5
-
6
- from frontengine.show.scene.scene import SceneManager
7
- from frontengine.ui.setting.scene_setting.scene_tabs.Image import ImageSceneSettingUI
8
- from frontengine.ui.setting.scene_setting.scene_tabs.gif import GIFSceneSettingUI
9
- from frontengine.ui.setting.scene_setting.scene_tabs.scene_control import SceneControlSettingUI
10
- from frontengine.ui.setting.scene_setting.scene_tabs.sound import SoundSceneSettingUI
11
- from frontengine.ui.setting.scene_setting.scene_tabs.text import TextSceneSettingUI
12
- from frontengine.ui.setting.scene_setting.scene_tabs.ui import UISceneSettingUI
13
- from frontengine.ui.setting.scene_setting.scene_tabs.video import VideoSceneSettingUI
14
- from frontengine.ui.setting.scene_setting.scene_tabs.web import WEBSceneSettingUI
15
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
16
-
17
-
18
- class SceneSettingUI(QWidget):
19
-
20
- def __init__(self):
21
- super().__init__()
22
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
23
- self.grid_layout = QGridLayout()
24
- self.grid_layout.setContentsMargins(0, 0, 0, 0)
25
- # Init variable
26
- self.scene: Union[None, SceneManager] = None
27
- self.scene_control_setting = SceneControlSettingUI()
28
- # Tab widget
29
- self.tab_widget = QTabWidget(self)
30
- self.tab_widget.addTab(
31
- SceneControlSettingUI(), language_wrapper.language_word_dict.get("scene_control_panel"))
32
- self.tab_widget.addTab(
33
- ImageSceneSettingUI(), language_wrapper.language_word_dict.get("tab_image_text"))
34
- self.tab_widget.addTab(
35
- GIFSceneSettingUI(), language_wrapper.language_word_dict.get("tab_gif_text"))
36
- self.tab_widget.addTab(
37
- TextSceneSettingUI(), language_wrapper.language_word_dict.get("tab_text_text"))
38
- self.tab_widget.addTab(
39
- VideoSceneSettingUI(), language_wrapper.language_word_dict.get("tab_video_text"))
40
- self.tab_widget.addTab(
41
- WEBSceneSettingUI(), language_wrapper.language_word_dict.get("tab_web_text"))
42
- self.tab_widget.addTab(
43
- SoundSceneSettingUI(), language_wrapper.language_word_dict.get("tab_sound_text"))
44
- self.tab_widget.addTab(
45
- UISceneSettingUI(), language_wrapper.language_word_dict.get("tab_external_ui"))
46
- # Add to layout
47
- self.grid_layout.addWidget(self.tab_widget, 0, 0, -1, -1)
48
- self.setLayout(self.grid_layout)
@@ -1,61 +0,0 @@
1
- from PySide6.QtCore import Qt
2
- from PySide6.QtGui import QIntValidator
3
- from PySide6.QtWidgets import QWidget, QBoxLayout, QPushButton, QSlider, QLabel, QLineEdit, QHBoxLayout
4
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
5
-
6
- from frontengine.ui.dialog.choose_file_dialog import choose_image
7
- from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import add_row_data
8
- from frontengine.utils.logging.loggin_instance import front_engine_logger
9
-
10
-
11
- class ImageSceneSettingUI(QWidget):
12
-
13
- def __init__(self):
14
- super().__init__()
15
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
16
- self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
17
- # Image button
18
- self.image_button = QPushButton(
19
- language_wrapper.language_word_dict.get("scene_add_image")
20
- )
21
- self.image_button.clicked.connect(self.add_image)
22
- # Opacity slider
23
- self.opacity_slider = QSlider()
24
- self.opacity_slider.setMinimum(1)
25
- self.opacity_slider.setMaximum(100)
26
- self.opacity_slider.setTickInterval(1)
27
- self.opacity_slider.setValue(20)
28
- self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
29
- self.opacity_label = QLabel()
30
- self.opacity_label.setText(language_wrapper.language_word_dict.get("Opacity"))
31
- self.opacity_box_h_layout = QHBoxLayout()
32
- self.opacity_box_h_layout.addWidget(self.opacity_label)
33
- self.opacity_box_h_layout.addWidget(self.opacity_slider)
34
- # Position x input
35
- self.position_x_input_label = QLabel(language_wrapper.language_word_dict.get("position_x"))
36
- self.position_x_input = QLineEdit()
37
- self.position_x_input.setValidator(QIntValidator(0, 999999, self))
38
- self.position_x_layout = QHBoxLayout()
39
- self.position_x_layout.addWidget(self.position_x_input_label)
40
- self.position_x_layout.addWidget(self.position_x_input)
41
- # Position y input
42
- self.position_y_input_label = QLabel(language_wrapper.language_word_dict.get("position_y"))
43
- self.position_y_input = QLineEdit()
44
- self.position_y_input.setValidator(QIntValidator(0, 999999, self))
45
- self.position_y_layout = QHBoxLayout()
46
- self.position_y_layout.addWidget(self.position_y_input_label)
47
- self.position_y_layout.addWidget(self.position_y_input)
48
- # Set UI
49
- self.box_layout.addLayout(self.opacity_box_h_layout)
50
- self.box_layout.addLayout(self.position_x_layout)
51
- self.box_layout.addLayout(self.position_y_layout)
52
- self.box_layout.addWidget(self.image_button)
53
- self.setLayout(self.box_layout)
54
-
55
- def add_image(self) -> None:
56
- image_path = choose_image(self)
57
- if image_path is not None:
58
- row_data = ["IMAGE", image_path, "", "", str(self.opacity_slider.value()), "", "", "", "", "", "",
59
- self.position_x_input.text(), self.position_y_input.text()]
60
- front_engine_logger.info(f"add image, param: {row_data}")
61
- add_row_data(row_data)
@@ -1,74 +0,0 @@
1
- from PySide6.QtCore import Qt
2
- from PySide6.QtGui import QIntValidator
3
- from PySide6.QtWidgets import QWidget, QBoxLayout, QPushButton, QSlider, QLabel, QLineEdit, QHBoxLayout
4
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
5
-
6
- from frontengine.ui.dialog.choose_file_dialog import choose_gif
7
- from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import add_row_data
8
- from frontengine.utils.logging.loggin_instance import front_engine_logger
9
-
10
-
11
- class GIFSceneSettingUI(QWidget):
12
-
13
- def __init__(self):
14
- super().__init__()
15
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
16
- self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
17
- # GIF button
18
- self.gif_button = QPushButton(
19
- language_wrapper.language_word_dict.get("scene_add_gif")
20
- )
21
- self.gif_button.clicked.connect(self.add_gif)
22
- # Opacity slider
23
- self.opacity_slider = QSlider()
24
- self.opacity_slider.setMinimum(1)
25
- self.opacity_slider.setMaximum(100)
26
- self.opacity_slider.setTickInterval(1)
27
- self.opacity_slider.setValue(20)
28
- self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
29
- self.opacity_label = QLabel()
30
- self.opacity_label.setText(language_wrapper.language_word_dict.get("Opacity"))
31
- self.opacity_box_h_layout = QHBoxLayout()
32
- self.opacity_box_h_layout.addWidget(self.opacity_label)
33
- self.opacity_box_h_layout.addWidget(self.opacity_slider)
34
- # Speed slider
35
- self.speed_slider = QSlider()
36
- self.speed_slider.setMinimum(1)
37
- self.speed_slider.setMaximum(100)
38
- self.speed_slider.setTickInterval(1)
39
- self.speed_slider.setValue(100)
40
- self.speed_slider.setOrientation(Qt.Orientation.Horizontal)
41
- self.speed_label = QLabel()
42
- self.speed_label.setText(language_wrapper.language_word_dict.get("Speed"))
43
- self.speed_box_h_layout = QHBoxLayout()
44
- self.speed_box_h_layout.addWidget(self.speed_label)
45
- self.speed_box_h_layout.addWidget(self.speed_slider)
46
- # Position x input
47
- self.position_x_input_label = QLabel(language_wrapper.language_word_dict.get("position_x"))
48
- self.position_x_input = QLineEdit()
49
- self.position_x_input.setValidator(QIntValidator(0, 999999, self))
50
- self.position_x_layout = QHBoxLayout()
51
- self.position_x_layout.addWidget(self.position_x_input_label)
52
- self.position_x_layout.addWidget(self.position_x_input)
53
- # Position y input
54
- self.position_y_input_label = QLabel(language_wrapper.language_word_dict.get("position_y"))
55
- self.position_y_input = QLineEdit()
56
- self.position_y_input.setValidator(QIntValidator(0, 999999, self))
57
- self.position_y_layout = QHBoxLayout()
58
- self.position_y_layout.addWidget(self.position_y_input_label)
59
- self.position_y_layout.addWidget(self.position_y_input)
60
- # Set UI
61
- self.box_layout.addLayout(self.opacity_box_h_layout)
62
- self.box_layout.addLayout(self.speed_box_h_layout)
63
- self.box_layout.addLayout(self.position_x_layout)
64
- self.box_layout.addLayout(self.position_y_layout)
65
- self.box_layout.addWidget(self.gif_button)
66
- self.setLayout(self.box_layout)
67
-
68
- def add_gif(self) -> None:
69
- gif_path = choose_gif(self)
70
- if gif_path is not None:
71
- row_data = ["GIF", gif_path, "", "", str(self.opacity_slider.value()), str(self.speed_slider.value()),
72
- "", "", "", "", "", self.position_x_input.text(), self.position_y_input.text()]
73
- front_engine_logger.info(f"add gif, param: {row_data}")
74
- add_row_data(row_data)
@@ -1,77 +0,0 @@
1
- from typing import Dict, Callable
2
-
3
- from PySide6.QtCore import Qt
4
- from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QHeaderView, QTableView, QScrollArea
5
-
6
- from frontengine.show.scene.scene import SceneManager
7
- from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import tableview_model, output_scene_as_json, \
8
- load_scene_json
9
- from frontengine.utils.logging.loggin_instance import front_engine_logger
10
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
-
12
-
13
- class SceneControlSettingUI(QWidget):
14
-
15
- def __init__(self):
16
- super().__init__()
17
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
18
- self.grad_layout = QGridLayout()
19
- self.param_key_name_list = [
20
- "widget_type", "file_path", "url", "text", "opacity", "speed", "volume", "font_size", "play_rate",
21
- "web_setting_open_local_file", "web_setting_open_enable_input", "position_x", "position_y"
22
- ]
23
- # Use to build component
24
- self.scene = SceneManager()
25
- self.scene_component: Dict[str, Callable] = {
26
- "IMAGE": self.scene.add_image,
27
- "GIF": self.scene.add_gif,
28
- "SOUND": self.scene.add_sound,
29
- "TEXT": self.scene.add_text,
30
- "VIDEO": self.scene.add_video,
31
- "WEB": self.scene.add_web,
32
- "EXTEND_UI_FILE": self.scene.add_extend_ui_file
33
- }
34
- # Tableview
35
- self.scene_table_view = QTableView()
36
- self.scene_table_view_scroll_area = QScrollArea()
37
- self.scene_table_view_scroll_area.setWidgetResizable(True)
38
- self.scene_table_view_scroll_area.setViewportMargins(0, 0, 0, 0)
39
- self.scene_table_view_scroll_area.setWidget(self.scene_table_view)
40
- # Set resize as content
41
- self.scene_table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
42
- self.scene_table_view.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
43
- self.scene_table_view.setModel(tableview_model)
44
- # Scene output & input
45
- self.scene_output_button = QPushButton(language_wrapper.language_word_dict.get("scene_output"))
46
- self.scene_output_button.clicked.connect(output_scene_as_json)
47
- self.scene_input_button = QPushButton(language_wrapper.language_word_dict.get("scene_input"))
48
- self.scene_input_button.clicked.connect(load_scene_json)
49
- # Start button
50
- self.start_button = QPushButton(
51
- language_wrapper.language_word_dict.get("scene_setting_start_scene_button")
52
- )
53
- self.start_button.clicked.connect(self.start_scene)
54
- # Add to layout
55
- self.grad_layout.addWidget(self.scene_input_button, 0, 0)
56
- self.grad_layout.addWidget(self.scene_output_button, 0, 1)
57
- self.grad_layout.addWidget(self.start_button, 0, 2)
58
- self.grad_layout.addWidget(self.scene_table_view_scroll_area, 1, 0, -1, -1)
59
- self.setLayout(self.grad_layout)
60
-
61
- def close_scene(self) -> None:
62
- self.scene.widget_list.clear()
63
- self.scene.graphic_view.close()
64
-
65
- def start_scene(self) -> None:
66
- front_engine_logger.info("start_scene")
67
- for row in range(tableview_model.rowCount()):
68
- widget_type_text = tableview_model.item(row, 0).text()
69
- add_widget_function = self.scene_component.get(widget_type_text)
70
- param_dict: Dict[str, str] = dict()
71
- for column in range(1, tableview_model.columnCount()):
72
- param = tableview_model.item(row, column).text()
73
- if param != "":
74
- param_dict.update({self.param_key_name_list[column]: param})
75
- add_widget_function(param_dict)
76
- front_engine_logger.info(f"start_scene type: {widget_type_text}, param: {param_dict}")
77
- self.scene.show()
@@ -1,44 +0,0 @@
1
- from PySide6.QtCore import Qt
2
- from PySide6.QtWidgets import QWidget, QBoxLayout, QSlider, QLabel, QHBoxLayout, QPushButton
3
-
4
- from frontengine.ui.dialog.choose_file_dialog import choose_player_sound
5
- from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import add_row_data
6
- from frontengine.utils.logging.loggin_instance import front_engine_logger
7
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
8
-
9
-
10
- class SoundSceneSettingUI(QWidget):
11
-
12
- def __init__(self):
13
- super().__init__()
14
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
15
- self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
16
- # Volume
17
- self.volume_slider = QSlider()
18
- self.volume_slider.setMinimum(1)
19
- self.volume_slider.setMaximum(100)
20
- self.volume_slider.setTickInterval(1)
21
- self.volume_slider.setValue(100)
22
- self.volume_slider.setOrientation(Qt.Orientation.Horizontal)
23
- self.volume_label = QLabel()
24
- self.volume_label.setText(language_wrapper.language_word_dict.get("Volume"))
25
- self.volume_box_h_layout = QHBoxLayout()
26
- self.volume_box_h_layout.addWidget(self.volume_label)
27
- self.volume_box_h_layout.addWidget(self.volume_slider)
28
- # SOUND button
29
- self.sound_button = QPushButton(
30
- language_wrapper.language_word_dict.get("scene_add_sound")
31
- )
32
- self.sound_button.clicked.connect(self.add_sound)
33
- # Set UI
34
- self.box_layout.addLayout(self.volume_box_h_layout)
35
- self.box_layout.addWidget(self.sound_button)
36
- self.setLayout(self.box_layout)
37
-
38
- def add_sound(self) -> None:
39
- sound_path = choose_player_sound(self)
40
- if sound_path is not None:
41
- row_data = ["SOUND", sound_path, "", "", "", "", str(self.volume_slider.value()),
42
- "", "", "", "", "", ""]
43
- front_engine_logger.info(f"add sound, param: {row_data}")
44
- add_row_data(row_data)
@@ -1,65 +0,0 @@
1
- from pathlib import Path
2
- from typing import List
3
-
4
- from PySide6.QtGui import QStandardItemModel, QStandardItem
5
- from PySide6.QtWidgets import QMessageBox
6
-
7
- from frontengine.ui.dialog.choose_file_dialog import choose_scene_json
8
- from frontengine.ui.dialog.save_file_dialog import choose_file_get_save_filename
9
- from frontengine.utils.json.json_file import write_json, read_json
10
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
-
12
- tableview_model = QStandardItemModel()
13
-
14
- # Set horizontal label
15
- label_list = [
16
- language_wrapper.language_word_dict.get("scene_table_view_type"),
17
- language_wrapper.language_word_dict.get("scene_file_path"),
18
- language_wrapper.language_word_dict.get("url"),
19
- language_wrapper.language_word_dict.get("text"),
20
- language_wrapper.language_word_dict.get("Opacity"),
21
- language_wrapper.language_word_dict.get("Speed"),
22
- language_wrapper.language_word_dict.get("Volume"),
23
- language_wrapper.language_word_dict.get("Font size"),
24
- language_wrapper.language_word_dict.get("Play rate"),
25
- language_wrapper.language_word_dict.get("web_setting_open_local_file"),
26
- language_wrapper.language_word_dict.get("web_setting_open_enable_input"),
27
- language_wrapper.language_word_dict.get("position_x"),
28
- language_wrapper.language_word_dict.get("position_y"),
29
- ]
30
- tableview_model.setHorizontalHeaderLabels(label_list)
31
-
32
-
33
- def add_row_data(data_list: List):
34
- row = tableview_model.rowCount()
35
- for index, data in enumerate(data_list):
36
- tableview_model.setItem(row, index, QStandardItem(str(data)))
37
-
38
-
39
- def output_scene_as_json(parent_qt_widget):
40
- output_dict = dict()
41
- output_setting = list()
42
- for row in range(tableview_model.rowCount()):
43
- settings = list()
44
- for column in range(tableview_model.columnCount()):
45
- settings.append(tableview_model.item(row, column).text())
46
- output_setting.append(settings)
47
- output_dict.update({"settings": output_setting})
48
- file_path = choose_file_get_save_filename(parent_qt_widget)
49
- if file_path is not None and file_path != "":
50
- file_path = Path(file_path)
51
- file_path = file_path.with_suffix(".json")
52
- write_json(str(file_path), output_dict)
53
- else:
54
- choose_path_to_output_message_box = QMessageBox(parent_qt_widget)
55
- choose_path_to_output_message_box.setText(
56
- language_wrapper.language_word_dict.get("scene_choose_output_path_message_box"))
57
-
58
-
59
- def load_scene_json(parent_qt_widget):
60
- scene_file = choose_scene_json(parent_qt_widget)
61
- if scene_file is not None:
62
- scene_setting: dict = read_json(scene_file)
63
- scene_setting = scene_setting.get("settings")
64
- for setting in scene_setting:
65
- add_row_data(setting)