From 089c93716746b83346a722379b5d736cf3b9842f Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Sat, 2 Jun 2012 17:22:19 +0200 Subject: [PATCH] use proper anchors in MessageLogWidget, effectively fixing issue #54 --- cockatrice/src/chatview.cpp | 1 + cockatrice/src/messagelogwidget.cpp | 43 ++++++++++++++++------------- cockatrice/src/messagelogwidget.h | 1 + 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/cockatrice/src/chatview.cpp b/cockatrice/src/chatview.cpp index 65a51fa2..402b6884 100644 --- a/cockatrice/src/chatview.cpp +++ b/cockatrice/src/chatview.cpp @@ -12,6 +12,7 @@ ChatView::ChatView(const TabSupervisor *_tabSupervisor, TabGame *_game, bool _showTimestamps, QWidget *parent) : QTextBrowser(parent), tabSupervisor(_tabSupervisor), game(_game), evenNumber(true), showTimestamps(_showTimestamps), hoveredItemType(HoveredNothing) { + document()->setDefaultStyleSheet("a { text-decoration: none; color: blue; }"); userContextMenu = new UserContextMenu(tabSupervisor, this, game); connect(userContextMenu, SIGNAL(openMessageDialog(QString, bool)), this, SIGNAL(openMessageDialog(QString, bool))); diff --git a/cockatrice/src/messagelogwidget.cpp b/cockatrice/src/messagelogwidget.cpp index 18789aee..a5f59a3f 100644 --- a/cockatrice/src/messagelogwidget.cpp +++ b/cockatrice/src/messagelogwidget.cpp @@ -14,7 +14,13 @@ QString MessageLogWidget::sanitizeHtml(QString dirty) const return dirty .replace("&", "&") .replace("<", "<") - .replace(">", ">"); + .replace(">", ">") + .replace("\"", """); +} + +QString MessageLogWidget::cardLink(const QString &cardName) const +{ + return QString("%2").arg(cardName).arg(cardName); } bool MessageLogWidget::isFemale(Player *player) const @@ -195,7 +201,7 @@ void MessageLogWidget::logUndoDraw(Player *player, QString cardName) if (cardName.isEmpty()) appendHtml((isFemale(player) ? tr("%1 undoes her last draw.") : tr("%1 undoes his last draw.")).arg(sanitizeHtml(player->getName()))); else - appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName)))); + appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("%2").arg(sanitizeHtml(cardName)).arg(sanitizeHtml(cardName)))); } QPair MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const @@ -276,7 +282,7 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes) else if (cardName.isEmpty()) cardStr = tr("a card"); else - cardStr = QString("%1").arg(sanitizeHtml(cardName)); + cardStr = cardLink(cardName); if (ownerChange && (attributes.startZone->getPlayer() == attributes.player)) { appendHtml(tr("%1 gives %2 control over %3.").arg(sanitizeHtml(attributes.player->getName())).arg(sanitizeHtml(attributes.targetZone->getPlayer()->getName())).arg(cardStr)); @@ -358,9 +364,9 @@ void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDo void MessageLogWidget::logDestroyCard(Player *player, QString cardName) { if (isFemale(player)) - appendHtml(tr("%1 destroys %2.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName)))); + appendHtml(tr("%1 destroys %2.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); else - appendHtml(tr("%1 destroys %2.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName)))); + appendHtml(tr("%1 destroys %2.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); } void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName) @@ -378,29 +384,29 @@ void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *t str = tr("%1 attaches %2 to %3's %4.", "p1 male, p2 male"); } - appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(sanitizeHtml(targetPlayer->getName())).arg(QString("%1").arg(sanitizeHtml(targetCardName)))); + appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(sanitizeHtml(targetPlayer->getName())).arg(cardLink(targetCardName))); } void MessageLogWidget::logUnattachCard(Player *player, QString cardName) { if (isFemale(player)) - appendHtml(tr("%1 unattaches %2.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName)))); + appendHtml(tr("%1 unattaches %2.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); else - appendHtml(tr("%1 unattaches %2.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName)))); + appendHtml(tr("%1 unattaches %2.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); } void MessageLogWidget::logCreateToken(Player *player, QString cardName, QString pt) { if (isFemale(player)) - appendHtml(tr("%1 creates token: %2%3.", "female").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt)))); + appendHtml(tr("%1 creates token: %2%3.", "female").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt)))); else - appendHtml(tr("%1 creates token: %2%3.", "male").arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt)))); + appendHtml(tr("%1 creates token: %2%3.", "male").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt)))); } void MessageLogWidget::logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool playerTarget) { - startCard = QString("%1").arg(sanitizeHtml(startCard)); - targetCard = QString("%1").arg(sanitizeHtml(targetCard)); + startCard = cardLink(startCard); + targetCard = cardLink(targetCard); QString str; if (playerTarget) { if ((player == startPlayer) && (player == targetPlayer)) { @@ -551,7 +557,7 @@ void MessageLogWidget::logSetCardCounter(Player *player, QString cardName, int c default: ; } - appendHtml(finalStr.arg(sanitizeHtml(player->getName())).arg(colorStr).arg(QString("%1").arg(sanitizeHtml(cardName))).arg(value)); + appendHtml(finalStr.arg(sanitizeHtml(player->getName())).arg(colorStr).arg(cardLink(cardName)).arg(value)); } void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped) @@ -590,8 +596,7 @@ void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped) else str = tr("%1 untaps %2.", "male"); } - QString cardStr = QString("%1").arg(sanitizeHtml(card->getName())); - appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardStr)); + appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName()))); } } } @@ -620,7 +625,7 @@ void MessageLogWidget::logSetDoesntUntap(Player *player, CardItem *card, bool do else str = tr("%1 sets %2 to untap normally.", "male"); } - appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName())))); + appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName()))); } void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT) @@ -633,7 +638,7 @@ void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT) str = tr("%1 sets PT of %2 to %3.", "female"); else str = tr("%1 sets PT of %2 to %3.", "male"); - appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName()))).arg(QString("%1").arg(sanitizeHtml(newPT)))); + appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString("%1").arg(sanitizeHtml(newPT)))); } } @@ -644,7 +649,7 @@ void MessageLogWidget::logSetAnnotation(Player *player, CardItem *card, QString str = tr("%1 sets annotation of %2 to %3.", "female"); else str = tr("%1 sets annotation of %2 to %3.", "male"); - appendHtml(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(card->getName()))).arg(QString("%1").arg(sanitizeHtml(newAnnotation)))); + appendHtml(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString(""%1"").arg(sanitizeHtml(newAnnotation)))); } void MessageLogWidget::logDumpZone(Player *player, CardZone *zone, int numberCards) @@ -688,7 +693,7 @@ void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId else if (cardName.isEmpty()) cardStr = tr("a card"); else - cardStr = QString("%1").arg(sanitizeHtml(cardName)); + cardStr = cardLink(cardName); QString str; if (cardId == -1) { diff --git a/cockatrice/src/messagelogwidget.h b/cockatrice/src/messagelogwidget.h index da266918..d1c1d6f7 100644 --- a/cockatrice/src/messagelogwidget.h +++ b/cockatrice/src/messagelogwidget.h @@ -27,6 +27,7 @@ private: enum MessageContext { MessageContext_None, MessageContext_MoveCard, MessageContext_Mulligan }; QString sanitizeHtml(QString dirty) const; + QString cardLink(const QString &cardName) const; bool isFemale(Player *player) const; bool userIsFemale() const; QPair getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const;