// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include #include #include #include namespace app { class ApplicationCommon; }; namespace gui { class AppWindow; } namespace app { class WindowsFactory { public: using handle = std::unique_ptr; using builder = std::function; private: std::map builders; public: WindowsFactory() = default; WindowsFactory(const WindowsFactory &) = delete; WindowsFactory(WindowsFactory &&) = delete; WindowsFactory &operator=(const WindowsFactory &) = delete; WindowsFactory &operator=(WindowsFactory &&) = delete; void attach(const std::string &name, builder builder); [[nodiscard]] auto isRegistered(const std::string &name) const -> bool; auto build(ApplicationCommon *app, const std::string &name) -> handle; }; } // namespace app