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
frontengine/__init__.py
CHANGED
@@ -7,26 +7,24 @@ from frontengine.show.sound_player.sound_player import SoundPlayer
|
|
7
7
|
from frontengine.show.text.draw_text import TextWidget
|
8
8
|
from frontengine.show.video.video_player import VideoWidget
|
9
9
|
from frontengine.show.web.webview import WebWidget
|
10
|
-
from frontengine.ui.
|
10
|
+
from frontengine.ui.main_ui import start_front_engine
|
11
11
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
12
|
-
from frontengine.ui.
|
13
|
-
from frontengine.ui.
|
14
|
-
from frontengine.ui.
|
15
|
-
from frontengine.ui.
|
16
|
-
from frontengine.ui.
|
17
|
-
from frontengine.ui.
|
18
|
-
from frontengine.ui.
|
19
|
-
from frontengine.ui.
|
20
|
-
from frontengine.ui.
|
21
|
-
from frontengine.ui.
|
22
|
-
from frontengine.ui.setting.chat.chat_scene_setting import ChatSceneUI
|
23
|
-
from frontengine.ui.main.main_ui import FrontEngine_EXTEND_TAB
|
12
|
+
from frontengine.ui.page.text.text_setting_ui import TextSettingUI
|
13
|
+
from frontengine.ui.page.web.web_setting_ui import WEBSettingUI
|
14
|
+
from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
|
15
|
+
from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
|
16
|
+
from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
|
17
|
+
from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
|
18
|
+
from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
19
|
+
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
20
|
+
from frontengine.ui.main_ui import FrontEngineMainUI
|
21
|
+
from frontengine.ui.main_ui import FrontEngine_EXTEND_TAB
|
24
22
|
from frontengine.utils.redirect_manager.redirect_manager_class import RedirectManager
|
25
23
|
|
26
24
|
__all__ = [
|
27
25
|
"start_front_engine", "GifWidget", "SoundPlayer", "SoundEffectWidget", "TextWidget",
|
28
26
|
"WebWidget", "ImageWidget", "VideoWidget", "language_wrapper", "load_extend_ui_file", "load_ui_file",
|
29
27
|
"TextSettingUI", "WEBSettingUI", "GIFSettingUI", "ImageSettingUI", "SoundPlayerSettingUI",
|
30
|
-
"VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
|
31
|
-
"
|
28
|
+
"VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
|
29
|
+
"FrontEngine_EXTEND_TAB", "RedirectManager"
|
32
30
|
]
|
@@ -10,8 +10,10 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
10
10
|
|
11
11
|
class GifWidget(QWidget):
|
12
12
|
|
13
|
-
def __init__(self, gif_image_path: str):
|
13
|
+
def __init__(self, gif_image_path: str, draw_location_x: int = 0, draw_location_y: int = 0):
|
14
14
|
super().__init__()
|
15
|
+
self.draw_location_x = draw_location_x
|
16
|
+
self.draw_location_y = draw_location_y
|
15
17
|
self.opacity: float = 0.2
|
16
18
|
self.speed: int = 100
|
17
19
|
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
@@ -61,7 +63,7 @@ class GifWidget(QWidget):
|
|
61
63
|
painter.setOpacity(self.opacity)
|
62
64
|
painter.drawPixmap(
|
63
65
|
QRect(
|
64
|
-
self.
|
66
|
+
self.draw_location_x, self.draw_location_y, self.width(), self.height()
|
65
67
|
),
|
66
68
|
current_gif_frame
|
67
69
|
)
|
@@ -10,8 +10,10 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
10
10
|
|
11
11
|
class ImageWidget(QWidget):
|
12
12
|
|
13
|
-
def __init__(self, image_path: str):
|
13
|
+
def __init__(self, image_path: str, draw_location_x: int = 0, draw_location_y: int = 0):
|
14
14
|
super().__init__()
|
15
|
+
self.draw_location_x = draw_location_x
|
16
|
+
self.draw_location_y = draw_location_y
|
15
17
|
self.opacity: float = 0.2
|
16
18
|
self.image_path: Path = Path(image_path)
|
17
19
|
if self.image_path.exists() and self.image_path.is_file():
|
@@ -48,7 +50,7 @@ class ImageWidget(QWidget):
|
|
48
50
|
painter = QPainter(self)
|
49
51
|
painter.setOpacity(self.opacity)
|
50
52
|
painter.drawImage(
|
51
|
-
QRect(self.
|
53
|
+
QRect(self.draw_location_x, self.draw_location_y, self.width(), self.height()),
|
52
54
|
self.image)
|
53
55
|
painter.restore()
|
54
56
|
|
@@ -12,6 +12,7 @@ class ExtendGraphicView(QGraphicsView):
|
|
12
12
|
Qt.WindowType.WindowType_Mask |
|
13
13
|
Qt.WindowType.Tool
|
14
14
|
)
|
15
|
+
self.setStyleSheet("background:transparent")
|
15
16
|
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
16
17
|
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
17
18
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
@@ -23,7 +24,7 @@ class ExtendGraphicView(QGraphicsView):
|
|
23
24
|
pass
|
24
25
|
else:
|
25
26
|
current_position = event.position()
|
26
|
-
scene_position = self.mapToScene(QPoint(current_position.x(), current_position.y()))
|
27
|
+
scene_position = self.mapToScene(QPoint(int(current_position.x()), int(current_position.y())))
|
27
28
|
view_width = self.viewport().width()
|
28
29
|
view_height = self.viewport().height()
|
29
30
|
horizon_scale = current_position.x() / view_width
|
frontengine/show/scene/scene.py
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
from typing import List, Dict
|
2
2
|
|
3
|
-
from PySide6.QtWidgets import QGraphicsProxyWidget
|
3
|
+
from PySide6.QtWidgets import QGraphicsProxyWidget
|
4
|
+
from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
|
4
5
|
|
5
6
|
from frontengine.show.gif.paint_gif import GifWidget
|
6
7
|
from frontengine.show.image.paint_image import ImageWidget
|
7
|
-
from frontengine.show.load.load_someone_make_ui import load_ui_file, read_extend_ui
|
8
8
|
from frontengine.show.scene.extend_graphic_scene import ExtendGraphicScene
|
9
|
-
from frontengine.show.scene.extend_graphic_view import ExtendGraphicView
|
10
9
|
from frontengine.show.sound_player.sound_player import SoundPlayer
|
11
10
|
from frontengine.show.text.draw_text import TextWidget
|
12
11
|
from frontengine.show.video.video_player import VideoWidget
|
@@ -20,25 +19,25 @@ class SceneManager(object):
|
|
20
19
|
):
|
21
20
|
super().__init__()
|
22
21
|
self.graphic_scene = ExtendGraphicScene()
|
23
|
-
self.graphic_view = ExtendGraphicView(self.graphic_scene)
|
24
22
|
self.widget_list: List[QGraphicsProxyWidget] = list()
|
23
|
+
self.view_list: List[ExtendGraphicView] = []
|
25
24
|
|
26
|
-
def add_image(self,
|
27
|
-
image_path =
|
25
|
+
def add_image(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
26
|
+
image_path = setting_dict.get("file_path")
|
28
27
|
image_widget = ImageWidget(image_path)
|
29
|
-
opacity = float(
|
28
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
30
29
|
opacity = opacity if opacity is not None else 0.2
|
31
30
|
image_widget.set_ui_variable(opacity)
|
32
31
|
proxy_widget = self.graphic_scene.addWidget(image_widget)
|
33
32
|
self.widget_list.append(proxy_widget)
|
34
33
|
return proxy_widget
|
35
34
|
|
36
|
-
def add_gif(self,
|
37
|
-
gif_image_path =
|
35
|
+
def add_gif(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
36
|
+
gif_image_path = setting_dict.get("file_path")
|
38
37
|
gif_widget = GifWidget(gif_image_path)
|
39
|
-
speed = int(
|
38
|
+
speed = int(setting_dict.get("speed"))
|
40
39
|
speed = speed if speed is not None else 100
|
41
|
-
opacity = float(
|
40
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
42
41
|
opacity = opacity if opacity is not None else 0.2
|
43
42
|
gif_widget.set_gif_variable(speed)
|
44
43
|
gif_widget.set_ui_variable(opacity)
|
@@ -46,30 +45,32 @@ class SceneManager(object):
|
|
46
45
|
self.widget_list.append(proxy_widget)
|
47
46
|
return proxy_widget
|
48
47
|
|
49
|
-
def add_sound(self,
|
50
|
-
sound_path =
|
48
|
+
def add_sound(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
49
|
+
sound_path = setting_dict.get("file_path")
|
51
50
|
sound_widget = SoundPlayer(sound_path)
|
52
|
-
volume = float(
|
51
|
+
volume = float(setting_dict.get("volume")) / 100
|
53
52
|
volume = volume if volume is not None else 1
|
54
53
|
sound_widget.set_player_variable(volume)
|
55
54
|
proxy_widget = self.graphic_scene.addWidget(sound_widget)
|
56
55
|
self.widget_list.append(proxy_widget)
|
57
56
|
return proxy_widget
|
58
57
|
|
59
|
-
def add_text(self,
|
60
|
-
text =
|
58
|
+
def add_text(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
59
|
+
text = setting_dict.get("text")
|
61
60
|
text_widget = TextWidget(text)
|
62
|
-
font_size = int(
|
61
|
+
font_size = int(setting_dict.get("font_size"))
|
63
62
|
font_size = font_size if font_size is not None else 100
|
64
|
-
opacity = float(
|
63
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
65
64
|
opacity = opacity if opacity is not None else 0.2
|
65
|
+
alignment = setting_dict.get("alignment", "Center")
|
66
66
|
text_widget.set_ui_variable(opacity)
|
67
67
|
text_widget.set_font_variable(font_size)
|
68
|
+
text_widget.set_alignment(alignment)
|
68
69
|
proxy_widget = self.graphic_scene.addWidget(text_widget)
|
69
70
|
self.widget_list.append(proxy_widget)
|
70
71
|
return proxy_widget
|
71
72
|
|
72
|
-
def add_video(self, video_setting: Dict
|
73
|
+
def add_video(self, video_setting: Dict) -> QGraphicsProxyWidget:
|
73
74
|
video_path = video_setting.get("file_path")
|
74
75
|
video_widget = VideoWidget(video_path)
|
75
76
|
opacity = float(video_setting.get("opacity")) / 100
|
@@ -84,31 +85,12 @@ class SceneManager(object):
|
|
84
85
|
self.widget_list.append(proxy_widget)
|
85
86
|
return proxy_widget
|
86
87
|
|
87
|
-
def add_web(self,
|
88
|
-
url =
|
88
|
+
def add_web(self, setting_dict: Dict) -> QGraphicsProxyWidget:
|
89
|
+
url = setting_dict.get("url")
|
89
90
|
web_widget = WebWidget(url)
|
90
|
-
opacity = float(
|
91
|
+
opacity = float(setting_dict.get("opacity")) / 100
|
91
92
|
opacity = opacity if opacity is not None else 0.2
|
92
|
-
enable_input = web_setting.get("enable_input")
|
93
|
-
enable_input = enable_input if enable_input is not None else False
|
94
93
|
web_widget.set_ui_variable(opacity)
|
95
|
-
web_widget.set_ui_window_flag(enable_input=enable_input)
|
96
94
|
proxy_widget = self.graphic_scene.addWidget(web_widget)
|
97
95
|
self.widget_list.append(proxy_widget)
|
98
96
|
return proxy_widget
|
99
|
-
|
100
|
-
def add_extend_ui_file(self, ui_setting_dict: Dict[str, str]) -> QGraphicsProxyWidget:
|
101
|
-
ui_path = ui_setting_dict.get("file_path")
|
102
|
-
extend_widget = load_ui_file(ui_path)
|
103
|
-
proxy_widget = self.graphic_scene.addWidget(extend_widget)
|
104
|
-
self.widget_list.append(proxy_widget)
|
105
|
-
return proxy_widget
|
106
|
-
|
107
|
-
def add_extend_ui(self, ui: QWidget) -> QGraphicsProxyWidget:
|
108
|
-
extend_widget = read_extend_ui(ui)
|
109
|
-
proxy_widget = self.graphic_scene.addWidget(extend_widget)
|
110
|
-
self.widget_list.append(proxy_widget)
|
111
|
-
return proxy_widget
|
112
|
-
|
113
|
-
def show(self):
|
114
|
-
self.graphic_view.showMaximized()
|
@@ -26,8 +26,7 @@ class SoundEffectWidget(QWidget):
|
|
26
26
|
self.sound_path = Path(sound_path)
|
27
27
|
if self.sound_path.exists() and self.sound_path.is_file():
|
28
28
|
# QUrl non ascii path encode, Avoid read wrong path and file name
|
29
|
-
source = QUrl.fromLocalFile(str(self.sound_path)
|
30
|
-
source = source.fromEncoded(source.toEncoded())
|
29
|
+
source = QUrl.fromLocalFile(str(self.sound_path))
|
31
30
|
print(f"Origin file {str(self.sound_path)}")
|
32
31
|
self.sound_player.setSource(source)
|
33
32
|
# -2 means loop forever
|
@@ -28,8 +28,7 @@ class SoundPlayer(QWidget):
|
|
28
28
|
self.media_player.setAudioOutput(self.media_player_audio)
|
29
29
|
self.media_player_audio = self.media_player.audioOutput()
|
30
30
|
# QUrl non ascii path encode, Avoid read wrong path and file name
|
31
|
-
source = QUrl.fromLocalFile(str(self.sound_path)
|
32
|
-
source = source.fromEncoded(source.toEncoded())
|
31
|
+
source = QUrl.fromLocalFile(str(self.sound_path))
|
33
32
|
print(f"Origin file {str(self.sound_path)}")
|
34
33
|
self.media_player.setSource(source)
|
35
34
|
self.media_player.setLoops(-1)
|
@@ -8,13 +8,26 @@ from PySide6.QtWidgets import QWidget
|
|
8
8
|
|
9
9
|
class TextWidget(QWidget):
|
10
10
|
|
11
|
-
def __init__(self, text: str
|
11
|
+
def __init__(self, text: str, draw_location_x: int = 0, draw_location_y: int = 0,
|
12
|
+
alignment: str = "Center"):
|
12
13
|
super().__init__()
|
14
|
+
self.draw_location_x = draw_location_x
|
15
|
+
self.draw_location_y = draw_location_y
|
13
16
|
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
14
17
|
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
15
18
|
self.text = text
|
16
19
|
self.font_size = 100
|
17
20
|
self.opacity = 0.2
|
21
|
+
if alignment == "TopLeft":
|
22
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
|
23
|
+
elif alignment == "TopRight":
|
24
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
|
25
|
+
elif alignment == "BottomLeft":
|
26
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
|
27
|
+
elif alignment == "BottomRight":
|
28
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
|
29
|
+
else:
|
30
|
+
self.alignment = Qt.AlignmentFlag.AlignCenter
|
18
31
|
self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
|
19
32
|
# Set Icon
|
20
33
|
self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
|
@@ -38,6 +51,21 @@ class TextWidget(QWidget):
|
|
38
51
|
def set_ui_variable(self, opacity: float = 0.2) -> None:
|
39
52
|
self.opacity = opacity
|
40
53
|
|
54
|
+
def set_font(self):
|
55
|
+
self.draw_font = QFontDatabase.font(self.font().family(), "", self.font_size)
|
56
|
+
|
57
|
+
def set_alignment(self, alignment: str = "Center") -> None:
|
58
|
+
if alignment == "TopLeft":
|
59
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)
|
60
|
+
elif alignment == "TopRight":
|
61
|
+
self.alignment = (Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignRight)
|
62
|
+
elif alignment == "BottomLeft":
|
63
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignLeft)
|
64
|
+
elif alignment == "BottomRight":
|
65
|
+
self.alignment = (Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
|
66
|
+
else:
|
67
|
+
self.alignment = Qt.AlignmentFlag.AlignCenter
|
68
|
+
|
41
69
|
def paintEvent(self, event) -> None:
|
42
70
|
painter = QPainter(self)
|
43
71
|
painter.setFont(
|
@@ -46,8 +74,8 @@ class TextWidget(QWidget):
|
|
46
74
|
painter.setPen(Qt.GlobalColor.black)
|
47
75
|
painter.setOpacity(self.opacity)
|
48
76
|
painter.drawText(
|
49
|
-
QRect(self.
|
50
|
-
|
77
|
+
QRect(self.draw_location_x, self.draw_location_y, self.width(), self.height()),
|
78
|
+
int(self.alignment),
|
51
79
|
self.text
|
52
80
|
)
|
53
81
|
painter.restore()
|
@@ -60,4 +88,3 @@ class TextWidget(QWidget):
|
|
60
88
|
|
61
89
|
def mouseGrabber(self) -> None:
|
62
90
|
super().mouseGrabber()
|
63
|
-
|
@@ -27,8 +27,7 @@ class VideoWidget(QVideoWidget):
|
|
27
27
|
self.video_file_path = str(self.video_path)
|
28
28
|
self.audioOutput = QAudioOutput()
|
29
29
|
# QUrl non ascii path encode, Avoid read wrong path and file name
|
30
|
-
source = QUrl.fromLocalFile(str(self.video_file_path)
|
31
|
-
source = source.fromEncoded(source.toEncoded())
|
30
|
+
source = QUrl.fromLocalFile(str(self.video_file_path))
|
32
31
|
print(f"Origin file {str(self.video_file_path)}")
|
33
32
|
self.media_player.setSource(source)
|
34
33
|
self.media_player.setVideoOutput(self)
|
frontengine/show/web/webview.py
CHANGED
@@ -21,8 +21,7 @@ class WebWidget(QWebEngineView):
|
|
21
21
|
self.web_url = Path(url)
|
22
22
|
if self.web_url.exists() and self.web_url.is_file():
|
23
23
|
# QUrl non ascii path encode, Avoid read wrong path and file name
|
24
|
-
source = QUrl.fromLocalFile(str(self.web_url)
|
25
|
-
source = source.fromEncoded(source.toEncoded())
|
24
|
+
source = QUrl.fromLocalFile(str(self.web_url))
|
26
25
|
print(f"Origin file {str(self.web_url)}")
|
27
26
|
self.load(source)
|
28
27
|
else:
|
@@ -64,4 +63,3 @@ class WebWidget(QWebEngineView):
|
|
64
63
|
|
65
64
|
def mouseGrabber(self) -> None:
|
66
65
|
super().mouseGrabber()
|
67
|
-
|
@@ -3,8 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
|
5
5
|
if TYPE_CHECKING:
|
6
|
-
from frontengine.ui.
|
7
|
-
import sys
|
6
|
+
from frontengine.ui.main_ui import FrontEngineMainUI
|
8
7
|
|
9
8
|
from PySide6.QtGui import QAction
|
10
9
|
from PySide6.QtWidgets import QSystemTrayIcon, QMenu
|
@@ -34,7 +33,6 @@ class ExtendSystemTray(QSystemTrayIcon):
|
|
34
33
|
def close_all(self):
|
35
34
|
self.setVisible(False)
|
36
35
|
self.main_window.close()
|
37
|
-
sys.exit(0)
|
38
36
|
|
39
37
|
def clicked(self, reason):
|
40
38
|
if reason == self.ActivationReason.DoubleClick:
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import shutil
|
2
1
|
from pathlib import Path
|
3
2
|
|
4
3
|
from PySide6.QtWidgets import QMessageBox, QWidget, QFileDialog
|
@@ -8,7 +7,7 @@ from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
8
7
|
|
9
8
|
|
10
9
|
def choose_file(
|
11
|
-
trigger_ui: QWidget, file_filter: str,
|
10
|
+
trigger_ui: QWidget, file_filter: str, extensions: list, warning_message: str) -> str:
|
12
11
|
front_engine_logger.info("choose_file")
|
13
12
|
file_path = QFileDialog().getOpenFileName(
|
14
13
|
parent=trigger_ui,
|
@@ -16,79 +15,56 @@ def choose_file(
|
|
16
15
|
filter=file_filter
|
17
16
|
)[0]
|
18
17
|
file_path = Path(file_path)
|
19
|
-
if file_path.is_file() and file_path.exists():
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
new_file_path = str(Path(f"{file_save_path}/{file_path.name}"))
|
28
|
-
return new_file_path
|
29
|
-
else:
|
30
|
-
message_box = QMessageBox(trigger_ui)
|
31
|
-
message_box.setText(
|
32
|
-
warning_message
|
33
|
-
)
|
34
|
-
message_box.show()
|
18
|
+
if file_path.is_file() and file_path.exists() and file_path.suffix.lower() in extensions:
|
19
|
+
return str(file_path)
|
20
|
+
else:
|
21
|
+
message_box = QMessageBox(trigger_ui)
|
22
|
+
message_box.setText(
|
23
|
+
warning_message
|
24
|
+
)
|
25
|
+
message_box.show()
|
35
26
|
|
36
27
|
|
37
28
|
def choose_gif(
|
38
|
-
trigger_ui: QWidget, file_filter: str = "GIF WEBP (*.gif;*.webp)",
|
39
|
-
save_path: Path = Path(str(Path.cwd()) + "/gif"), extensions: list = None) -> str:
|
29
|
+
trigger_ui: QWidget, file_filter: str = "GIF WEBP (*.gif;*.webp)", extensions: list = None) -> str:
|
40
30
|
front_engine_logger.info("choose_gif")
|
41
31
|
extensions = extensions or [".gif", ".webp"]
|
42
32
|
return choose_file(
|
43
|
-
trigger_ui=trigger_ui, file_filter=file_filter,
|
33
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
44
34
|
warning_message=language_wrapper.language_word_dict.get("gif_setting_message_box"))
|
45
35
|
|
46
36
|
|
47
37
|
def choose_image(
|
48
|
-
trigger_ui: QWidget, file_filter: str = "Images (*.png;*.jpg;*.webp)",
|
49
|
-
save_path: Path = Path(str(Path.cwd()) + "/image"), extensions: list = None) -> str:
|
38
|
+
trigger_ui: QWidget, file_filter: str = "Images (*.png;*.jpg;*.webp)", extensions: list = None) -> str:
|
50
39
|
front_engine_logger.info("choose_image")
|
51
40
|
extensions = extensions or [".png", ".jpg", ".webp"]
|
52
41
|
return choose_file(
|
53
|
-
trigger_ui=trigger_ui, file_filter=file_filter,
|
42
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
54
43
|
warning_message=language_wrapper.language_word_dict.get("image_setting_message_box"))
|
55
44
|
|
56
45
|
|
57
46
|
def choose_wav_sound(
|
58
|
-
trigger_ui: QWidget, file_filter: str = "WAV (*.wav)",
|
59
|
-
save_path: Path = Path(str(Path.cwd()) + "/sound"), extensions: list = None) -> str:
|
47
|
+
trigger_ui: QWidget, file_filter: str = "WAV (*.wav)", extensions: list = None) -> str:
|
60
48
|
front_engine_logger.info("choose_wav_sound")
|
61
49
|
extensions = extensions or [".wav"]
|
62
50
|
return choose_file(
|
63
|
-
trigger_ui=trigger_ui, file_filter=file_filter,
|
51
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
64
52
|
warning_message=language_wrapper.language_word_dict.get("sound_player_setting_message_box_sound"))
|
65
53
|
|
66
54
|
|
67
55
|
def choose_player_sound(
|
68
|
-
trigger_ui: QWidget, file_filter: str = "Sound (*.mp4;*.mp3;*.wav)",
|
69
|
-
save_path: Path = Path(str(Path.cwd()) + "/sound"), extensions: list = None) -> str:
|
56
|
+
trigger_ui: QWidget, file_filter: str = "Sound (*.mp4;*.mp3;*.wav)", extensions: list = None) -> str:
|
70
57
|
front_engine_logger.info("choose_player_sound")
|
71
58
|
extensions = extensions or [".mp3", ".mp4", ".wav"]
|
72
59
|
return choose_file(
|
73
|
-
trigger_ui=trigger_ui, file_filter=file_filter,
|
60
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
74
61
|
warning_message=language_wrapper.language_word_dict.get("sound_player_setting_message_box_sound"))
|
75
62
|
|
76
63
|
|
77
64
|
def choose_video(
|
78
|
-
trigger_ui: QWidget, file_filter: str = "Video (*.mp4;)",
|
79
|
-
save_path: Path = Path(str(Path.cwd()) + "/video"), extensions: list = None) -> str:
|
65
|
+
trigger_ui: QWidget, file_filter: str = "Video (*.mp4;)", extensions: list = None) -> str:
|
80
66
|
front_engine_logger.info("choose_video")
|
81
67
|
extensions = extensions or [".mp4"]
|
82
68
|
return choose_file(
|
83
|
-
trigger_ui=trigger_ui, file_filter=file_filter,
|
69
|
+
trigger_ui=trigger_ui, file_filter=file_filter, extensions=extensions,
|
84
70
|
warning_message=language_wrapper.language_word_dict.get("video_setting_message_box"))
|
85
|
-
|
86
|
-
|
87
|
-
def choose_scene_json(
|
88
|
-
trigger_ui: QWidget, file_filter: str = "Json (*.json;)",
|
89
|
-
save_path: Path = Path(str(Path.cwd()) + "/scene"), extensions: list = None) -> str:
|
90
|
-
front_engine_logger.info("choose_scene_json")
|
91
|
-
extensions = extensions or [".json"]
|
92
|
-
return choose_file(
|
93
|
-
trigger_ui=trigger_ui, file_filter=file_filter, save_path=save_path, extensions=extensions,
|
94
|
-
warning_message=language_wrapper.language_word_dict.get("scene_choose_message_box"))
|
@@ -3,23 +3,23 @@ import sys
|
|
3
3
|
from pathlib import Path
|
4
4
|
from typing import Dict, Type
|
5
5
|
|
6
|
-
from PySide6.QtCore import QTimer
|
7
|
-
from PySide6.QtGui import QIcon, QAction
|
6
|
+
from PySide6.QtCore import QTimer, QCoreApplication
|
7
|
+
from PySide6.QtGui import QIcon, QAction, Qt
|
8
8
|
from PySide6.QtWidgets import QMainWindow, QApplication, QGridLayout, QTabWidget, QMenuBar, QWidget
|
9
9
|
from qt_material import apply_stylesheet, QtStyleTools
|
10
10
|
|
11
|
-
from frontengine.
|
12
|
-
from frontengine.ui.
|
13
|
-
from frontengine.ui.
|
14
|
-
from frontengine.ui.
|
15
|
-
from frontengine.ui.
|
16
|
-
from frontengine.ui.
|
17
|
-
from frontengine.ui.
|
18
|
-
from frontengine.ui.
|
19
|
-
from frontengine.ui.
|
20
|
-
from frontengine.ui.
|
21
|
-
from frontengine.ui.
|
22
|
-
from frontengine.ui.
|
11
|
+
from frontengine.system_tray.extend_system_tray import ExtendSystemTray
|
12
|
+
from frontengine.ui.menu.help_menu import build_help_menu
|
13
|
+
from frontengine.ui.menu.how_to_menu import build_how_to_menu
|
14
|
+
from frontengine.ui.menu.language_menu import build_language_menu
|
15
|
+
from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
16
|
+
from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
|
17
|
+
from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
|
18
|
+
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
19
|
+
from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
|
20
|
+
from frontengine.ui.page.text.text_setting_ui import TextSettingUI
|
21
|
+
from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
|
22
|
+
from frontengine.ui.page.web.web_setting_ui import WEBSettingUI
|
23
23
|
from frontengine.user_setting.user_setting_file import write_user_setting, read_user_setting, user_setting_dict
|
24
24
|
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
25
25
|
|
@@ -32,6 +32,7 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
32
32
|
super().__init__()
|
33
33
|
# User setting
|
34
34
|
self.id = "FrontEngine"
|
35
|
+
QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling)
|
35
36
|
if sys.platform in ["win32", "cygwin", "msys"]:
|
36
37
|
from ctypes import windll
|
37
38
|
windll.shell32.SetCurrentProcessExplicitAppUserModelID(self.id)
|
@@ -51,8 +52,6 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
51
52
|
self.gif_setting_ui = GIFSettingUI()
|
52
53
|
self.sound_player_setting_ui = SoundPlayerSettingUI()
|
53
54
|
self.text_setting_ui = TextSettingUI()
|
54
|
-
self.image_generation_ui = ImageGenerationUI()
|
55
|
-
self.chat_scene_ui = ChatSceneUI()
|
56
55
|
self.scene_setting_ui = SceneSettingUI()
|
57
56
|
self.control_center_ui = ControlCenterUI(
|
58
57
|
self.video_setting_ui,
|
@@ -61,12 +60,10 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
61
60
|
self.gif_setting_ui,
|
62
61
|
self.sound_player_setting_ui,
|
63
62
|
self.text_setting_ui,
|
64
|
-
self.scene_setting_ui
|
65
|
-
self.chat_scene_ui
|
63
|
+
self.scene_setting_ui
|
66
64
|
)
|
67
65
|
# Style menu bar
|
68
66
|
self.menu_bar = QMenuBar()
|
69
|
-
build_language_menu(self)
|
70
67
|
self.add_style_menu()
|
71
68
|
self.setMenuBar(self.menu_bar)
|
72
69
|
self.tab_widget.addTab(
|
@@ -91,20 +88,15 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
91
88
|
self.scene_setting_ui,
|
92
89
|
language_wrapper.language_word_dict.get("tab_scene_text")
|
93
90
|
)
|
94
|
-
self.tab_widget.addTab(
|
95
|
-
self.chat_scene_ui,
|
96
|
-
language_wrapper.language_word_dict.get("chat_ui_text")
|
97
|
-
)
|
98
91
|
self.tab_widget.addTab(
|
99
92
|
self.control_center_ui,
|
100
93
|
language_wrapper.language_word_dict.get("tab_control_center_text")
|
101
94
|
)
|
102
|
-
self.tab_widget.addTab(
|
103
|
-
self.image_generation_ui,
|
104
|
-
language_wrapper.language_word_dict.get("image_generation_tab")
|
105
|
-
)
|
106
95
|
for widget_name, widget in FrontEngine_EXTEND_TAB.items():
|
107
96
|
self.tab_widget.addTab(widget(), widget_name)
|
97
|
+
build_language_menu(self)
|
98
|
+
build_help_menu(self)
|
99
|
+
build_how_to_menu(self)
|
108
100
|
# Set Icon
|
109
101
|
self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
|
110
102
|
self.icon = QIcon(str(self.icon_path))
|
@@ -123,7 +115,8 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
123
115
|
self.debug_timer.start()
|
124
116
|
|
125
117
|
def startup_setting(self) -> None:
|
126
|
-
|
118
|
+
apply_stylesheet(self, theme=user_setting_dict.get("theme"))
|
119
|
+
self.showMaximized()
|
127
120
|
|
128
121
|
def add_style_menu(self) -> None:
|
129
122
|
self.menu_bar.style_menu = self.menu_bar.addMenu(
|
@@ -141,22 +134,26 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
141
134
|
|
142
135
|
def set_style(self) -> None:
|
143
136
|
self.apply_stylesheet(self, self.sender().text())
|
137
|
+
user_setting_dict.update({"theme": self.sender().text()})
|
144
138
|
|
145
139
|
def closeEvent(self, event) -> None:
|
146
|
-
if
|
147
|
-
self.
|
148
|
-
|
140
|
+
if ExtendSystemTray.isSystemTrayAvailable() and self.show_system_tray_ray:
|
141
|
+
if self.system_tray.isVisible():
|
142
|
+
self.hide()
|
143
|
+
event.ignore()
|
149
144
|
else:
|
150
145
|
super().closeEvent(event)
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
146
|
+
|
147
|
+
def close(self):
|
148
|
+
write_user_setting()
|
149
|
+
self.video_setting_ui.video_widget_list.clear()
|
150
|
+
self.image_setting_ui.image_widget_list.clear()
|
151
|
+
self.web_setting_ui.web_widget_list.clear()
|
152
|
+
self.gif_setting_ui.gif_widget_list.clear()
|
153
|
+
self.sound_player_setting_ui.sound_widget_list.clear()
|
154
|
+
self.text_setting_ui.text_widget_list.clear()
|
155
|
+
super().close()
|
156
|
+
QCoreApplication.exit(0)
|
160
157
|
|
161
158
|
@classmethod
|
162
159
|
def debug_close(cls):
|
@@ -164,12 +161,10 @@ class FrontEngineMainUI(QMainWindow, QtStyleTools):
|
|
164
161
|
|
165
162
|
|
166
163
|
def start_front_engine(debug: bool = False) -> None:
|
167
|
-
|
164
|
+
main_app = QApplication(sys.argv)
|
168
165
|
window = FrontEngineMainUI(debug=debug)
|
169
|
-
apply_stylesheet(new_editor, theme='dark_amber.xml')
|
170
|
-
window.showMaximized()
|
171
166
|
try:
|
172
167
|
window.startup_setting()
|
173
168
|
except Exception as error:
|
174
169
|
print(repr(error))
|
175
|
-
sys.exit(
|
170
|
+
sys.exit(main_app.exec())
|