forked from Investigamer/Proxyshop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
133 lines (116 loc) · 4.93 KB
/
main.py
File metadata and controls
133 lines (116 loc) · 4.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
* Proxyshop Application Launcher
"""
from pathlib import Path
from PySide6.QtGui import QIcon
from src import APP, CFG, CON, ENV
from src._loader import (
AppPlugin,
TemplateLibrary,
get_all_plugins,
get_template_file_versions,
)
from src.startup import run_startup_checks
def launch_gui(template_library: TemplateLibrary, plugins: dict[str, AppPlugin]):
"""Launch the app in GUI mode."""
from PySide6 import QtAsyncio
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtQuickControls2 import QQuickStyle
from src.gui.qml.models.batch_rendering_model import BatchRenderingModel
from src.gui.qml.models.console_model import ConsoleModel
from src.gui.qml.models.file_dialog_model import FileDialogModel
from src.gui.qml.models.file_path_model import FilePathModel
from src.gui.qml.models.image_transform_model import ImageTransformModel
from src.gui.qml.models.message_dialog_content_model import (
MessageDialogContentModel,
)
from src.gui.qml.models.render_operations_model import RenderOperationsModel
from src.gui.qml.models.settings_model import SettingsModel
from src.gui.qml.models.settings_tree_model import SettingsTreeModel
from src.gui.qml.models.template_list_model import TemplateListModel
from src.gui.qml.models.template_updater_model import TemplateUpdaterModel
from src.gui.qml.models.test_renders_model import TestRendersModel
from src.render.render_queue import RenderQueue
app = QGuiApplication(applicationDisplayName="Proxyshop")
app.setWindowIcon(QIcon("src/img/favicon.ico"))
engine = QQmlApplicationEngine()
file_path_model = FilePathModel()
render_queue = RenderQueue()
file_dialog_model = FileDialogModel()
console_model = ConsoleModel()
render_message_dialog_content_model = MessageDialogContentModel()
render_operations_model = RenderOperationsModel(
render_queue, render_message_dialog_content_model
)
template_updater_model = TemplateUpdaterModel(
app_env=ENV, template_library=template_library
)
test_renders_model = TestRendersModel(
render_queue,
template_library,
file_dialog_model,
render_message_dialog_content_model,
CFG,
)
template_list_model = TemplateListModel(
render_queue,
file_dialog_model,
render_message_dialog_content_model,
template_library,
test_renders_model,
CFG,
)
batch_render_model = BatchRenderingModel(
file_dialog_model,
render_message_dialog_content_model,
render_queue,
plugins,
template_library,
test_renders_model,
CFG,
)
settings_tree_model = SettingsTreeModel(
app_config=CFG, template_library=template_library
)
settings_model = SettingsModel(settings_tree_model)
image_transform_model = ImageTransformModel(file_dialog_model=file_dialog_model)
root_context = engine.rootContext()
root_context.setContextProperty("filePathModel", file_path_model)
root_context.setContextProperty("fileDialogModel", file_dialog_model)
root_context.setContextProperty("consoleModel", console_model)
root_context.setContextProperty(
"renderMessageDialogContentModel", render_message_dialog_content_model
)
root_context.setContextProperty("renderOperationsModel", render_operations_model)
root_context.setContextProperty("testRendersModel", test_renders_model)
root_context.setContextProperty("templateUpdaterModel", template_updater_model)
root_context.setContextProperty("templateListModel", template_list_model)
root_context.setContextProperty("batchRenderModel", batch_render_model)
root_context.setContextProperty("settingsTreeModel", settings_tree_model)
root_context.setContextProperty("settingsModel", settings_model)
root_context.setContextProperty("imageTransformModel", image_transform_model)
root_context.setContextProperty(
"github_url", f"https://github.com/{ENV.APP_UPDATES_REPO}"
)
# This points to the extracted bundle directory in a distributable build
engine.addImportPath(Path(__file__).parent / "src" / "gui")
QQuickStyle.setStyle("Fusion")
QQuickStyle.setFallbackStyle("Basic")
engine.loadFromModule("qml", "App")
# Ensure that the root context is available at QML destruction
app.aboutToQuit.connect(engine.deleteLater)
run_startup_checks(APP)
QtAsyncio.run(handle_sigint=True)
if __name__ == "__main__":
initial_versions = get_template_file_versions()
versions = initial_versions.model_copy(deep=True)
plugins = get_all_plugins(con=CON, env=ENV, template_file_versions=versions.root)
template_library = TemplateLibrary(
con=CON,
env=ENV,
plugins=plugins,
initial_template_file_versions=initial_versions,
template_file_versions=versions,
)
launch_gui(template_library, plugins)