Untitled

 avatar
unknown
plain_text
4 years ago
3.4 kB
5
Indexable
ViewInit.h

#include <FSEKeyLogin/ViewInitializer.h>


namespace CZM
{
    namespace FSEKeyLogin
    {
        /// @name Operations
        /// @{

        void
        InitializeViewComponent(misc::Structure data);

        /// @}
    }
}

--------------------------------------------------------------------
viewinit.cpp
namespace CZM
{
    namespace FSEKeyLogin
    {
        /** @internal
        */
        class ViewInit : public ViewInitializer
        {
        public:

            void
            registerResources(misc::Structure const&) const noexcept
            {
                initComponentsRes();
            }

            void
            registerTypes    (misc::Structure const&) const
            {
                qmlRegisterType<FSELoginAgent>("Zeiss.Components.AdminLogin"
                    , 1
                    , 0
                    , "FSELoginAgent"
                    );
            }
        };

        std::once_flag inited;

        void
        InitializeViewComponent(misc::Structure data)
        {
            std::call_once(
                  inited
                , [](auto&& _data)
                {
                    InitializeViewComponent(std::forward<decltype(_data)>(_data)
                        , ViewInit{}
                        );
                }
                , std::move(data)
                );
        }
    }

--------------------------------------------------------------------------------------
viewintialiser.h 
namespace CZM
{
    namespace FSEKeyLogin
    {
        /**
        * @class  ViewInitializer ViewInitializer.h "FSEKeyLogin/ViewInitializer.h"
        * @brief  The primary contract to implement an ordered initialization of front-end components
        *         and dependents.
        */
        class ViewInitializer
        {
        public:

            /// @name Construction
            /// @{

            constexpr ViewInitializer() noexcept = default;

            /// @}

            /// @name Overloads
            /// @{

            constexpr void
            registerResources(misc::Structure const&) const noexcept
            { //  no-op by default
            }

            constexpr void
            registerTypes(misc::Structure const&) const noexcept
            { //  no-op by default
            }

            constexpr void
            registerContextProperties(misc::Structure const&) const noexcept
            { //  no-op by default
            }

            /// @}
        };

        /// @name Operations
        /// @{

        template<typename U>
        void
        InitializeViewComponent(misc::Structure data
            , U&& unit
            )
        {
            //  --- (1) ---
            unit.registerResources(data);

            //  --- (2) ---
            unit.registerTypes(data);

            //  --- (3) ---
            unit.registerContextProperties(data);
        }

        /// @}
    }
}
------------------------------



Actual code call

    //  initialize/ register view components of Admin Login
    CZM::FSEKeyLogin::InitializeViewComponent({
          {"QMLEngine" , m_engine}
        , {"QMLContext", m_engine->rootContext()}
        });


--- This throws linker error. Do you know why??
Editor is loading...