more consistent display of player name
[multypo.git] / qt / player.cpp
1 #include "player.h"
2
3 #include <QLayout>
4 #include <QDebug>
5 #include <QTextDocument>
6
7 Player::Player(QWidget* parent) : score(0), state(Naming) {
8         theLabel = new QLabel (parent);
9     theLabel->setTextFormat(Qt::RichText);
10         parent->layout()->addWidget(theLabel);
11         qDebug() << "Player created";
12 }
13
14 void Player::handleKey(QString str)
15 {
16     // edit "current line"
17     if (str.length() == 1) {
18         currentWord += str;
19     }
20     else if (str == "BackSpace") {
21         currentWord.chop(1);
22     }
23     // see if this does anything useful
24     switch (state) {
25         case Naming:
26             setLabel(currentWord, BASE_COLOR);
27             if (str == "Return") {
28                 name = currentWord;
29                 state = Waiting;
30                 setLabel("<Bereit>", READY_COLOR);
31             }
32             break;
33         case Waiting:
34             break;
35         case Typing:
36             setLabel(currentWord, BASE_COLOR);
37             break;
38     }
39 }
40
41 void Player::setLabel(QString body, QString color)
42 {
43     QString text = QString("<font color=%1>").arg(color);
44     if (state >= Waiting) {
45         text += QString("<font size=-3>%1:</font><br>").arg(Qt::escape(name));
46     }
47     text += Qt::escape(body);
48     theLabel->setText(text);
49 }
50
51 void Player::wordComplete(int points)
52 {
53     score += points;
54     state = Waiting;
55     setLabel(currentWord, READY_COLOR);
56 }
57
58 QString Player::getCurrentWord() {
59     Q_ASSERT(state == Typing);
60         return currentWord;
61 }
62
63 void Player::nextWord() {
64     Q_ASSERT(state == Waiting);
65         currentWord = "";
66     setLabel("<Warte auf Eingabe>", BASE_COLOR);
67         state = Typing;
68 }
69
70 void Player::showScore() {
71     Q_ASSERT(state == Waiting);
72     setLabel(QString ("%1 Punkte").arg(score), READY_COLOR);
73 }