|
#include "BaseScreen.h"
|
|
|
|
// creates the first landing screen of the webapplication
|
|
BaseScreen::BaseScreen(Session& session)
|
|
: WContainerWidget(),
|
|
session_(session)
|
|
{
|
|
setOverflow(Wt::Overflow::Hidden);
|
|
Wt::WMessageBox *aboutInfo = new Wt::WMessageBox("About Information", "<p> UserID is </p>", Wt::Icon::Information, Wt::StandardButton::Ok);
|
|
// authentication widget responsible for login/user registration
|
|
auto authWidget = std::make_unique<Wt::Auth::AuthWidget>(Session::auth(), session_.users(), session_.login());
|
|
authWidget->model()->addPasswordAuth(&Session::passwordAuth());
|
|
authWidget->setRegistrationEnabled(true);
|
|
|
|
authWidget->processEnvironment();
|
|
|
|
auto navigation = std::make_unique<Wt::WNavigationBar>();
|
|
auto navigation_ = navigation.get();
|
|
std::unique_ptr<Wt::WContainerWidget> container_logo = std::make_unique<Wt::WContainerWidget>();
|
|
//Wt3: Wt::WImage *image = new Wt::WImage(Wt::WLink("icons/wt_powered.jpg"),container_logo);
|
|
//Wt::WImage *image = new Wt::WImage(Wt::WLink("icons/wt_powered.jpg"));
|
|
container_logo->addNew<Wt::WImage>(Wt::WLink("icons/wt_powere.jpg"));
|
|
// Setup a Right-aligned menu.
|
|
std::unique_ptr<Wt::WMenu> rightMenu_ = std::make_unique<Wt::WMenu>();
|
|
auto rightMenu = navigation_->addMenu(std::move(rightMenu_), Wt::AlignmentFlag::Right); //THIS HERE
|
|
|
|
|
|
//test sebastian
|
|
|
|
|
|
|
|
//end test
|
|
// Create a popup submenu for the Help menu.
|
|
// Profile Menu
|
|
auto popupPtr = std::make_unique<Wt::WPopupMenu>();
|
|
auto popup = popupPtr.get();
|
|
Wt::WString name = session_.login().user().identity(Wt::Auth::Identity::LoginName);
|
|
Wt::WString id = session_.login().user().id();
|
|
|
|
//std::cout << "Session status: " << session_.login().user().status() << "\n";
|
|
Wt::WString sstatus;
|
|
|
|
//wt3: if (session_.login().user().status() == 1)
|
|
if (session_.login().user().status() == Wt::Auth::AccountStatus::Normal)
|
|
{
|
|
sstatus = "logged in";
|
|
}
|
|
else
|
|
{
|
|
sstatus = "Abnormal";
|
|
}
|
|
// Wt::WString timeStamp = session_.login().
|
|
popup->addItem(name);
|
|
//popup->addItem("logout");
|
|
popup->addSeparator();
|
|
popup->addItem("About")->triggered().connect(std::bind([=] () {
|
|
std::cout << "About information: \n";
|
|
Wt::WMessageBox *aboutInfo = new Wt::WMessageBox("About Information", "<p> UserID is "+ id + ".</p> <p> UserName is " + name + ". </p><p> UserStatus is "+ sstatus +". </p>", Wt::Icon::Information, Wt::StandardButton::Ok);
|
|
aboutInfo->setModal(false);
|
|
aboutInfo->buttonClicked().connect(std::bind ([=] (){delete aboutInfo;}));
|
|
// aboutInfo->setText("UserID: " + id + " UserName: " + name + " UserStatus: " + status );
|
|
// Wt::WPushButton *exitButton = aboutInfo->addButton("Ok",Wt::StandardButton::Cancel);
|
|
// exitButton->clicked().connect(std::bind([=] () {delete aboutInfo;}));
|
|
aboutInfo->show();
|
|
|
|
//box->setText("Test");
|
|
}));
|
|
|
|
popup->addItem("logout")->triggered().connect(std::bind([=] () {
|
|
session_.login().logout();
|
|
std::cout<< "Inside the logout function-------\n";
|
|
}));
|
|
|
|
|
|
//End Profile Menu
|
|
|
|
auto item = std::make_unique<Wt::WMenuItem>("Profile");
|
|
item->setMenu(std::move(popupPtr));
|
|
rightMenu->addItem(std::move(item));//segfault change like THIS HERE
|
|
|
|
// Add a Search control.
|
|
auto edit = std::make_unique<Wt::WLineEdit>();
|
|
edit->setValueText("Enter a search item");
|
|
|
|
navigation_->addSearch(std::move(edit), Wt::AlignmentFlag::Right);
|
|
|
|
|
|
navigation_->addStyleClass("main-nav");
|
|
|
|
// keeping the link for webtoolkit.eu/widgets for code reference purpose
|
|
// ToDo : remove this external link in production code
|
|
navigation_->setTitle("<b>FPM</b>Web",
|
|
"http://www.webtoolkit.eu/widgets");
|
|
navigation_->setResponsive(true);
|
|
|
|
auto contentsStack = std::make_unique<Wt::WStackedWidget>();
|
|
auto contentsStack_ = contentsStack.get();
|
|
Wt::WAnimation animation(Wt::AnimationEffect::Fade,
|
|
Wt::TimingFunction::Linear,
|
|
200);
|
|
contentsStack_->setTransitionAnimation(animation, true);
|
|
|
|
/*
|
|
* Setup the top-level menu
|
|
*/
|
|
auto menuPtr = std::make_unique<Wt::WMenu>(contentsStack_);
|
|
auto menu = menuPtr.get();
|
|
menu->setInternalPathEnabled();
|
|
menu->setInternalBasePath("/");
|
|
addToMenu(menu, "User", std::move(std::make_unique<UserScreen>(session_)));//segfault in make userscreen
|
|
addToMenu(menu, "CreateModel", std::move(std::make_unique<CreateModelScreen>(session_)));
|
|
addToMenu(menu, "AdminTasks", std::move(std::make_unique<AdminScreen>()));
|
|
navigation_->addMenu(std::move(menuPtr));
|
|
|
|
//Hint to use enum of session_.login().state() - Not used currently.
|
|
// else if (session_.login().state() == Wt::Auth::LoginState::LoggedOut)
|
|
|
|
/*
|
|
* Add it all inside a layout - depending on log-in state.
|
|
*/
|
|
auto layout = std::make_unique<Wt::WVBoxLayout>(); //(this)
|
|
|
|
|
|
layout->addWidget(std::move(container_logo));
|
|
//layout->addWidget(authWidget); //Commenting this prevents a double navigation lopin menu!!
|
|
//Wt::WVBoxLayout *layout2 = new Wt::WVBoxLayout(layout);
|
|
layout->addWidget(std::move(navigation));
|
|
layout->addWidget(std::move(contentsStack));
|
|
layout->setContentsMargins( 50 , 50, 0, 0);
|
|
//layout->setContentsMargins(0,100,0,0);
|
|
}
|
|
|
|
std::unique_ptr<Wt::WMenuItem> BaseScreen::addToMenu(Wt::WMenu *menu,
|
|
const Wt::WString& name,
|
|
std::unique_ptr<TopicWidget> topic)
|
|
{
|
|
|
|
auto result = std::make_unique<Wt::WContainerWidget>();
|
|
|
|
// Wt::WContainerWidget *pane = addWidget(std::make_unique<Wt::WContainerWidget>());
|
|
auto pane = std::make_unique<Wt::WContainerWidget>();
|
|
auto panePtr = pane.get();
|
|
auto vLayout = result->setLayout(std::make_unique<Wt::WVBoxLayout>());
|
|
//auto vLayout = vLayoutPtr.get();
|
|
|
|
//this is from top
|
|
|
|
auto hLayout = pane->setLayout(std::make_unique<Wt::WHBoxLayout>());
|
|
//auto hLayout = hLayoutPtr.get();
|
|
auto item = std::make_unique<Wt::WMenuItem>(name, std::move(result));
|
|
|
|
|
|
auto subStack = std::make_unique<Wt::WStackedWidget>();
|
|
//auto subStack = subStackPtr.get();
|
|
subStack->addStyleClass("contents");
|
|
subStack->setOverflow(Wt::Overflow::Auto);
|
|
auto subMenu = std::make_unique<Wt::WMenu>(subStack.get());
|
|
subMenu->setInternalPathEnabled();
|
|
subMenu->setInternalBasePath("/" + item->pathComponent());
|
|
//auto subMenu = subMenuPtr.get();
|
|
|
|
subMenu->addStyleClass("nav-pills nav-stacked");
|
|
menu->addItem(std::move(item));
|
|
subMenu->setWidth(200);
|
|
// hLayout->addWidget(std::move(subMenu)); // 2tes mal sub menu moved testen
|
|
topic->populateSubMenu(std::move(subMenu));
|
|
hLayout->addWidget(std::move(subStack),1);
|
|
vLayout->setContentsMargins(80, 80, 0, 0); //
|
|
vLayout->addWidget(std::move(topic)); // copy pasted from top
|
|
vLayout->addWidget(std::move(pane), 1); //
|
|
|
|
return item;
|
|
}
|