From 7a540334bd1efb8ed949807e749344ebdfe482b1 Mon Sep 17 00:00:00 2001 From: Bartosz Wieczorek Date: Thu, 25 Jan 2018 14:28:45 +0100 Subject: [PATCH] refactor --- src/eedb/EEDB.cpp | 6 ++++- src/eedb/widgets/AuthPage.hpp | 18 ++++++++------ src/eedb/widgets/DefaultAuthPage.cpp | 35 ++++++++-------------------- src/eedb/widgets/DefaultAuthPage.hpp | 3 +-- 4 files changed, 27 insertions(+), 35 deletions(-) diff --git a/src/eedb/EEDB.cpp b/src/eedb/EEDB.cpp index 330f4f4..ffdee3e 100644 --- a/src/eedb/EEDB.cpp +++ b/src/eedb/EEDB.cpp @@ -23,6 +23,9 @@ #include #include + +#include + using std::move; namespace eedb { @@ -43,8 +46,9 @@ EEDB::EEDB(std::unique_ptr< Session > session, AuthPageFactory authPageFactory, _authPage->registerOnUserWeakLogin([&] { authEventLogin(LoginState::weak); }); _authPage->registerOnUserStrongLogin([&] { authEventLogin(LoginState::strong); }); _authPage->registerOnUserLogout([=] { authEventLogout(); }); - _authPage->attachTo(root()); _authPage->processEnvironment(); + + root()->addWidget(_authPage->detach()); } void EEDB::authEventLogin(EEDB::LoginState state) { diff --git a/src/eedb/widgets/AuthPage.hpp b/src/eedb/widgets/AuthPage.hpp index def03e2..07a476c 100644 --- a/src/eedb/widgets/AuthPage.hpp +++ b/src/eedb/widgets/AuthPage.hpp @@ -1,24 +1,28 @@ #pragma once #include +#include namespace Wt { class WContainerWidget; } +namespace Wt::Auth { +class AuthWidget; +} + namespace eedb { class AuthPage { public: virtual ~AuthPage() = default; - virtual void attachTo(Wt::WContainerWidget * parent) = 0; - virtual void detach() = 0; - virtual void processEnvironment() = 0; + virtual std::unique_ptr< Wt::Auth::AuthWidget > detach() = 0; + virtual void processEnvironment() = 0; - virtual void registerOnNeedVerification(std::function< void() > f) = 0; - virtual void registerOnUserWeakLogin(std::function< void() > f) = 0; - virtual void registerOnUserStrongLogin(std::function< void() > f) = 0; - virtual void registerOnUserLogout(std::function< void() > f) = 0; + virtual void registerOnNeedVerification(std::function< void() > f) = 0; + virtual void registerOnUserWeakLogin(std::function< void() > f) = 0; + virtual void registerOnUserStrongLogin(std::function< void() > f) = 0; + virtual void registerOnUserLogout(std::function< void() > f) = 0; }; } // namespace eedb diff --git a/src/eedb/widgets/DefaultAuthPage.cpp b/src/eedb/widgets/DefaultAuthPage.cpp index a53470a..f22d5f3 100644 --- a/src/eedb/widgets/DefaultAuthPage.cpp +++ b/src/eedb/widgets/DefaultAuthPage.cpp @@ -6,18 +6,6 @@ #include #include -namespace std { - -template <> -struct default_delete< Wt::Auth::AuthWidget > { - void operator()(Wt::Auth::AuthWidget * ptr) { - if(ptr && !ptr->parent()) { - delete ptr; - } - } -}; -} // namespace std - namespace eedb { struct DefaultAuthPage::DefaultAuthPagePriv { @@ -57,35 +45,32 @@ DefaultAuthPage::DefaultAuthPage(const auth::Services & baseAuth, }); } -void DefaultAuthPage::attachTo(Wt::WContainerWidget * parent) { - parent->addWidget(std::move(_priv->_authWidget)); -} - -void DefaultAuthPage::detach() { - auto parent = dynamic_cast< Wt::WContainerWidget * >(_priv->_authWidget->parent()); - if(parent) { - parent->removeWidget(_priv->_authWidget.get()); +std::unique_ptr< Wt::Auth::AuthWidget > DefaultAuthPage::detach() { + if(_priv->_authWidget) { + return std::move(_priv->_authWidget); } + return {}; } void DefaultAuthPage::processEnvironment() { - _priv->_authWidget->processEnvironment(); + if(_priv->_authWidget) + _priv->_authWidget->processEnvironment(); } void DefaultAuthPage::registerOnNeedVerification(std::function< void() > f) { - _priv->_onNeedEmailVerification.connect([=]() { f(); }); + _priv->_onNeedEmailVerification.connect(f); } void DefaultAuthPage::registerOnUserWeakLogin(std::function< void() > f) { - _priv->_onUserWeakLogin.connect([=]() { f(); }); + _priv->_onUserWeakLogin.connect(f); } void DefaultAuthPage::registerOnUserStrongLogin(std::function< void() > f) { - _priv->_onUserStrongLogin.connect([=]() { f(); }); + _priv->_onUserStrongLogin.connect(f); } void DefaultAuthPage::registerOnUserLogout(std::function< void() > f) { - _priv->_onUserLogout.connect([=]() { f(); }); + _priv->_onUserLogout.connect(f); } void DefaultAuthPage::notifyUserStrongLogin() const { diff --git a/src/eedb/widgets/DefaultAuthPage.hpp b/src/eedb/widgets/DefaultAuthPage.hpp index 1398a2a..4d7548b 100644 --- a/src/eedb/widgets/DefaultAuthPage.hpp +++ b/src/eedb/widgets/DefaultAuthPage.hpp @@ -21,8 +21,7 @@ class DefaultAuthPage final : public AuthPage { std::unique_ptr< Wt::Auth::AbstractUserDatabase > userDatabase, Wt::Auth::Login & session); - void attachTo(Wt::WContainerWidget * parent) override; - void detach() override; + std::unique_ptr< Wt::Auth::AuthWidget > detach() override; void processEnvironment() override; void registerOnNeedVerification(std::function< void() > f) override;