Commit b7ab2d97 authored by Max-Wilhelm Bruker's avatar Max-Wilhelm Bruker
Browse files

support for women

parent 4777d18f
...@@ -38,6 +38,10 @@ ...@@ -38,6 +38,10 @@
<file>resources/icon_player.svg</file> <file>resources/icon_player.svg</file>
<file>resources/icon_spectator.svg</file> <file>resources/icon_spectator.svg</file>
<file>resources/genders/male.svg</file>
<file>resources/genders/female.svg</file>
<file>resources/genders/unknown.svg</file>
<file>translations/cockatrice_de.qm</file> <file>translations/cockatrice_de.qm</file>
<file>translations/cockatrice_en.qm</file> <file>translations/cockatrice_en.qm</file>
<file>translations/cockatrice_es.qm</file> <file>translations/cockatrice_es.qm</file>
...@@ -103,7 +107,7 @@ ...@@ -103,7 +107,7 @@
<file>resources/userlevels/normal.svg</file> <file>resources/userlevels/normal.svg</file>
<file>resources/userlevels/registered.svg</file> <file>resources/userlevels/registered.svg</file>
<file>resources/userlevels/judge.svg</file> <file>resources/userlevels/moderator.svg</file>
<file>resources/userlevels/admin.svg</file> <file>resources/userlevels/admin.svg</file>
<file>resources/news/exclamation_mark.svg</file> <file>resources/news/exclamation_mark.svg</file>
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.0"
width="75"
height="75"
id="svg34864">
<defs
id="defs34866" />
<g
transform="translate(-348.7552,-478.0905)"
id="layer1">
<g
transform="matrix(1.071197,0,0,1.075147,-13.30677,-36.99488)"
id="g3773">
<path
d="M 176 33 A 11 11 0 1 1 154,33 A 11 11 0 1 1 176 33 z"
transform="matrix(1.540096,0,0,1.5384,118.8893,454.0543)"
style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path3939" />
<path
d="M 373.00525,521.74399 L 373.00525,543.28159"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:4.61774349;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3941" />
<path
d="M 363.76467,534.05119 L 382.24582,534.05119"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:4.61774349;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4816" />
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.0" width="75" height="75" id="svg34864">
<defs id="defs34866"/>
<g transform="translate(-348.755, -478.091)" id="layer1">
<g transform="matrix(1.94812, 0, 0, 1.93731, -342.43, -460.01)" id="g1872">
<path d="M 387.95009,489.60348 L 378.66214,498.89143" style="opacity: 1; color: black; fill: none; fill-opacity: 0.75; fill-rule: evenodd; stroke: black; stroke-width: 3; stroke-linecap: butt; stroke-linejoin: miter; marker: none; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline; overflow: visible;" id="path26867"/>
<path d="M 49.396475 36.70454 A 15.623922 16.319134 0 1 1 18.14863,36.70454 A 15.623922 16.319134 0 1 1 49.396475 36.70454 z" transform="matrix(0.48802, 0.48802, -0.467594, 0.467594, 371.609, 473.136)" style="opacity: 1; color: black; fill: none; fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 4.44072; stroke-linecap: butt; stroke-linejoin: miter; marker: none; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline; overflow: visible;" id="path26871"/>
<path d="M 379.92823,489.70212 C 387.842,489.70212 387.842,489.70212 387.842,489.70212 L 387.842,497.61589" style="fill: none; fill-rule: evenodd; stroke: black; stroke-width: 3; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="path27759"/>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Intersexual/Transgendered symbol by Gregory Maxwell. Copyright 2005. GFDL-1.2 only -->
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="210"
height="280">
<path d="M 188,38 v 20 l 14,-8 v -42 h -42 l -8,14 h 20 l -37,37 a 79,79 0 1,0 -59,141 v 22 h -27 v 23 h 27 v 27 h 23 v -27 h 27 v -23 h -27 v -22 a 79,79 0 0,0 52,-125 zm -100,27 a 57,57 0 1,1 0,114 a 57,57 0 1,1 0,-114 z"/>
<!-- 88,65 // -63,-10 -->
</svg>
...@@ -46,35 +46,36 @@ void CardZone::clearContents() ...@@ -46,35 +46,36 @@ void CardZone::clearContents()
QString CardZone::getTranslatedName(bool hisOwn, GrammaticalCase gc) const QString CardZone::getTranslatedName(bool hisOwn, GrammaticalCase gc) const
{ {
QString ownerName = player->getName(); QString ownerName = player->getName();
bool female = player->getUserInfo()->getGender() == ServerInfo_User::Female;
if (name == "hand") if (name == "hand")
switch (gc) { switch (gc) {
case CaseNominative: return hisOwn ? tr("his hand", "nominative") : tr("%1's hand", "nominative").arg(ownerName); case CaseNominative: return female ? (hisOwn ? tr("her hand", "nominative, female owner") : tr("%1's hand", "nominative, female owner").arg(ownerName)) : (hisOwn ? tr("his hand", "nominative, male owner") : tr("%1's hand", "nominative, male owner").arg(ownerName));
case CaseGenitive: return hisOwn ? tr("of his hand", "genitive") : tr("of %1's hand", "genitive").arg(ownerName); case CaseGenitive: return female ? (hisOwn ? tr("of her hand", "genitive, female owner") : tr("of %1's hand", "genitive, female owner").arg(ownerName)) : (hisOwn ? tr("of his hand", "genitive, male owner") : tr("of %1's hand", "genitive, male owner").arg(ownerName));
case CaseAccusative: return hisOwn ? tr("his hand", "accusative") : tr("%1's hand", "accusative").arg(ownerName); case CaseAccusative: return female ? (hisOwn ? tr("her hand", "accusative, female owner") : tr("%1's hand", "accusative, female owner").arg(ownerName)) : (hisOwn ? tr("his hand", "accusative, male owner") : tr("%1's hand", "accusative, male owner").arg(ownerName));
} }
else if (name == "deck") else if (name == "deck")
switch (gc) { switch (gc) {
case CaseNominative: return hisOwn ? tr("his library", "nominative") : tr("%1's library", "nominative").arg(ownerName); case CaseNominative: return female ? (hisOwn ? tr("her library", "nominative, female owner") : tr("%1's library", "nominative, female owner").arg(ownerName)) : (hisOwn ? tr("his library", "nominative, male owner") : tr("%1's library", "nominative, male owner").arg(ownerName));
case CaseGenitive: return hisOwn ? tr("of his library", "genitive") : tr("of %1's library", "genitive").arg(ownerName); case CaseGenitive: return female ? (hisOwn ? tr("of her library", "genitive, female owner") : tr("of %1's library", "genitive, female owner").arg(ownerName)) : (hisOwn ? tr("of his library", "genitive, male owner") : tr("of %1's library", "genitive, male owner").arg(ownerName));
case CaseAccusative: return hisOwn ? tr("his library", "accusative") : tr("%1's library", "accusative").arg(ownerName); case CaseAccusative: return female ? (hisOwn ? tr("her library", "accusative, female owner") : tr("%1's library", "accusative, female owner").arg(ownerName)) : (hisOwn ? tr("his library", "accusative, male owner") : tr("%1's library", "accusative, male owner").arg(ownerName));
} }
else if (name == "grave") else if (name == "grave")
switch (gc) { switch (gc) {
case CaseNominative: return hisOwn ? tr("his graveyard", "nominative") : tr("%1's graveyard", "nominative").arg(ownerName); case CaseNominative: return female ? (hisOwn ? tr("her graveyard", "nominative, female owner") : tr("%1's graveyard", "nominative, female owner").arg(ownerName)) : (hisOwn ? tr("his graveyard", "nominative, male owner") : tr("%1's graveyard", "nominative, male owner").arg(ownerName));
case CaseGenitive: return hisOwn ? tr("of his graveyard", "genitive") : tr("of %1's graveyard", "genitive").arg(ownerName); case CaseGenitive: return female ? (hisOwn ? tr("of her graveyard", "genitive, female owner") : tr("of %1's graveyard", "genitive, female owner").arg(ownerName)) : (hisOwn ? tr("of his graveyard", "genitive, male owner") : tr("of %1's graveyard", "genitive, male owner").arg(ownerName));
case CaseAccusative: return hisOwn ? tr("his graveyard", "accusative") : tr("%1's graveyard", "accusative").arg(ownerName); case CaseAccusative: return female ? (hisOwn ? tr("her graveyard", "accusative, female owner") : tr("%1's graveyard", "accusative, female owner").arg(ownerName)) : (hisOwn ? tr("his graveyard", "accusative, male owner") : tr("%1's graveyard", "accusative, male owner").arg(ownerName));
} }
else if (name == "rfg") else if (name == "rfg")
switch (gc) { switch (gc) {
case CaseNominative: return hisOwn ? tr("his exile", "nominative") : tr("%1's exile", "nominative").arg(ownerName); case CaseNominative: return female ? (hisOwn ? tr("her exile", "nominative, female owner") : tr("%1's exile", "nominative, female owner").arg(ownerName)) : (hisOwn ? tr("his exile", "nominative, male owner") : tr("%1's exile", "nominative, male owner").arg(ownerName));
case CaseGenitive: return hisOwn ? tr("of his exile", "genitive") : tr("of %1's exile", "genitive").arg(ownerName); case CaseGenitive: return female ? (hisOwn ? tr("of her exile", "genitive, female owner") : tr("of %1's exile", "genitive, female owner").arg(ownerName)) : (hisOwn ? tr("of his exile", "genitive, male owner") : tr("of %1's exile", "genitive, male owner").arg(ownerName));
case CaseAccusative: return hisOwn ? tr("his exile", "accusative") : tr("%1's exile", "accusative").arg(ownerName); case CaseAccusative: return female ? (hisOwn ? tr("her exile", "accusative, female owner") : tr("%1's exile", "accusative, female owner").arg(ownerName)) : (hisOwn ? tr("his exile", "accusative, male owner") : tr("%1's exile", "accusative, male owner").arg(ownerName));
} }
else if (name == "sb") else if (name == "sb")
switch (gc) { switch (gc) {
case CaseNominative: return hisOwn ? tr("his sideboard", "nominative") : tr("%1's sideboard", "nominative").arg(ownerName); case CaseNominative: return female ? (hisOwn ? tr("her sideboard", "nominative, female owner") : tr("%1's sideboard", "nominative, female owner").arg(ownerName)) : (hisOwn ? tr("his sideboard", "nominative, male owner") : tr("%1's sideboard", "nominative, male owner").arg(ownerName));
case CaseGenitive: return hisOwn ? tr("of his sideboard", "genitive") : tr("of %1's sideboard", "genitive").arg(ownerName); case CaseGenitive: return female ? (hisOwn ? tr("of her sideboard", "genitive, female owner") : tr("of %1's sideboard", "genitive, female owner").arg(ownerName)) : (hisOwn ? tr("of his sideboard", "genitive, male owner") : tr("of %1's sideboard", "genitive, male owner").arg(ownerName));
case CaseAccusative: return hisOwn ? tr("his sideboard", "accusative") : tr("%1's sideboard", "accusative").arg(ownerName); case CaseAccusative: return female ? (hisOwn ? tr("her sideboard", "accusative, female owner") : tr("%1's sideboard", "accusative, female owner").arg(ownerName)) : (hisOwn ? tr("his sideboard", "accusative, male owner") : tr("%1's sideboard", "accusative, male owner").arg(ownerName));
} }
return QString(); return QString();
} }
......
...@@ -15,6 +15,11 @@ QString MessageLogWidget::sanitizeHtml(QString dirty) const ...@@ -15,6 +15,11 @@ QString MessageLogWidget::sanitizeHtml(QString dirty) const
.replace(">", "&gt;"); .replace(">", "&gt;");
} }
bool MessageLogWidget::isFemale(Player *player) const
{
return player->getUserInfo()->getGender() == ServerInfo_User::Female;
}
void MessageLogWidget::logConnecting(QString hostname) void MessageLogWidget::logConnecting(QString hostname)
{ {
append(tr("Connecting to %1...").arg(sanitizeHtml(hostname))); append(tr("Connecting to %1...").arg(sanitizeHtml(hostname)));
...@@ -122,11 +127,11 @@ void MessageLogWidget::logSpectatorSay(QString spectatorName, QString message) ...@@ -122,11 +127,11 @@ void MessageLogWidget::logSpectatorSay(QString spectatorName, QString message)
append(QString("<font color=\"red\">%1:</font> %2").arg(sanitizeHtml(spectatorName)).arg(sanitizeHtml(message))); append(QString("<font color=\"red\">%1:</font> %2").arg(sanitizeHtml(spectatorName)).arg(sanitizeHtml(message)));
} }
void MessageLogWidget::logShuffle(Player *player) void MessageLogWidget::logShuffle(Player *player, CardZone *zone)
{ {
soundEngine->shuffle(); soundEngine->shuffle();
if (currentContext != MessageContext_Mulligan) if (currentContext != MessageContext_Mulligan)
append(tr("%1 shuffles his library.").arg(sanitizeHtml(player->getName()))); append(tr("%1 shuffles %2.").arg(sanitizeHtml(player->getName())).arg(zone->getTranslatedName(true, CaseAccusative)));
} }
void MessageLogWidget::logRollDie(Player *player, int sides, int roll) void MessageLogWidget::logRollDie(Player *player, int sides, int roll)
...@@ -147,9 +152,9 @@ void MessageLogWidget::logDrawCards(Player *player, int number) ...@@ -147,9 +152,9 @@ void MessageLogWidget::logDrawCards(Player *player, int number)
void MessageLogWidget::logUndoDraw(Player *player, QString cardName) void MessageLogWidget::logUndoDraw(Player *player, QString cardName)
{ {
if (cardName.isEmpty()) if (cardName.isEmpty())
append(tr("%1 undoes his last draw.").arg(sanitizeHtml(player->getName()))); append((isFemale(player) ? tr("%1 undoes her last draw.") : tr("%1 undoes his last draw.")).arg(sanitizeHtml(player->getName())));
else else
append(tr("%1 undoes his last draw (%2).").arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName)))); append((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))));
} }
QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position) const QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position) const
...@@ -169,16 +174,16 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car ...@@ -169,16 +174,16 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car
else if (startName == "deck") { else if (startName == "deck") {
if (position == zone->getCards().size() - 1) { if (position == zone->getCards().size() - 1) {
if (cardName.isEmpty()) { if (cardName.isEmpty()) {
cardName = tr("the bottom card of his library"); cardName = isFemale(zone->getPlayer()) ? tr("the bottom card of her library") : tr("the bottom card of his library");
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
} else } else
fromStr = tr(" from the bottom of his library"); fromStr = isFemale(zone->getPlayer()) ? tr(" from the bottom of her library") : tr(" from the bottom of his library");
} else if (position == 0) { } else if (position == 0) {
if (cardName.isEmpty()) { if (cardName.isEmpty()) {
cardName = tr("the top card of his library"); cardName = isFemale(zone->getPlayer()) ? tr("the top card of her library") : tr("the top card of his library");
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
} else } else
fromStr = tr(" from the top of his library"); fromStr = isFemale(zone->getPlayer()) ? tr(" from the top of her library") : tr(" from the top of his library");
} else } else
fromStr = tr(" from library"); fromStr = tr(" from library");
} else if (startName == "sb") } else if (startName == "sb")
...@@ -233,13 +238,13 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes) ...@@ -233,13 +238,13 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
finalStr = tr("%1 moves %2%3 to hand."); finalStr = tr("%1 moves %2%3 to hand.");
else if (targetName == "deck") { else if (targetName == "deck") {
if (attributes.newX == -1) if (attributes.newX == -1)
finalStr = tr("%1 puts %2%3 into his library."); finalStr = isFemale(attributes.targetZone->getPlayer()) ? tr("%1 puts %2%3 into her library.") : tr("%1 puts %2%3 into his library.");
else if (attributes.newX == attributes.targetZone->getCards().size() - 1) else if (attributes.newX == attributes.targetZone->getCards().size() - 1)
finalStr = tr("%1 puts %2%3 on bottom of his library."); finalStr = isFemale(attributes.targetZone->getPlayer()) ? tr("%1 puts %2%3 on bottom of her library.") : tr("%1 puts %2%3 on bottom of his library.");
else if (attributes.newX == 0) else if (attributes.newX == 0)
finalStr = tr("%1 puts %2%3 on top of his library."); finalStr = isFemale(attributes.targetZone->getPlayer()) ? tr("%1 puts %2%3 on top of her library.") : tr("%1 puts %2%3 on top of his library.");
else else
finalStr = tr("%1 puts %2%3 into his library at position %4."); finalStr = isFemale(attributes.targetZone->getPlayer()) ? tr("%1 puts %2%3 into her library at position %4.") : tr("%1 puts %2%3 into his library at position %4.");
} else if (targetName == "sb") } else if (targetName == "sb")
finalStr = tr("%1 moves %2%3 to sideboard."); finalStr = tr("%1 moves %2%3 to sideboard.");
else if (targetName == "stack") { else if (targetName == "stack") {
...@@ -269,7 +274,7 @@ void MessageLogWidget::logMulligan(Player *player, int number) ...@@ -269,7 +274,7 @@ void MessageLogWidget::logMulligan(Player *player, int number)
if (number > -1) if (number > -1)
append(tr("%1 takes a mulligan to %n.", "", number).arg(sanitizeHtml(player->getName()))); append(tr("%1 takes a mulligan to %n.", "", number).arg(sanitizeHtml(player->getName())));
else else
append(tr("%1 draws his initial hand.").arg(sanitizeHtml(player->getName()))); append((isFemale(player) ? tr("%1 draws her initial hand.") : tr("%1 draws his initial hand.")).arg(sanitizeHtml(player->getName())));
} }
void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDown) void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDown)
...@@ -351,7 +356,7 @@ void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped) ...@@ -351,7 +356,7 @@ void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped)
else { else {
QString cardStr; QString cardStr;
if (!card) if (!card)
cardStr = tr("his permanents"); cardStr = isFemale(player) ? tr("her permanents") : tr("his permanents");
else else
cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(card->getName())); cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(card->getName()));
append(tr("%1 %2 %3.").arg(sanitizeHtml(player->getName())).arg(tapped ? tr("taps") : tr("untaps")).arg(cardStr)); append(tr("%1 %2 %3.").arg(sanitizeHtml(player->getName())).arg(tapped ? tr("taps") : tr("untaps")).arg(cardStr));
...@@ -495,7 +500,7 @@ void MessageLogWidget::containerProcessingDone() ...@@ -495,7 +500,7 @@ void MessageLogWidget::containerProcessingDone()
void MessageLogWidget::connectToPlayer(Player *player) void MessageLogWidget::connectToPlayer(Player *player)
{ {
connect(player, SIGNAL(logSay(Player *, QString)), this, SLOT(logSay(Player *, QString))); connect(player, SIGNAL(logSay(Player *, QString)), this, SLOT(logSay(Player *, QString)));
connect(player, SIGNAL(logShuffle(Player *)), this, SLOT(logShuffle(Player *))); connect(player, SIGNAL(logShuffle(Player *, CardZone *)), this, SLOT(logShuffle(Player *, CardZone *)));
connect(player, SIGNAL(logRollDie(Player *, int, int)), this, SLOT(logRollDie(Player *, int, int))); connect(player, SIGNAL(logRollDie(Player *, int, int)), this, SLOT(logRollDie(Player *, int, int)));
connect(player, SIGNAL(logCreateArrow(Player *, Player *, QString, Player *, QString, bool)), this, SLOT(logCreateArrow(Player *, Player *, QString, Player *, QString, bool))); connect(player, SIGNAL(logCreateArrow(Player *, Player *, QString, Player *, QString, bool)), this, SLOT(logCreateArrow(Player *, Player *, QString, Player *, QString, bool)));
connect(player, SIGNAL(logCreateToken(Player *, QString, QString)), this, SLOT(logCreateToken(Player *, QString, QString))); connect(player, SIGNAL(logCreateToken(Player *, QString, QString)), this, SLOT(logCreateToken(Player *, QString, QString)));
......
...@@ -31,6 +31,7 @@ private: ...@@ -31,6 +31,7 @@ private:
CardInfoWidget *infoWidget; CardInfoWidget *infoWidget;
QString sanitizeHtml(QString dirty) const; QString sanitizeHtml(QString dirty) const;
bool isFemale(Player *player) const;
QPair<QString, QString> getFromStr(CardZone *zone, QString cardName, int position) const; QPair<QString, QString> getFromStr(CardZone *zone, QString cardName, int position) const;
QString getCardNameUnderMouse(const QPoint &pos) const; QString getCardNameUnderMouse(const QPoint &pos) const;
MessageContext currentContext; MessageContext currentContext;
...@@ -66,7 +67,7 @@ public slots: ...@@ -66,7 +67,7 @@ public slots:
void logGameStart(); void logGameStart();
void logSay(Player *player, QString message); void logSay(Player *player, QString message);
void logSpectatorSay(QString spectatorName, QString message); void logSpectatorSay(QString spectatorName, QString message);
void logShuffle(Player *player); void logShuffle(Player *player, CardZone *zone);
void logRollDie(Player *player, int sides, int roll); void logRollDie(Player *player, int sides, int roll);
void logDrawCards(Player *player, int number); void logDrawCards(Player *player, int number);
void logUndoDraw(Player *player, QString cardName); void logUndoDraw(Player *player, QString cardName);
......
...@@ -78,6 +78,36 @@ QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max) ...@@ -78,6 +78,36 @@ QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max)
QMap<int, QPixmap> PingPixmapGenerator::pmCache; QMap<int, QPixmap> PingPixmapGenerator::pmCache;
QPixmap GenderPixmapGenerator::generatePixmap(int height, int _gender)
{
ServerInfo_User::Gender gender = static_cast<ServerInfo_User::Gender>(_gender);
if ((gender != ServerInfo_User::Male) && (gender != ServerInfo_User::Female))
gender = ServerInfo_User::GenderUnknown;
int key = gender * 100000 + height;
if (pmCache.contains(key))
return pmCache.value(key);
QString genderStr;
switch (gender) {
case ServerInfo_User::Male: genderStr = "male"; break;
case ServerInfo_User::Female: genderStr = "female"; break;
default: genderStr = "unknown";
};
QSvgRenderer svg(QString(":/resources/genders/" + genderStr + ".svg"));
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
svg.render(&painter, QRectF(0, 0, width, height));
pmCache.insert(key, pixmap);
return pixmap;
}
QMap<int, QPixmap> GenderPixmapGenerator::pmCache;
QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countryCode) QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countryCode)
{ {
if (countryCode.size() != 2) if (countryCode.size() != 2)
...@@ -110,8 +140,8 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, int userLevel) ...@@ -110,8 +140,8 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, int userLevel)
QString levelString; QString levelString;
if (userLevel & ServerInfo_User::IsAdmin) if (userLevel & ServerInfo_User::IsAdmin)
levelString = "admin"; levelString = "admin";
else if (userLevel & ServerInfo_User::IsJudge) else if (userLevel & ServerInfo_User::IsModerator)
levelString = "judge"; levelString = "moderator";
else if (userLevel &ServerInfo_User::IsRegistered) else if (userLevel &ServerInfo_User::IsRegistered)
levelString = "registered"; levelString = "registered";
else else
......
...@@ -28,6 +28,14 @@ public: ...@@ -28,6 +28,14 @@ public:
static void clear() { pmCache.clear(); } static void clear() { pmCache.clear(); }
}; };
class GenderPixmapGenerator {
private:
static QMap<int, QPixmap> pmCache;
public:
static QPixmap generatePixmap(int height, int gender);
static void clear() { pmCache.clear(); }
};
class CountryPixmapGenerator { class CountryPixmapGenerator {
private: private:
static QMap<QString, QPixmap> pmCache; static QMap<QString, QPixmap> pmCache;
......
...@@ -713,7 +713,7 @@ void Player::eventSay(Event_Say *event) ...@@ -713,7 +713,7 @@ void Player::eventSay(Event_Say *event)
void Player::eventShuffle(Event_Shuffle * /*event*/) void Player::eventShuffle(Event_Shuffle * /*event*/)
{ {
emit logShuffle(this); emit logShuffle(this, zones.value("deck"));
} }
void Player::eventRollDie(Event_RollDie *event) void Player::eventRollDie(Event_RollDie *event)
......
...@@ -70,7 +70,7 @@ signals: ...@@ -70,7 +70,7 @@ signals:
void newCardAdded(AbstractCardItem *card); void newCardAdded(AbstractCardItem *card);
// Log events // Log events
void logSay(Player *player, QString message); void logSay(Player *player, QString message);
void logShuffle(Player *player); void logShuffle(Player *player, CardZone *zone);
void logRollDie(Player *player, int sides, int roll); void logRollDie(Player *player, int sides, int roll);
void logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool _playerTarget); void logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool _playerTarget);
void logCreateToken(Player *player, QString cardName, QString pt); void logCreateToken(Player *player, QString cardName, QString pt);
......
...@@ -17,6 +17,8 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren ...@@ -17,6 +17,8 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren
nameLabel->setFont(nameFont); nameLabel->setFont(nameFont);
realNameLabel1 = new QLabel; realNameLabel1 = new QLabel;
realNameLabel2 = new QLabel; realNameLabel2 = new QLabel;
genderLabel1 = new QLabel;
genderLabel2 = new QLabel;
countryLabel1 = new QLabel; countryLabel1 = new QLabel;
countryLabel2 = new QLabel; countryLabel2 = new QLabel;
userLevelLabel1 = new QLabel; userLevelLabel1 = new QLabel;
...@@ -28,11 +30,13 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren ...@@ -28,11 +30,13 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren
mainLayout->addWidget(nameLabel, 1, 0, 1, 3); mainLayout->addWidget(nameLabel, 1, 0, 1, 3);
mainLayout->addWidget(realNameLabel1, 2, 0, 1, 1); mainLayout->addWidget(realNameLabel1, 2, 0, 1, 1);
mainLayout->addWidget(realNameLabel2, 2, 1, 1, 2); mainLayout->addWidget(realNameLabel2, 2, 1, 1, 2);
mainLayout->addWidget(countryLabel1, 3, 0, 1, 1); mainLayout->addWidget(genderLabel1, 3, 0, 1, 1);
mainLayout->addWidget(countryLabel2, 3, 1, 1, 2); mainLayout->addWidget(genderLabel2, 3, 1, 1, 2);
mainLayout->addWidget(userLevelLabel1, 4, 0, 1, 1); mainLayout->addWidget(countryLabel1, 4, 0, 1, 1);
mainLayout->addWidget(userLevelLabel2, 4, 1, 1, 1); mainLayout->addWidget(countryLabel2, 4, 1, 1, 2);
mainLayout->addWidget(userLevelLabel3, 4, 2, 1, 1); mainLayout->addWidget(userLevelLabel1, 5, 0, 1, 1);
mainLayout->addWidget(userLevelLabel2, 5, 1, 1, 1);
mainLayout->addWidget(userLevelLabel3, 5, 2, 1, 1);
mainLayout->setColumnStretch(2, 10); mainLayout->setColumnStretch(2, 10);
setWindowTitle(tr("User information")); setWindowTitle(tr("User information"));
...@@ -43,6 +47,7 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren ...@@ -43,6 +47,7 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _fullInfo, QWidget *paren
void UserInfoBox::retranslateUi() void UserInfoBox::retranslateUi()
{ {
realNameLabel1->setText(tr("Real name:")); realNameLabel1->setText(tr("Real name:"));
genderLabel1->setText(tr("Gender:"));
countryLabel1->setText(tr("Location:")); countryLabel1->setText(tr("Location:"));
userLevelLabel1->setText(tr("User level:")); userLevelLabel1->setText(tr("User level:"));
} }
...@@ -58,13 +63,14 @@ void UserInfoBox::updateInfo(ServerInfo_User *user) ...@@ -58,13 +63,14 @@ void UserInfoBox::updateInfo(ServerInfo_User *user)
nameLabel->setText(user->getName()); nameLabel->setText(user->getName());
realNameLabel2->setText(user->getRealName()); realNameLabel2->setText(user->getRealName());
genderLabel2->setPixmap(GenderPixmapGenerator::generatePixmap(15, user->getGender()));
countryLabel2->setPixmap(CountryPixmapGenerator::generatePixmap(15, user->getCountry())); countryLabel2->setPixmap(CountryPixmapGenerator::generatePixmap(15, user->getCountry()));
userLevelLabel2->setPixmap(UserLevelPixmapGenerator::generatePixmap(15, userLevel)); userLevelLabel2->setPixmap(UserLevelPixmapGenerator::generatePixmap(15, userLevel));
QString userLevelText; QString userLevelText;
if (userLevel & ServerInfo_User::IsAdmin) if (userLevel & ServerInfo_User::IsAdmin)
userLevelText = tr("Administrator"); userLevelText = tr("Administrator");
else if (userLevel & ServerInfo_User::IsJudge) else if (userLevel & ServerInfo_User::IsModerator)
userLevelText = tr("Judge"); userLevelText = tr("Moderator");
else if (userLevel & ServerInfo_User::IsRegistered) else if (userLevel & ServerInfo_User::IsRegistered)
userLevelText = tr("Registered user"); userLevelText = tr("Registered user");
else else
......
...@@ -13,7 +13,7 @@ class UserInfoBox : public QWidget { ...@@ -13,7 +13,7 @@ class UserInfoBox : public QWidget {
private: private:
AbstractClient *client; AbstractClient *client;
bool fullInfo; bool fullInfo;
QLabel *avatarLabel, *nameLabel, *realNameLabel1, *realNameLabel2, *countryLabel1, *countryLabel2, *userLevelLabel1, *userLevelLabel2, *userLevelLabel3; QLabel *avatarLabel, *nameLabel, *realNameLabel1, *realNameLabel2, *genderLabel1, *genderLabel2, *countryLabel1, *countryLabel2, *userLevelLabel1, *userLevelLabel2, *userLevelLabel3;
public: public:
UserInfoBox(AbstractClient *_client, bool fullInfo, QWidget *parent = 0, Qt::WindowFlags flags = 0); UserInfoBox(AbstractClient *_client, bool fullInfo, QWidget *parent = 0, Qt::WindowFlags flags = 0);
void retranslateUi(); void retranslateUi();
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment