CaptureMoment 0.1.0
Free and open-source non-destructive photo editor
Loading...
Searching...
No Matches
qml_context_setup.cpp
Go to the documentation of this file.
1
12
14
15#include <spdlog/spdlog.h>
16
17namespace CaptureMoment::UI {
18
19// Static member initialization
20std::shared_ptr<Controller::ImageControllerBase> QmlContextSetup::m_controller_main_scene = nullptr;
21std::unique_ptr<Serializer::SerializerController> QmlContextSetup::m_serializer_controller = nullptr;
22
23bool QmlContextSetup::setupContext(QQmlContext* context)
24{
25 if (!context) {
26 spdlog::error("QmlContextSetup::setupContext: QML Context is null!");
27 return false;
28 }
29 spdlog::info("QmlContextSetup: Starting QML context setup...");
30
31 if (!createControllerMainScene()) {
32 spdlog::error("QmlContextSetup::setupContext: Failed to create ImageController.");
33 return false;
34 }
35
36 if (!m_controller_main_scene) {
37 spdlog::error("QmlContextSetup::setupContext: m_controller_main_scene is null after createControllerMainScene!");
38 return false;
39 }
40
41 // Check if SerializerController is set before attempting registration
42 if (!m_serializer_controller) {
43 spdlog::warn("QmlContextSetup::setupContext: SerializerController is not set. Skipping registration.");
44 }
45
46 if (!registerCoreToQml(context)) {
47 spdlog::error("QmlContextSetup::setupContext: Failed to register core objects to QML.");
48 return false;
49 }
50
51 // Register SerializerController if it was provided
52 if (m_serializer_controller) {
53 if (!registerSerializerToQml(context)) {
54 spdlog::error("QmlContextSetup::setupContext: Failed to register SerializerController to QML.");
55 return false;
56 }
57 }
58
59 // Get the Model Manager from the controller
60 auto* op_model_manager = m_controller_main_scene->operationModelManager();
61 if (!op_model_manager) {
62 spdlog::error("QmlContextSetup::setupContext: OperationModelManager from ImageControllerBase is null.");
63 return false;
64 }
65
66 // Register all operation models to QML via the manager
67 if (!op_model_manager->registerModelsToQml(context)) {
68 spdlog::error("QmlContextSetup::setupContext: Failed to register operation models to QML via OperationModelManager.");
69 return false;
70 }
71
72 spdlog::info("QmlContextSetup: QML context setup completed successfully.");
73 return true;
74}
75
76bool QmlContextSetup::createControllerMainScene()
77{
78 spdlog::debug("QmlContextSetup::createControllerMainScene: Creating ImageController...");
79
80 m_controller_main_scene = std::make_shared<Controller::ImageControllerRHI>();
81
82 if (!m_controller_main_scene) {
83 spdlog::error("QmlContextSetup::createControllerMainScene: Failed to create ImageController (out of memory or constructor threw).");
84 return false;
85 }
86 spdlog::debug("ImageControllerBase created.");
87
88 return true;
89}
90
91bool QmlContextSetup::registerCoreToQml(QQmlContext* context)
92{
93 spdlog::debug("QmlContextSetup::registerCoreToQml: Registering objects to QML...");
94
95 if (!context) {
96 spdlog::error("QmlContextSetup::registerCoreToQml: QML Context is null!");
97 return false;
98 }
99
100 if (!m_controller_main_scene) {
101 spdlog::error("QmlContextSetup::registerCoreToQml: ImageController is null, cannot register.");
102 return false;
103 }
104
105 context->setContextProperty("controller", m_controller_main_scene.get());
106 spdlog::debug("Controller Base registered to QML context.");
107
108 spdlog::info("QmlContextSetup::registerCoreToQml: Objects registered to QML successfully.");
109 return true;
110}
111
112void QmlContextSetup::setSerializerController(std::unique_ptr<Serializer::SerializerController> serializer_controller)
113{
114 m_serializer_controller = std::move(serializer_controller);
115 spdlog::debug("QmlContextSetup::setSerializerController: SerializerController set.");
116}
117
119{
120 spdlog::debug("QmlContextSetup::registerSerializerToQml: Registering SerializerController to QML...");
121
122 if (!context) {
123 spdlog::error("QmlContextSetup::registerSerializerToQml: QML Context is null!");
124 return false;
125 }
126
127 if (!m_serializer_controller) {
128 spdlog::error("QmlContextSetup::registerSerializerToQml: SerializerController is null, cannot register.");
129 return false;
130 }
131
132 context->setContextProperty("serializerController", m_serializer_controller.get());
133 spdlog::debug("SerializerController registered to QML context.");
134
135 spdlog::info("QmlContextSetup::registerUISerializerToQml: SerializerController registered to QML successfully.");
136 return true;
137}
138
139} // namespace CaptureMoment::UI
static void setSerializerController(std::unique_ptr< Serializer::SerializerController > ui_serializer_controller)
Sets the SerializerController instance to be registered with the QML context. This must be called bef...
static bool registerSerializerToQml(QQmlContext *context)
Registers the SerializerController (if set) to the QML context.
static bool setupContext(QQmlContext *context)
Setup complete QML context with all objects.
Head for ImageControllerPainted from main class ImageControllerBase.
Head for ImageControllerRHI from main class ImageControllerBase.
Head for ImageControllerSGS from main class ImageControllerBase.
Manages creation and setup of all C++ objects for QML.
UI manager for handling file-based serialization and deserialization of image operations.
CaptureMoment — footer