File: LettersWidget.C

package info (click to toggle)
witty 3.3.3%2Bdfsg-4.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 28,228 kB
  • ctags: 26,694
  • sloc: cpp: 147,809; ansic: 77,999; xml: 16,331; sh: 1,303; makefile: 198; java: 86; sql: 14
file content (59 lines) | stat: -rw-r--r-- 1,336 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* 
 * Copyright (C) 2011 Emweb bvba, Heverlee, Belgium
 *
 * See the LICENSE file for terms of use.
 */

#include "LettersWidget.h"

#include <Wt/WPushButton>
#include <Wt/WTable>
#include <Wt/WApplication>
#include <Wt/WEvent>

using namespace Wt;

LettersWidget::LettersWidget(WContainerWidget *parent)
  : WCompositeWidget(parent)
{
  setImplementation(impl_ = new WTable());

  impl_->resize(13*30, WLength::Auto);

  for (unsigned int i = 0; i < 26; ++i) {
    std::string c(1, 'A' + i);
    WPushButton *character = new WPushButton(c,
					     impl_->elementAt(i / 13, i % 13));
    letterButtons_.push_back(character);
    character->resize(WLength(30), WLength::Auto);

    character->clicked().connect
      (boost::bind(&LettersWidget::processButton, this, character));

	WApplication::instance()->globalKeyPressed().connect
	  (boost::bind(&LettersWidget::processButtonPushed, this, _1, character));
  }
}

void LettersWidget::processButton(WPushButton *b)
{
  b->disable();
  letterPushed_.emit(b->text().toUTF8()[0]);
}

void LettersWidget::processButtonPushed(WKeyEvent &e, WPushButton *b)
{
  if(isHidden())
	  return;

  if(e.key() == b->text().toUTF8()[0])
    processButton(b);
}

void LettersWidget::reset()
{
  for (unsigned int i = 0; i < letterButtons_.size(); ++i)
    letterButtons_[i]->enable();

  show();
}