Wt examples  3.3.5
/usr/src/RPM/BUILD/wt-3.3.5-rc2/examples/hangman/LettersWidget.C
Go to the documentation of this file.
00001 /* 
00002  * Copyright (C) 2011 Emweb bvba, Heverlee, Belgium
00003  *
00004  * See the LICENSE file for terms of use.
00005  */
00006 
00007 #include "LettersWidget.h"
00008 
00009 #include <Wt/WPushButton>
00010 #include <Wt/WTable>
00011 #include <Wt/WApplication>
00012 #include <Wt/WEvent>
00013 
00014 using namespace Wt;
00015 
00016 LettersWidget::LettersWidget(WContainerWidget *parent)
00017   : WCompositeWidget(parent)
00018 {
00019   setImplementation(impl_ = new WTable());
00020 
00021   impl_->resize(13*30, WLength::Auto);
00022 
00023   for (unsigned int i = 0; i < 26; ++i) {
00024     std::string c(1, 'A' + i);
00025     WPushButton *character = new WPushButton(c,
00026                                              impl_->elementAt(i / 13, i % 13));
00027     letterButtons_.push_back(character);
00028     character->resize(WLength(30), WLength::Auto);
00029 
00030     character->clicked().connect
00031       (boost::bind(&LettersWidget::processButton, this, character));
00032 
00033         WApplication::instance()->globalKeyPressed().connect
00034           (boost::bind(&LettersWidget::processButtonPushed, this, _1, character));
00035   }
00036 }
00037 
00038 void LettersWidget::processButton(WPushButton *b)
00039 {
00040   b->disable();
00041   letterPushed_.emit(b->text().toUTF8()[0]);
00042 }
00043 
00044 void LettersWidget::processButtonPushed(const WKeyEvent &e, WPushButton *b)
00045 {
00046   if(isHidden())
00047           return;
00048 
00049   if(e.key() == b->text().toUTF8()[0])
00050     processButton(b);
00051 }
00052 
00053 void LettersWidget::reset()
00054 {
00055   for (unsigned int i = 0; i < letterButtons_.size(); ++i)
00056     letterButtons_[i]->enable();
00057 
00058   show();
00059 }

Generated on Tue Mar 22 2016 for the C++ Web Toolkit (Wt) by doxygen 1.7.6.1