X-Git-Url: https://git.ralfj.de/multypo.git/blobdiff_plain/e8b07da1c5251e412f80fdeb94fb327b641fc956..7a18f439db0b8a7d55ffd0368bb0159afa79ab62:/qt/player.cpp diff --git a/qt/player.cpp b/qt/player.cpp index 871ecb9..c75bb46 100644 --- a/qt/player.cpp +++ b/qt/player.cpp @@ -1,46 +1,73 @@ #include "player.h" #include +#include +#include -static QString colorToString(QColor col) -{ - return QString("#%1%2%3").arg(col.red(), 2, 16, QChar('0')) - .arg(col.green(), 2, 16, QChar('0')) - .arg(col.blue(), 2, 16, QChar('0')); -} - -Player::Player(QWidget* parent) { +Player::Player(QWidget* parent) : score(0), state(Naming) { theLabel = new QLabel (parent); + theLabel->setTextFormat(Qt::RichText); parent->layout()->addWidget(theLabel); + qDebug() << "Player created"; } +void Player::handleKey(QString str) +{ + // edit "current line" + if (str.length() == 1) { + currentWord += str; + } + else if (str == "BackSpace") { + currentWord.chop(1); + } + // see if this does anything useful + switch (state) { + case Naming: + setLabel(currentWord, BASE_COLOR); + if (str == "Return") { + name = currentWord; + state = Waiting; + setLabel(name, READY_COLOR); + } + break; + case Waiting: + break; + case Typing: + setLabel(currentWord, BASE_COLOR, name+":"); + break; + } +} -bool Player::hasName() { - return !name.isNull(); +void Player::setLabel(QString body, QString color, QString header) +{ + QString text = QString("").arg(color); + if (!header.isEmpty()) { + text += QString("%1
").arg(Qt::escape(header)); + } + text += Qt::escape(body); + theLabel->setText(text); } -QString Player::getName() { - return name; +void Player::wordComplete(int points) +{ + score += points; + state = Waiting; + setLabel(currentWord, READY_COLOR, name+":"); } -QString Player::getCurrentLine() { - return currentLine; +QString Player::getCurrentWord() { + Q_ASSERT(state == Typing); + return currentWord; } -void Player::resetText() { - currentLine.clear(); - theLabel->setText(currentLine); +void Player::nextWord() { + Q_ASSERT(state == Waiting); + currentWord = ""; + setLabel("", BASE_COLOR, name+":"); + state = Typing; } -void Player::handleKey(QString str) { - if (str.length() == 1) { - currentLine += str; - } else if (!hasName() && str == "Return") { - // set name - name = currentLine; - currentLine = ""; - } else if (str == "BackSpace") { - currentLine.chop(1); - } - theLabel->setText(currentLine); +void Player::showScore() { + Q_ASSERT(state == Waiting); + setLabel(QString ("Spieler %1 hat %2 Punkte.").arg(name).arg(score), READY_COLOR); }