00001
00002
00003
00004
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(SLOT( 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 (HangmanDb::addUser(User, pass)) {
00070 confirmLogin(L"<p>Welcome, "
00071 + User + L". Good luck with your first game!</p>");
00072 } else {
00073 IntroText
00074 ->setText("<p>You entered the wrong password, or the username "
00075 "combination is already in use. If you are a returning "
00076 "user, please try again. If you are a new user, please "
00077 "try a different name.</p>");
00078 IntroText->decorationStyle().setForegroundColor(Wt::red);
00079 Username->setText("");
00080 Password->setText("");
00081 }
00082 }
00083
00084 void LoginWidget::confirmLogin(const std::wstring text)
00085 {
00086 clear();
00087
00088 WText *title = new WText("Loging successful", this);
00089 title->decorationStyle().font().setSize(WFont::XLarge);
00090
00091 new WText(text, this);
00092 (new WPushButton("Start playing", this))
00093 ->clicked().connect(SLOT(this, LoginWidget::startPlaying));
00094 }
00095
00096 void LoginWidget::startPlaying()
00097 {
00098 loginSuccessful.emit(User, Dict);
00099 }