X-Git-Url: https://git.ralfj.de/multypo.git/blobdiff_plain/e52cebeda021cf4e76330eabd3777ec6136720d3..7a18f439db0b8a7d55ffd0368bb0159afa79ab62:/qt/player.cpp?ds=sidebyside diff --git a/qt/player.cpp b/qt/player.cpp index 937bbab..c75bb46 100644 --- a/qt/player.cpp +++ b/qt/player.cpp @@ -2,58 +2,72 @@ #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); - modifyable = true; qDebug() << "Player created"; } -bool Player::hasName() { - return !name.isEmpty(); +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; + } } -QString Player::getName() { - return name; +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::getCurrentLine() { - return currentLine; +void Player::wordComplete(int points) +{ + score += points; + state = Waiting; + setLabel(currentWord, READY_COLOR, name+":"); } -void Player::setWaiting(QString labeltext) { - theLabel->setText(labeltext); - modifyable = false; +QString Player::getCurrentWord() { + Q_ASSERT(state == Typing); + return currentWord; } -void Player::resetText() { - currentLine.clear(); - theLabel->setText(currentLine); - modifyable = true; +void Player::nextWord() { + Q_ASSERT(state == Waiting); + currentWord = ""; + setLabel("", BASE_COLOR, name+":"); + state = Typing; } -bool Player::handleKey(QString str) { - if (!modifyable) - return false; - bool newChar = false; - if (str.length() == 1) { - currentLine += str; - newChar = true; - } else if (!hasName() && str == "Return") { - // set name - name = currentLine; - currentLine = ""; - } else if (str == "BackSpace") { - currentLine.chop(1); - } - theLabel->setText(currentLine); - return newChar; +void Player::showScore() { + Q_ASSERT(state == Waiting); + setLabel(QString ("Spieler %1 hat %2 Punkte.").arg(name).arg(score), READY_COLOR); }