add category tree class
This commit is contained in:
parent
f19f077161
commit
6656d2da02
@ -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};
|
||||
|
||||
@ -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());
|
||||
|
||||
7
src/eedb/data/Category.hpp
Normal file
7
src/eedb/data/Category.hpp
Normal file
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
namespace eedb {
|
||||
class Category {
|
||||
public:
|
||||
};
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
namespace Wt {
|
||||
class WContainerWidget;
|
||||
|
||||
21
src/eedb/widgets/CategoryThree.hpp
Normal file
21
src/eedb/widgets/CategoryThree.hpp
Normal 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;
|
||||
};
|
||||
}
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
#include <eedb/widgets/AuthPage.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace Wt::Auth {
|
||||
class AbstractUserDatabase;
|
||||
class Login;
|
||||
|
||||
15
src/eedb/widgets/DefaultCategoryTree.cpp
Normal file
15
src/eedb/widgets/DefaultCategoryTree.cpp
Normal 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 &) >) {}
|
||||
}
|
||||
31
src/eedb/widgets/DefaultCategoryTree.hpp
Normal file
31
src/eedb/widgets/DefaultCategoryTree.hpp
Normal 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;
|
||||
};
|
||||
}
|
||||
@ -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);
|
||||
31
src/eedb/widgets/DefaultHomePage.hpp
Normal file
31
src/eedb/widgets/DefaultHomePage.hpp
Normal 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;
|
||||
};
|
||||
}
|
||||
@ -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");
|
||||
|
||||
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@ -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));
|
||||
};
|
||||
}
|
||||
|
||||
0
tests/unit/test_eedb_CategoriesTree.cpp
Normal file
0
tests/unit/test_eedb_CategoriesTree.cpp
Normal 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) {}
|
||||
@ -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());
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user