Wt examples 3.1.10
/build/buildd/witty-3.1.10/examples/hangman/LoginWidget.C
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2005 Wim Dumon
00003  *
00004  * See the LICENSE file for terms of use.
00005  */
00006 
00007 #include <Wt/WText>
00008 #include <Wt/WLabel>
00009 #include <Wt/WLineEdit>
00010 #include <Wt/WBreak>
00011 #include <Wt/WCssDecorationStyle>
00012 #include <Wt/WPushButton>
00013 #include <Wt/WTable>
00014 #include <Wt/WTableCell>
00015 #include <Wt/WComboBox>
00016 
00017 #include "LoginWidget.h"
00018 #include "HangmanDb.h"
00019 #include "Dictionary.h"
00020 
00021 LoginWidget::LoginWidget(WContainerWidget *parent):
00022    WContainerWidget(parent)
00023 {
00024    setPadding(100, Left | Right);
00025 
00026    WText *title = new WText("Login", this);
00027    title->decorationStyle().font().setSize(WFont::XLarge);
00028 
00029    IntroText =
00030       new WText("<p>Hangman keeps track of the best players. To recognise "
00031                 "you, we ask you to log in. If you never logged in before, "
00032                 "choose any name and password. If you don't want to be in "
00033                 "our database for some reason, use the 'guest/guest' "
00034                 "account.</p>"
00035                 "<p>Warning: hangman contains some words and "
00036                 "pictures that may offend really young players.</p>", this);
00037 
00038    WTable *layout = new WTable(this);
00039    WLabel *usernameLabel = new WLabel("User name: ", layout->elementAt(0, 0));
00040    layout->elementAt(0, 0)->resize(WLength(14, WLength::FontEx), WLength::Auto);
00041    Username = new WLineEdit(layout->elementAt(0, 1));
00042    usernameLabel->setBuddy(Username);
00043 
00044    WLabel *passwordLabel = new WLabel("Password: ", layout->elementAt(1, 0));
00045    Password = new WLineEdit(layout->elementAt(1, 1));
00046    Password->setEchoMode(WLineEdit::Password);
00047    passwordLabel->setBuddy(Password);
00048 
00049    WLabel *languageLabel = new WLabel("Language: ", layout->elementAt(2, 0));
00050    Language = new WComboBox(layout->elementAt(2, 1));
00051    Language->insertItem(0, "English words (18957 words)");
00052    Language->insertItem(1, "Nederlandse woordjes (1688 woorden)");
00053    languageLabel->setBuddy(Language);
00054 
00055    new WBreak(this);
00056 
00057    WPushButton *LoginButton = new WPushButton("Login", this);
00058    LoginButton->clicked().connect(this, &LoginWidget::checkCredentials);
00059 }
00060 
00061 void LoginWidget::checkCredentials()
00062 {
00063    User = Username->text();
00064    std::wstring pass = Password->text();
00065    Dict = (Dictionary) Language->currentIndex();
00066    
00067    if (HangmanDb::validLogin(User, pass)) {
00068       confirmLogin(L"<p>Welcome back, " + User + L".</p>");
00069    } else if (User == L"guest" && pass == L"guest") {
00070       confirmLogin(L"<p>Welcome guest, good luck.</p>");
00071    } else if (HangmanDb::addUser(User, pass)) {
00072       confirmLogin(L"<p>Welcome, "
00073                    + User + L". Good luck with your first game!</p>");
00074    } else {
00075       IntroText
00076         ->setText("<p>You entered the wrong password, or the username "
00077                   "combination is already in use. If you are a returning "
00078                   "user, please try again. If you are a new user, please "
00079                   "try a different name.</p>");
00080       IntroText->decorationStyle().setForegroundColor(Wt::red);
00081       Username->setText("");
00082       Password->setText("");
00083    }
00084 }
00085 
00086 void LoginWidget::confirmLogin(const std::wstring text)
00087 {
00088    clear();
00089 
00090    WText *title = new WText("Loging successful", this);
00091    title->decorationStyle().font().setSize(WFont::XLarge);
00092 
00093    new WText(text, this);
00094    (new WPushButton("Start playing", this))
00095      ->clicked().connect(this, &LoginWidget::startPlaying);
00096 }
00097 
00098 void LoginWidget::startPlaying()
00099 {
00100    loginSuccessful.emit(User, Dict);
00101 }

Generated on Mon Nov 14 2011 for the C++ Web Toolkit (Wt) by doxygen 1.7.4