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.
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_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/METADATA +4 -51
  40. frontengine_dev-0.0.58.dist-info/RECORD +91 -0
  41. {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.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_dev-0.0.56.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_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/LICENSE +0 -0
  91. {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/top_level.txt +0 -0
@@ -1,187 +0,0 @@
1
- from typing import Dict, Callable
2
-
3
- from PySide6.QtCore import QTimer
4
- from PySide6.QtGui import QFontDatabase, Qt
5
- from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QScrollArea, QComboBox, QLabel, \
6
- QPlainTextEdit, QLineEdit, QBoxLayout, QCheckBox
7
-
8
- from frontengine.show.scene.scene import SceneManager
9
- from frontengine.ui.setting.chat.chat_model import load_scene_json, chat_model
10
- from frontengine.ui.setting.chat.chat_scene_input import ChatInputDialog
11
- from frontengine.ui.setting.chat.chatthread import ChatThread, DELEGATE_CHAT, PANEL_MESSAGE_QUEUE
12
- from frontengine.ui.setting.chat.speech_to_text import ChatSpeechToText
13
- from frontengine.utils.logging.loggin_instance import front_engine_logger
14
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
15
-
16
-
17
- class ChatSceneUI(QWidget):
18
-
19
- def __init__(self):
20
- super().__init__()
21
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
22
- self.voice_input = None
23
- self.grid_layout = QGridLayout()
24
- self.grid_layout.setContentsMargins(0, 0, 0, 0)
25
- # Init
26
- self.chat_input = ChatInputDialog()
27
- self.chat_list = list()
28
- self.choose_style_combobox = QComboBox()
29
- self.choose_style_combobox.addItems([
30
- language_wrapper.language_word_dict.get("chat_scene_creative"),
31
- language_wrapper.language_word_dict.get("chat_scene_precise"),
32
- language_wrapper.language_word_dict.get("chat_scene_balanced")
33
- ])
34
- self.choose_style_combobox.currentTextChanged.connect(self.change_style)
35
- self.param_key_name_list = [
36
- "widget_type", "file_path", "url", "text", "opacity", "speed", "volume", "font_size", "play_rate",
37
- "web_setting_open_local_file", "web_setting_open_enable_input", "position_x", "position_y"
38
- ]
39
- # New topic button
40
- self.new_topic_button = QPushButton(language_wrapper.language_word_dict.get("chat_scene_new_topic"))
41
- self.new_topic_button.clicked.connect(self.new_topic)
42
- # Start button
43
- self.start_button = QPushButton(language_wrapper.language_word_dict.get("chat_scene_start_button"))
44
- self.start_button.clicked.connect(self.start_chat)
45
- # Chat panel
46
- self.chat_panel = QPlainTextEdit()
47
- self.chat_panel.setLineWrapMode(self.chat_panel.LineWrapMode.NoWrap)
48
- self.chat_panel.setReadOnly(True)
49
- self.chat_panel_scroll_area = QScrollArea()
50
- self.chat_panel_scroll_area.setWidgetResizable(True)
51
- self.chat_panel_scroll_area.setViewportMargins(0, 0, 0, 0)
52
- self.chat_panel_scroll_area.setWidget(self.chat_panel)
53
- self.chat_panel.setFont(QFontDatabase.font(self.font().family(), "", 16))
54
- # Scene
55
- self.scene = SceneManager()
56
- self.scene_component: Dict[str, Callable] = {
57
- "IMAGE": self.scene.add_image,
58
- "GIF": self.scene.add_gif,
59
- "SOUND": self.scene.add_sound,
60
- "TEXT": self.scene.add_text,
61
- "VIDEO": self.scene.add_video,
62
- "WEB": self.scene.add_web,
63
- "EXTEND_UI_FILE": self.scene.add_extend_ui_file
64
- }
65
- # Font size combobox
66
- self.font_size_label = QLabel(language_wrapper.language_word_dict.get("Font size"))
67
- self.font_size_combobox = QComboBox()
68
- for font_size in range(2, 101, 2):
69
- self.font_size_combobox.addItem(str(font_size))
70
- self.font_size_combobox.setCurrentText("16")
71
- self.font_size_combobox.currentTextChanged.connect(self.update_panel_text_size)
72
- # Close delay combobox
73
- self.close_delay_label = QLabel(language_wrapper.language_word_dict.get("close_delay"))
74
- self.close_delay_combobox = QComboBox()
75
- for sec in range(1, 101, 1):
76
- self.close_delay_combobox.addItem(str(sec))
77
- self.close_delay_combobox.setCurrentText("10")
78
- # Load scene
79
- self.scene_input_button = QPushButton(language_wrapper.language_word_dict.get("scene_input"))
80
- self.scene_input_button.clicked.connect(lambda: load_scene_json(self))
81
- # Locale box
82
- self.locale_label = QLabel(language_wrapper.language_word_dict.get("country_code"))
83
- self.locale_input = QLineEdit()
84
- self.locale_input.setText("zh-tw")
85
- self.local_box = QBoxLayout(QBoxLayout.Direction.LeftToRight)
86
- self.local_box.addWidget(self.locale_label)
87
- self.local_box.addWidget(self.locale_input)
88
- # Start voice input
89
- self.start_voice_input_button = QPushButton(
90
- language_wrapper.language_word_dict.get("start_chat_voice_input_ui"))
91
- self.start_voice_input_button.clicked.connect(self.start_voice_input)
92
- # Show toast checkbox
93
- self.show_toast_checkbox_label = QLabel(
94
- language_wrapper.language_word_dict.get("should_we_show_toast"))
95
- self.show_toast_checkbox = QCheckBox()
96
- # Add to layout
97
- self.grid_layout.addWidget(self.choose_style_combobox, 0, 0)
98
- self.grid_layout.addWidget(self.close_delay_label, 0, 1)
99
- self.grid_layout.addWidget(self.close_delay_combobox, 0, 2)
100
- self.grid_layout.addWidget(self.font_size_label, 0, 3)
101
- self.grid_layout.addWidget(self.font_size_combobox, 0, 4)
102
- self.grid_layout.addLayout(self.local_box, 0, 5)
103
- self.grid_layout.addWidget(self.show_toast_checkbox_label, 0, 6)
104
- self.grid_layout.addWidget(self.show_toast_checkbox, 0, 7)
105
- self.grid_layout.addWidget(self.new_topic_button, 0, 8)
106
- self.grid_layout.addWidget(self.scene_input_button, 0, 9)
107
- self.grid_layout.addWidget(self.start_voice_input_button, 0, 10)
108
- self.grid_layout.addWidget(self.start_button, 0, 11)
109
- self.grid_layout.addWidget(self.chat_panel_scroll_area, 1, 0, -1, -1)
110
- # update panel timer
111
- self.update_panel_timer = QTimer()
112
- self.update_panel_timer.setInterval(10)
113
- self.update_panel_timer.timeout.connect(self.update_panel)
114
- self.update_panel_timer.start()
115
- self.setLayout(self.grid_layout)
116
-
117
- def update_panel(self):
118
- if not PANEL_MESSAGE_QUEUE.empty():
119
- text = PANEL_MESSAGE_QUEUE.get_nowait()
120
- self.chat_panel.appendPlainText(text)
121
- self.chat_panel.appendPlainText("\n")
122
-
123
- def update_panel_text_size(self):
124
- self.chat_panel.setFont(
125
- QFontDatabase.font(self.font().family(), "", int(self.font_size_combobox.currentText())))
126
-
127
- def start_chat(self) -> None:
128
- self.chat_input = ChatInputDialog(
129
- close_time=int(self.close_delay_combobox.currentText()) * 1000,
130
- font_size=int(self.font_size_combobox.currentText()),
131
- show_toast=self.show_toast_checkbox.isChecked()
132
- )
133
- self.chat_input.show()
134
- self.chat_input.send_text_button.clicked.connect(self.send_chat)
135
- if chat_model.rowCount() > 0:
136
- self.start_scene()
137
-
138
- def start_voice_input(self):
139
- self.voice_input = ChatSpeechToText()
140
- self.voice_input.show()
141
- self.voice_input.send_text_button.clicked.connect(self.send_voice_chat)
142
-
143
- def send_voice_chat(self):
144
- chat_thread = ChatThread(self.voice_input.voice_text_edit.text(), self.locale_input.text())
145
- chat_thread.start()
146
-
147
- def send_chat(self):
148
- chat_thread = ChatThread(self.chat_input.chat_input.toPlainText(), self.locale_input.text())
149
- chat_thread.start()
150
-
151
- def change_style(self):
152
- DELEGATE_CHAT.change_style(self.choose_style_combobox.currentText())
153
-
154
- def new_topic(self):
155
- DELEGATE_CHAT.new_topic(self.chat_panel)
156
- self.chat_input.close()
157
-
158
- def close_chat_ui(self):
159
- if self.chat_input.isVisible():
160
- self.chat_input.close()
161
- self.chat_input = None
162
- self.chat_list.clear()
163
- self.close_scene()
164
-
165
- def close_scene(self) -> None:
166
- self.scene.widget_list.clear()
167
- if self.scene:
168
- if self.scene.graphic_view:
169
- self.scene.graphic_view.close()
170
-
171
- def start_scene(self) -> None:
172
- front_engine_logger.info("start_scene")
173
- for row in range(chat_model.rowCount()):
174
- widget_type_text = chat_model.item(row, 0).text()
175
- add_widget_function = self.scene_component.get(widget_type_text)
176
- param_dict: Dict[str, str] = dict()
177
- for column in range(1, chat_model.columnCount()):
178
- param = chat_model.item(row, column).text()
179
- if param != "":
180
- param_dict.update({self.param_key_name_list[column]: param})
181
- add_widget_function(param_dict)
182
- front_engine_logger.info(f"start_scene type: {widget_type_text}, param: {param_dict}")
183
- self.scene.show()
184
-
185
- def close(self) -> bool:
186
- self.close_chat_ui()
187
- return super().close()
@@ -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)