Project

General

Profile

RE: WT3 to WT4 Port » BaseScreen.C

Sebastian Fett, 06/17/2019 11:51 AM

 
#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;
}
(2-2/5)