101 inline static std::string_view logger_name =
"ores.qt.main_window";
103 [[nodiscard]]
static auto& lg() {
105 static auto instance = make_logger(logger_name);
118 explicit MainWindow(QWidget* parent =
nullptr);
136 void setInstanceInfo(
const QString& name,
const QColor& color = QColor());
162 void onLoginTriggered();
167 void onDisconnectTriggered();
172 void onAboutTriggered();
177 void onMyAccountTriggered();
182 void onMySessionsTriggered();
187 void onDetachAllTriggered();
215 void onWindowMenuAboutToShow();
224 void onRecordSessionToggled(
bool checked);
229 void onOpenRecordingTriggered();
234 void onSetRecordingDirectoryTriggered();
242 void onConnectionBrowserTriggered();
249 void onConnectionConnectRequested(
const boost::uuids::uuid& environmentId,
250 const QString& connectionName);
252 void onModernLoginTriggered();
260 void onLoginSuccess(
const QString& username);
268 void showSignUpDialog(
const QString& host,
int port);
278 void showSystemProvisionerWizard(
const std::vector<BootstrapBundleInfo>& bundles);
283 struct LoginDialogOptions {
288 QString connectionName;
289 bool showSavedConnections =
true;
290 bool showSignUpButton =
true;
299 void showLoginDialog();
309 void showLoginDialog(
const LoginDialogOptions& options);
318 void updateMenuState();
326 void createControllers();
331 void performDisconnectCleanup();
340 bool initializeConnectionManager();
347 MdiAreaWithBackground* mdiArea_;
350 QLabel* connectionStatusIconLabel_;
358 QList<DetachableMdiSubWindow*> allDetachableWindows_;
361 QIcon connectedIcon_;
364 QIcon disconnectedIcon_;
367 QIcon reconnectingIcon_;
370 QIcon recordOffIcon_;
382 std::unique_ptr<CurrencyController> currencyController_;
390 std::unique_ptr<CountryController> countryController_;
398 std::unique_ptr<AccountController> accountController_;
406 std::unique_ptr<RoleController> roleController_;
414 std::unique_ptr<FeatureFlagController> featureFlagController_;
422 std::unique_ptr<ChangeReasonCategoryController> changeReasonCategoryController_;
430 std::unique_ptr<ChangeReasonController> changeReasonController_;
438 std::unique_ptr<OriginDimensionController> originDimensionController_;
446 std::unique_ptr<NatureDimensionController> natureDimensionController_;
454 std::unique_ptr<TreatmentDimensionController> treatmentDimensionController_;
462 std::unique_ptr<CodingSchemeAuthorityTypeController> codingSchemeAuthorityTypeController_;
470 std::unique_ptr<DataDomainController> dataDomainController_;
478 std::unique_ptr<SubjectAreaController> subjectAreaController_;
486 std::unique_ptr<CatalogController> catalogController_;
494 std::unique_ptr<CodingSchemeController> codingSchemeController_;
502 std::unique_ptr<MethodologyController> methodologyController_;
510 std::unique_ptr<DatasetController> datasetController_;
518 std::unique_ptr<DatasetBundleController> datasetBundleController_;
521 std::shared_ptr<eventing::service::event_bus> eventBus_;
524 ClientManager* clientManager_;
527 ImageCache* imageCache_;
530 ChangeReasonCache* changeReasonCache_;
533 std::string username_;
536 QSystemTrayIcon* systemTrayIcon_;
539 QMenu* trayContextMenu_;
542 std::vector<eventing::service::subscription> eventSubscriptions_;
545 QString instanceName_;
548 QColor instanceColor_;
551 QLabel* instanceColorIndicator_;
554 DetachableMdiSubWindow* eventViewerWindow_;
557 DetachableMdiSubWindow* telemetryViewerWindow_;
560 std::unique_ptr<connections::service::connection_manager> connectionManager_;
563 DetachableMdiSubWindow* connectionBrowserWindow_{
nullptr};
566 DetachableMdiSubWindow* dataLibrarianWindow_{
nullptr};
569 QString activeConnectionName_;
572 QString masterPassword_;