Wt examples  3.7.1
HangmanGame.C
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2011 Emweb bv, Herent, Belgium
3  *
4  * See the LICENSE file for terms of use.
5  */
6 
7 #include <Wt/WAnchor>
8 #include <Wt/WText>
9 #include <Wt/WStackedWidget>
10 #include <Wt/WVBoxLayout>
11 #include <Wt/WHBoxLayout>
12 #include <Wt/WApplication>
13 #include <Wt/Auth/AuthWidget>
14 
15 #include "HangmanGame.h"
16 #include "HangmanWidget.h"
17 #include "HighScoresWidget.h"
18 
19 using namespace Wt;
20 
22  WContainerWidget(parent),
23  game_(0),
24  scores_(0)
25 {
27 
29  session_.users(), this);
31  authModel->addOAuth(Session::oAuth());
32 
33  Auth::AuthWidget *authWidget = new Auth::AuthWidget(session_.login());
34  authWidget->setModel(authModel);
35  authWidget->setRegistrationEnabled(true);
36 
37  WText *title = new WText("<h1>A Witty game: Hangman</h1>");
38  addWidget(title);
39 
40  addWidget(authWidget);
41 
42  mainStack_ = new WStackedWidget();
43  mainStack_->setStyleClass("gamestack");
45 
46  links_ = new WContainerWidget();
47  links_->setStyleClass("links");
48  links_->hide();
50 
51  backToGameAnchor_ = new WAnchor("/play", "Gaming Grounds", links_);
52  backToGameAnchor_->setLink(WLink(WLink::InternalPath, "/play"));
53 
54  scoresAnchor_ = new WAnchor("/highscores", "Highscores", links_);
55  scoresAnchor_->setLink(WLink(WLink::InternalPath, "/highscores"));
56 
57  WApplication::instance()->internalPathChanged()
58  .connect(this, &HangmanGame::handleInternalPath);
59 
60  authWidget->processEnvironment();
61 }
62 
64 {
65  if (session_.login().loggedIn()) {
66  links_->show();
67  handleInternalPath(WApplication::instance()->internalPath());
68  } else {
69  mainStack_->clear();
70  game_ = 0;
71  scores_ = 0;
72  links_->hide();
73  }
74 }
75 
76 void HangmanGame::handleInternalPath(const std::string &internalPath)
77 {
78  if (session_.login().loggedIn()) {
79  if (internalPath == "/play")
80  showGame();
81  else if (internalPath == "/highscores")
83  else
84  WApplication::instance()->setInternalPath("/play", true);
85  }
86 }
87 
89 {
90  if (!scores_)
92 
94  scores_->update();
95 
96  backToGameAnchor_->removeStyleClass("selected-link");
97  scoresAnchor_->addStyleClass("selected-link");
98 }
99 
101 {
102  if (!game_) {
105  }
106 
108 
109  backToGameAnchor_->addStyleClass("selected-link");
110  scoresAnchor_->removeStyleClass("selected-link");
111 }
void showHighScores()
Definition: HangmanGame.C:88
HangmanGame(Wt::WContainerWidget *parent=0)
Definition: HangmanGame.C:21
Wt::WAnchor * backToGameAnchor_
Definition: HangmanGame.h:36
virtual void setStyleClass(const WString &styleClass) override
bool loggedIn() const
virtual void addOAuth(const OAuthService *auth)
std::string userName() const
Definition: Session.C:151
Session session_
Definition: HangmanGame.h:39
void showGame()
Definition: HangmanGame.C:100
Wt::Auth::AbstractUserDatabase & users()
Definition: Session.C:211
void setCurrentWidget(WWidget *widget)
Wt::WStackedWidget * mainStack_
Definition: HangmanGame.h:32
Signal & changed()
virtual void removeStyleClass(const WString &styleClass, bool force=false) override
static const Wt::Auth::AuthService & auth()
Definition: Session.C:216
virtual void addStyleClass(const WString &styleClass, bool force=false) override
virtual void clear()
virtual void addPasswordAuth(const AbstractPasswordService *auth)
HangmanWidget * game_
Definition: HangmanGame.h:33
static const std::vector< const Wt::Auth::OAuthService * > & oAuth()
Definition: Session.C:226
Wt::Auth::Login & login()
Definition: Session.h:32
Wt::WAnchor * scoresAnchor_
Definition: HangmanGame.h:37
Wt::WContainerWidget * links_
Definition: HangmanGame.h:35
virtual void processEnvironment()
void setModel(std::unique_ptr< AuthModel > model)
void setRegistrationEnabled(bool enabled)
void setLink(const WLink &link)
HighScoresWidget * scores_
Definition: HangmanGame.h:34
static const Wt::Auth::AbstractPasswordService & passwordAuth()
Definition: Session.C:221
void handleInternalPath(const std::string &internalPath)
Definition: HangmanGame.C:76
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method) override
void addToScore(int s)
Definition: Session.C:159
Wt::Signal< int > & scoreUpdated()
Definition: HangmanWidget.h:25
virtual void addWidget(std::unique_ptr< WWidget > widget)
void onAuthEvent()
Definition: HangmanGame.C:63

Generated on Tue Dec 15 2020 for the C++ Web Toolkit (Wt) by doxygen 1.8.13