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.
- frontengine/__init__.py +13 -15
- frontengine/show/gif/paint_gif.py +4 -2
- frontengine/show/image/paint_image.py +4 -2
- frontengine/show/scene/extend_graphic_scene.py +0 -1
- frontengine/show/scene/extend_graphic_view.py +2 -1
- frontengine/show/scene/scene.py +23 -41
- frontengine/show/sound_player/sound_effect.py +1 -2
- frontengine/show/sound_player/sound_player.py +1 -2
- frontengine/show/text/draw_text.py +31 -4
- frontengine/show/video/video_player.py +1 -2
- frontengine/show/web/webview.py +1 -3
- frontengine/{ui/main/system_tray → system_tray}/extend_system_tray.py +1 -3
- frontengine/ui/dialog/choose_file_dialog.py +19 -43
- frontengine/ui/{main/main_ui.py → main_ui.py} +39 -44
- frontengine/ui/menu/help_menu.py +25 -0
- frontengine/ui/menu/how_to_menu.py +25 -0
- frontengine/ui/{main → menu}/language_menu.py +10 -10
- frontengine/ui/{setting → page}/control_center/control_center_ui.py +11 -18
- frontengine/ui/{setting → page}/gif/gif_setting_ui.py +20 -8
- frontengine/ui/{setting → page}/image/image_setting_ui.py +19 -7
- frontengine/ui/page/scene_setting/scene_manager.py +96 -0
- frontengine/ui/page/scene_setting/scene_page/gif.py +102 -0
- frontengine/ui/page/scene_setting/scene_page/image.py +83 -0
- frontengine/ui/page/scene_setting/scene_page/sound.py +84 -0
- frontengine/ui/page/scene_setting/scene_page/text.py +93 -0
- frontengine/ui/page/scene_setting/scene_page/video.py +122 -0
- frontengine/ui/page/scene_setting/scene_page/web.py +66 -0
- frontengine/ui/page/scene_setting/scene_setting_ui.py +55 -0
- frontengine/ui/{setting → page}/sound_player/sound_player_setting_ui.py +0 -1
- frontengine/ui/{setting → page}/text/text_setting_ui.py +39 -11
- frontengine/ui/page/utils.py +23 -0
- frontengine/ui/{setting → page}/video/video_setting_ui.py +23 -7
- frontengine/ui/{setting → page}/web/web_setting_ui.py +19 -7
- frontengine/user_setting/scene_setting.py +34 -0
- frontengine/user_setting/user_setting_file.py +2 -1
- frontengine/utils/browser/browser.py +5 -0
- frontengine/utils/multi_language/english.py +14 -2
- frontengine/utils/multi_language/traditional_chinese.py +15 -2
- {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/METADATA +3 -50
- frontengine-0.0.57.dist-info/RECORD +91 -0
- {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/WHEEL +1 -1
- frontengine/show/chat/chat_toast.py +0 -55
- frontengine/show/image_generation/image_generation_show.py +0 -43
- frontengine/ui/setting/chat/chat_model.py +0 -65
- frontengine/ui/setting/chat/chat_scene_input.py +0 -72
- frontengine/ui/setting/chat/chat_scene_setting.py +0 -187
- frontengine/ui/setting/chat/chatthread.py +0 -78
- frontengine/ui/setting/chat/speech_to_text.py +0 -70
- frontengine/ui/setting/image_generation/generation_image_thread.py +0 -32
- frontengine/ui/setting/image_generation/image_generation_input.py +0 -63
- frontengine/ui/setting/scene_setting/scene_setting_ui.py +0 -48
- frontengine/ui/setting/scene_setting/scene_tabs/Image.py +0 -61
- frontengine/ui/setting/scene_setting/scene_tabs/gif.py +0 -74
- frontengine/ui/setting/scene_setting/scene_tabs/scene_control.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/sound.py +0 -44
- frontengine/ui/setting/scene_setting/scene_tabs/tableview_model.py +0 -65
- frontengine/ui/setting/scene_setting/scene_tabs/text.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/ui.py +0 -56
- frontengine/ui/setting/scene_setting/scene_tabs/video.py +0 -88
- frontengine/ui/setting/scene_setting/scene_tabs/web.py +0 -74
- frontengine/ui/setting/text/__init__.py +0 -0
- frontengine/ui/setting/video/__init__.py +0 -0
- frontengine/ui/setting/web/__init__.py +0 -0
- frontengine/user_setting/gif/__init__.py +0 -0
- frontengine/user_setting/gif/gif_setting.py +0 -5
- frontengine/user_setting/image/__init__.py +0 -0
- frontengine/user_setting/image/image_setting.py +0 -4
- frontengine/user_setting/sound/__init__.py +0 -0
- frontengine/user_setting/sound/sound_setting.py +0 -4
- frontengine/user_setting/text/__init__.py +0 -0
- frontengine/user_setting/text/text_setting.py +0 -5
- frontengine/user_setting/video/__init__.py +0 -0
- frontengine/user_setting/video/video_setting.py +0 -6
- frontengine/user_setting/web/__init__.py +0 -0
- frontengine/user_setting/web/web_setting.py +0 -4
- frontengine-0.0.55.dist-info/RECORD +0 -112
- /frontengine/{show/chat → system_tray}/__init__.py +0 -0
- /frontengine/{show/image_generation → ui/menu}/__init__.py +0 -0
- /frontengine/ui/{main → page}/__init__.py +0 -0
- /frontengine/ui/{main/system_tray → page/control_center}/__init__.py +0 -0
- /frontengine/ui/{setting → page/gif}/__init__.py +0 -0
- /frontengine/ui/{setting/chat → page/image}/__init__.py +0 -0
- /frontengine/ui/{setting/control_center → page/scene_setting}/__init__.py +0 -0
- /frontengine/ui/{setting/gif → page/scene_setting/scene_page}/__init__.py +0 -0
- /frontengine/ui/{setting/image → page/sound_player}/__init__.py +0 -0
- /frontengine/ui/{setting/image_generation → page/text}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting → page/video}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting/scene_tabs → page/web}/__init__.py +0 -0
- /frontengine/{ui/setting/sound_player → utils/browser}/__init__.py +0 -0
- {frontengine-0.0.55.dist-info → frontengine-0.0.57.dist-info}/LICENSE +0 -0
- {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)
|