FOSSredder 0.5.0
Loading...
Searching...
No Matches
Composition.cpp
Go to the documentation of this file.
1
5
7
8#include "MainWindow.h"
22#include "ui/shell/AppContext.h"
23#include "ui/shell/Settings.h"
41
42#include <QApplication>
43#include <QPointer>
44
45#include <exception>
46#include <utility>
47
48namespace ui::shell {
49
51 QApplication& app, MainWindow& w,
54 const std::shared_ptr<core::ports::diagnostics::IErrorReporter>& errorReporter,
55 std::shared_ptr<core::ports::analysis::IAnalysisRunner> analysisRunner,
56 std::shared_ptr<core::ports::annual::IAnnualRunner> annualRunner,
57 std::shared_ptr<core::ports::exporting::IExportRunner> exportRunner,
58 std::shared_ptr<core::ports::importing::IImportRunner> importRunner) {
59 auto* workspaceStore = w.workspaceStore();
60 auto* workspaceCommands = w.workspaceCommands();
61 auto* workspaceSelection = w.workspaceSelection();
62 auto* workspaceSelectors = w.workspaceSelectors();
63
64 if (workspaceStore) {
65 workspaceStore->setWorkspacePorts(&workspaceWriter, &workspaceReader);
66 }
67 if (workspaceCommands) {
68 workspaceCommands->setBeforeStorageSaveCallback({});
69 QObject::connect(&w, &MainWindow::newFileRequested, workspaceCommands,
71 QObject::connect(&w, &MainWindow::openFileRequested, workspaceCommands,
73 QObject::connect(&w, &MainWindow::saveFileRequested, workspaceCommands,
75 QObject::connect(&w, &MainWindow::saveFileAsRequested, workspaceCommands,
77 QObject::connect(workspaceCommands,
80 QObject::connect(workspaceCommands, &ui::WorkspaceCommands::operationFailed,
82 }
83
84 const auto workspaceSnapshotProvider = [&workspaceReader]() {
85 return workspaceReader.workspaceSnapshot();
86 };
87
88 auto analysisAdapter = std::make_shared<ui::adapters::AnalysisAdapter>(
89 std::move(analysisRunner));
90 auto* analysisWorkflow =
91 new ui::AnalysisWorkflow(workspaceSnapshotProvider, analysisAdapter,
92 errorReporter, &w);
93
94 auto annualAdapter =
95 std::make_shared<ui::adapters::AnnualAdapter>(std::move(annualRunner));
96 auto* annualWorkflow =
97 new ui::AnnualWorkflow(workspaceSnapshotProvider, annualAdapter, &w);
98
99 auto exportAdapter =
100 std::make_shared<ui::adapters::ExportAdapter>(std::move(exportRunner));
101 auto* exportWorkflow =
102 new ui::ExportWorkflow(workspaceSnapshotProvider, exportAdapter,
103 errorReporter, &w);
104
105 ui::LanguageService* languageService = nullptr;
106 if (auto* appContext = w.appContext()) {
107 languageService = appContext->languageService();
108 }
109 if (!languageService) {
110 languageService = new ui::LanguageService(&app, w.qmlEngine(), &w);
111 }
112 if (auto* appContext = w.appContext())
113 appContext->setLanguageService(languageService);
114
115 ui::Settings* settings = w.settings();
116 if (!settings) {
117 settings = new ui::Settings(&w);
118 }
119
120 auto importAdapter =
121 std::make_shared<ui::adapters::ImportAdapter>(std::move(importRunner));
122 auto* importWorkflow = new ui::ImportWorkflow(
123 importAdapter, errorReporter,
124 [workspaceStore]() {
125 return workspaceStore ? workspaceStore->snapshot()
127 },
128 workspaceCommands, workspaceSelectors, &w);
129 if (workspaceCommands) {
130 QPointer<ui::ImportWorkflow> activeImportWorkflow(importWorkflow);
131 workspaceCommands->setBeforeStorageSaveCallback([activeImportWorkflow]() {
132 if (activeImportWorkflow) {
133 activeImportWorkflow->flushActiveDraftToWorkspace();
134 }
135 });
136 }
137
138 if (auto* appContext = w.appContext()) {
139 auto* actorViewModel =
140 new ui::ActorViewModel(workspaceStore, workspaceCommands,
141 workspaceSelection, workspaceSelectors, &w);
142 appContext->setActorViewModel(actorViewModel);
143
144 auto* bookingViewModel =
145 new ui::BookingViewModel(workspaceStore, workspaceCommands,
146 workspaceSelection, workspaceSelectors, &w);
147 appContext->setBookingViewModel(bookingViewModel);
148
149 auto* contractViewModel =
150 new ui::ContractViewModel(workspaceStore, workspaceCommands,
151 workspaceSelection, workspaceSelectors, &w);
152 appContext->setContractViewModel(contractViewModel);
153
154 auto* propertyViewModel =
155 new ui::PropertyViewModel(workspaceStore, workspaceCommands,
156 workspaceSelection, workspaceSelectors, &w);
157 appContext->setPropertyViewModel(propertyViewModel);
158
159 auto* analysisViewModel = new ui::AnalysisViewModel(&w);
160 analysisViewModel->setWorkspaceRoles(workspaceStore, workspaceCommands,
161 workspaceSelection,
162 workspaceSelectors);
163 analysisViewModel->setAnalysisWorkflow(analysisWorkflow);
164 analysisViewModel->setSettings(settings);
165 appContext->setAnalysisViewModel(analysisViewModel);
166
167 auto* annualViewModel = new ui::AnnualViewModel(&w);
168 annualViewModel->setWorkspaceRoles(workspaceStore, workspaceCommands,
169 workspaceSelection, workspaceSelectors);
170 annualViewModel->setAnnualWorkflow(annualWorkflow);
171 appContext->setAnnualViewModel(annualViewModel);
172
173 auto* exportViewModel = new ui::ExportViewModel(&w);
174 exportViewModel->setWorkspaceRoles(workspaceStore, workspaceCommands,
175 workspaceSelectors);
176 exportViewModel->setExportWorkflow(exportWorkflow);
177 exportViewModel->setActions(appContext->actions());
178 exportViewModel->setFileSystemBrowser(appContext->fileSystemBrowser());
179 exportViewModel->setSettings(settings);
180 appContext->setExportViewModel(exportViewModel);
181
182 auto* importViewModel = new ui::ImportViewModel(&w);
183 importViewModel->setImportWorkflow(importWorkflow);
184 importViewModel->setNavigation(appContext->navigation());
185 importViewModel->setWorkspaceRoles(workspaceStore, workspaceCommands,
186 workspaceSelection, workspaceSelectors);
187 importViewModel->setSettings(settings);
188 importViewModel->setActions(appContext->actions());
189 importViewModel->setStatus(appContext->status());
190 appContext->setImportViewModel(importViewModel);
191
192 auto* settingsViewModel = new ui::SettingsViewModel(&w);
193 settingsViewModel->setNavigation(appContext->navigation());
194 settingsViewModel->setSettings(settings);
195 settingsViewModel->setActions(appContext->actions());
196 settingsViewModel->setLanguageService(languageService);
197 appContext->setSettingsViewModel(settingsViewModel);
198 }
199}
200
203 const std::shared_ptr<core::ports::diagnostics::IErrorReporter>& errorReporter) {
204 workspaceWriter.setSnapshotChangedCallback(
205 [&w](const core::ports::workspace::WorkspaceSnapshot& snapshot) {
206 if (w.workspaceStore()) {
207 w.workspaceStore()->loadFromState(snapshot);
208 }
209 });
210
211 workspaceWriter.setDeletionImpactCallback(
212 [&w,
213 errorReporter](const core::ports::workspace::DeletionImpact& impact) {
214 try {
215 if (w.workspaceStore())
217 } catch (...) {
218 if (errorReporter)
219 errorReporter->reportException(
221 "ui::shell::wireWorkspaceCallbacks::applyDeletionImpact",
222 std::current_exception());
223 }
224 });
225}
226
227} // namespace ui::shell
Declares the QML API for the Actor view.
Declares the analysis adapter used by UI workflows.
Declares the QML API for the Analysis view.
Declares the UI workflow for analysis creation and computation.
Declares the annual adapter used by UI workflows.
Declares the QML API for the Annual view.
Declares the UI workflow for annual result computation.
Declares the QML application context object.
Declares the QML API for the Booking view.
Wires QML shell workflows and view models.
Declares the QML API for the Contract view.
Declares the export adapter used by UI workflows.
Declares the QML API for the Export view.
Declares the asynchronous export workflow used by ExportViewModel.
Analysis use-case port consumed by UI workflows.
Annual use-case port consumed by application boundaries.
Declares the structured diagnostics reporting port.
Export use-case port consumed by UI workflows.
Import runner port consumed by UI workflows.
Read-side workspace boundary that exposes immutable snapshots.
Write-side workspace boundary that accepts typed command models.
Declares the import adapter used by UI import workflows.
Declares the QML API for import overview and draft review.
Coordinates asynchronous statement imports and in-memory draft sessions.
Declares the UI service responsible for runtime language switching.
Main window declaration for the UI application.
Declares the QML API for the Property view.
Declares the centralized UI settings view model exposed to QML.
Declares the Settings page view model.
Declares the workspace selection state synchronized with the store.
Declares read-only workspace selectors for QML payloads.
Immutable workspace read-model snapshot exposed through workspace ports.
Declares the UI workspace snapshot store.
void saveFileRequested()
void openFileRequested(const QString &path)
ui::WorkspaceSelectors * workspaceSelectors() const noexcept
Definition MainWindow.h:62
void handleStorageOperationSucceeded(const QString &operation)
void handleStorageOperationFailed(const QString &operation, const QString &error)
void newFileRequested(const QString &path)
ui::WorkspaceStore * workspaceStore() const noexcept
Definition MainWindow.h:53
QQmlEngine * qmlEngine() const noexcept
ui::Settings * settings() const noexcept
Definition MainWindow.h:65
ui::bootstrap::AppContext * appContext() const noexcept
Definition MainWindow.h:50
void saveFileAsRequested(const QString &path)
ui::WorkspaceCommands * workspaceCommands() const noexcept
Definition MainWindow.h:56
ui::WorkspaceSelection * workspaceSelection() const noexcept
Definition MainWindow.h:59
virtual WorkspaceSnapshot workspaceSnapshot() const =0
Returns the full immutable workspace snapshot.
Write-side workspace boundary for persistence, CRUD, drafts, and logs.
virtual void setSnapshotChangedCallback(SnapshotChanged cb)=0
Registers callback invoked after state changes.
virtual void setDeletionImpactCallback(DeletionImpactCallback cb)=0
Registers deletion impact callback invoked after save operations.
Owns editable actor UI state and delegates actor CRUD to workspace.
Owns Analysis view form state and delegates analysis CRUD and computation to workspace and workflow.
Coordinates analysis preview and computation use cases for UI state.
Owns Annual view form state and delegates annual CRUD and computation to workspace and workflow.
Coordinates annual computation for UI states.
Owns Booking view form state and delegates statement and transaction CRUD to workspace.
Owns editable contract UI state and delegates contract CRUD to workspace.
Owns Export view state and delegates export execution to ExportWorkflow.
Coordinates asynchronous exports from a read-only state snapshot.
Exposes import overview, statement draft, and transaction draft state to QML.
Runs PDF imports and holds the active in-memory statement draft session.
Manages the active UI language and the available translation options.
Owns editable property UI state and delegates property CRUD to workspace.
Stores and exposes globally persisted UI settings for settings-related views.
Definition Settings.h:19
Owns Settings view navigation and delegates persisted values.
void operationSucceeded(const QString &operation)
Emitted when a storage command completed.
void openFile(const QString &path)
Opens an existing workspace file.
void operationFailed(const QString &operation, const QString &error)
Emitted when a storage command failed.
void saveFileAs(const QString &path)
Saves the current workspace file to a new path.
void newFile(const QString &path)
Creates a new workspace file.
void saveFile()
Saves the current workspace file.
void applyDeletionImpact(const core::ports::workspace::DeletionImpact &impact)
Applies deletion side effects to the stored snapshot.
void loadFromState(const core::ports::workspace::WorkspaceSnapshot &snapshot)
Loads a fresh workspace snapshot.
void wireWorkspaceCallbacks(MainWindow &w, core::ports::workspace::IWorkspaceWriter &workspaceWriter, const std::shared_ptr< core::ports::diagnostics::IErrorReporter > &errorReporter)
Wires workspace writer callbacks back into the UI workspace store.
void createComposition(QApplication &app, MainWindow &w, core::ports::workspace::IWorkspaceReader &workspaceReader, core::ports::workspace::IWorkspaceWriter &workspaceWriter, const std::shared_ptr< core::ports::diagnostics::IErrorReporter > &errorReporter, std::shared_ptr< core::ports::analysis::IAnalysisRunner > analysisRunner, std::shared_ptr< core::ports::annual::IAnnualRunner > annualRunner, std::shared_ptr< core::ports::exporting::IExportRunner > exportRunner, std::shared_ptr< core::ports::importing::IImportRunner > importRunner)
Creates and wires QML-facing workflows and view models.
Declares UI-side workspace command submission.