Wt examples 3.1.10
|
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 }