add category tree class

This commit is contained in:
Wieczorek Bartosz 2017-03-22 11:54:46 +01:00
parent f19f077161
commit 6656d2da02
17 changed files with 136 additions and 39 deletions

View File

@ -8,8 +8,8 @@
#include <eedb/db/connection.hpp>
#include <eedb/widgets/DefaultAuthPage.hpp>
#include <eedb/widgets/DefaultHomePage.hpp>
#include <eedb/widgets/DefaultNavigationBar.hpp>
#include <eedb/widgets/HomePage.hpp>
#include <Wt/WApplication>
#include <Wt/WServer>
@ -33,7 +33,7 @@ Wt::WApplication * createApplication(const Wt::WEnvironment & env) {
auto homePageFactory = [_session = session.get()]()->std::unique_ptr< eedb::HomePage > {
auto navigationBar = std::make_unique< eedb::DefaultNavigationBar >();
return make_unique< eedb::Home >(*_session, std::move(navigationBar));
return make_unique< eedb::DefaultHomePage >(*_session, std::move(navigationBar));
};
return new eedb::EEDB{std::move(session), authPageFactory, homePageFactory};

View File

@ -59,7 +59,7 @@ void EEDB::authEventLogin(EEDB::LoginState state) {
root()->removeStyleClass("container");
_authPage->detach();
_homePage = _homePageFactory();
_homePage->show(root());
_homePage->attachTo(root());
Wt::log("notice") << "Clearing root and creating widgets";
// // new eedb::Home(container, &_authWidget->login());

View File

@ -0,0 +1,7 @@
#pragma once
namespace eedb {
class Category {
public:
};
}

View File

@ -1,7 +1,6 @@
#pragma once
#include <functional>
#include <memory>
namespace Wt {
class WContainerWidget;

View File

@ -0,0 +1,21 @@
#pragma once
#include <functional>
#include <eedb/data/Category.hpp>
namespace Wt {
class WContainerWidget;
}
namespace eedb {
class Category;
class CategoriesTree {
public:
virtual ~CategoriesTree() = default;
virtual void attachTo(Wt::WContainerWidget * parent) = 0;
virtual void registerOnCategoryChanged(std::function< void(const Category &) >) = 0;
};
}

View File

@ -2,6 +2,8 @@
#include <eedb/widgets/AuthPage.hpp>
#include <memory>
namespace Wt::Auth {
class AbstractUserDatabase;
class Login;

View File

@ -0,0 +1,15 @@
#include <eedb/widgets/DefaultCategoryTree.hpp>
#include <eedb/data/Category.hpp>
namespace eedb {
struct DefaultCategoriesTree::DefaultCategoriesTreePriv {};
DefaultCategoriesTree::DefaultCategoriesTree() : _priv(std::make_unique< DefaultCategoriesTreePriv >()) {}
DefaultCategoriesTree::~DefaultCategoriesTree() = default;
void DefaultCategoriesTree::attachTo(Wt::WContainerWidget * parent) {}
void DefaultCategoriesTree::registerOnCategoryChanged(std::function< void(const Category &) >) {}
}

View File

@ -0,0 +1,31 @@
#pragma once
#include <eedb/widgets/CategoryThree.hpp>
#include <memory>
namespace eedb {
class DefaultCategoriesTree final : public CategoriesTree {
// CategoriesTree interface
public:
DefaultCategoriesTree();
~DefaultCategoriesTree();
DefaultCategoriesTree(const DefaultCategoriesTree &) = delete;
DefaultCategoriesTree(DefaultCategoriesTree &&);
// clang-format off
DefaultCategoriesTree & operator=(const DefaultCategoriesTree &) = delete;
DefaultCategoriesTree & operator=(DefaultCategoriesTree &&);
// clang-format on
void attachTo(Wt::WContainerWidget * parent) override;
void registerOnCategoryChanged(std::function< void(const Category &) >) override;
private:
struct DefaultCategoriesTreePriv;
std::unique_ptr< DefaultCategoriesTreePriv > _priv;
};
}

View File

@ -1,4 +1,4 @@
#include <eedb/widgets/HomePage.hpp>
#include <eedb/widgets/DefaultHomePage.hpp>
#include <Wt/Auth/Login>
#include <Wt/WContainerWidget>
@ -39,14 +39,16 @@ auto make_tree() {
return tree;
}
eedb::Home::Home(Session & session, std::unique_ptr< eedb::NavigationBar > navigationBar)
eedb::DefaultHomePage::DefaultHomePage(Session & session, std::unique_ptr< eedb::NavigationBar > navigationBar)
: _session(session), _navigationBar(std::move(navigationBar)) {}
Home::~Home() = default;
DefaultHomePage::~DefaultHomePage() = default;
void Home::show(Wt::WContainerWidget * container) {
void DefaultHomePage::attachTo(Wt::WContainerWidget * container) {
auto stackedWidget = new Wt::WStackedWidget();
_navigationBar->attachTo(stackedWidget);
_navigationBar->registerLogoutAction([=]() { this->_session.login().logout(); });
Wt::WVBoxLayout * vbox = new Wt::WVBoxLayout();
container->setLayout(vbox);

View File

@ -0,0 +1,31 @@
#pragma once
#include <eedb/widgets/HomePage.hpp>
#include <memory>
namespace Wt {
class WContainerWidget;
class WTreeView;
class WNavigationBar;
}
namespace eedb {
class Session;
class NavigationBar;
class DefaultHomePage final : public HomePage {
public:
DefaultHomePage(Session & session, std::unique_ptr< NavigationBar > navigationBar);
~DefaultHomePage();
void attachTo(Wt::WContainerWidget * parent) override;
Wt::WNavigationBar * createNavigationBar(Wt::WContainerWidget * container);
private:
Session & _session;
std::unique_ptr< NavigationBar > _navigationBar;
Wt::WTreeView * _categoryTree;
};
}

View File

@ -40,7 +40,7 @@ struct DefaultNavigationBar::DefaultNavigationBarPriv {
logoutItem->triggered().connect([=](auto...) { this->onLogin.emit(); });
auto sessionItem = new Wt::WMenuItem("Session");
sessionItem->setMenu(sessionMenuPopup);
sessionItem->setMenu(sessionMenuPopup);
auto sessionMenu = new Wt::WMenu();
sessionMenu->setObjectName("navigation_bar.session_menu");

View File

@ -1,17 +1,9 @@
#pragma once
#include <memory>
namespace Wt {
class WContainerWidget;
class WTreeView;
class WNavigationBar;
}
namespace eedb {
class Session;
class NavigationBar;
}
namespace eedb {
@ -19,21 +11,7 @@ class HomePage {
public:
virtual ~HomePage() = default;
virtual void show(Wt::WContainerWidget * parent) = 0;
virtual void attachTo(Wt::WContainerWidget * parent) = 0;
};
class Home final : public HomePage {
public:
Home(Session & session, std::unique_ptr<NavigationBar> navigationBar );
~Home();
void show(Wt::WContainerWidget * parent) override;
Wt::WNavigationBar * createNavigationBar(Wt::WContainerWidget * container);
private:
Session & _session;
std::unique_ptr<NavigationBar> _navigationBar;
Wt::WTreeView * _categoryTree;
};
}

View File

@ -7,6 +7,6 @@ namespace eedb {
class HomePageMock final : public HomePage {
// HomePage interface
public:
MOCK_METHOD1(show, void(Wt::WContainerWidget * parent));
MOCK_METHOD1(attachTo, void(Wt::WContainerWidget * parent));
};
}

View File

View File

@ -5,13 +5,13 @@
#include "mocks/SessionMock.hpp"
#include "mocks/widgets/NavigationBarMock.hpp"
#include <eedb/widgets/HomePage.hpp>
#include <eedb/widgets/DefaultHomePage.hpp>
#include <eedb/db/connection.hpp>
class HomePageTests : public WidgetTest {
class DefaultHomePageTests : public WidgetTest {
public:
HomePageTests() : WidgetTest(), sut(std::make_unique< eedb::Home >(session, navigationBar.getPtr())) {
sut->show(app.root());
DefaultHomePageTests() : WidgetTest(), sut(std::make_unique< eedb::DefaultHomePage >(session, navigationBar.getPtr())) {
sut->attachTo(app.root());
}
protected:
@ -19,7 +19,7 @@ class HomePageTests : public WidgetTest {
UniquePtrMockWrapper< eedb::NavigationBarMock > navigationBar;
std::unique_ptr< eedb::Home > sut;
std::unique_ptr< eedb::DefaultHomePage > sut;
};
// TEST_F(HomePageTests, ctor) {}

View File

@ -3,6 +3,7 @@
#include <eedb/widgets/DefaultNavigationBar.hpp>
#include <Wt/WMenuItem>
#include <Wt/WNavigationBar>
struct SimpleCallback {
MOCK_METHOD0(callback, void());
@ -22,10 +23,20 @@ class DefaultNavigationBarTests : public WidgetTest {
return ut_find< Wt::WMenuItem >("navigation_bar.home_menu");
}
auto find_navigationBar() {
return ut_find< Wt::WNavigationBar >("navigation_bar");
}
protected:
std::unique_ptr< eedb::DefaultNavigationBar > sut;
};
TEST_F(DefaultNavigationBarTests, hasAllNeededElements) {
find_logoutItem();
find_homeItem();
find_navigationBar();
}
TEST_F(DefaultNavigationBarTests, loginAction) {
SimpleCallback cb;
EXPECT_CALL(cb, callback());

View File

@ -58,7 +58,7 @@ class EedbApplicationTest : public Test {
void expectCreateHomePage() {
EXPECT_CALL(homePageFactory, impl()).WillOnce(Return(ByMove(homePage.getPtr())));
EXPECT_CALL(*authPage, detach());
EXPECT_CALL(*homePage, show(_));
EXPECT_CALL(*homePage, attachTo(_));
}
protected: