1 #include "cardinfotext.h"
2 
3 #include "carditem.h"
4 #include "game_specific_terms.h"
5 #include "main.h"
6 
7 #include <QGridLayout>
8 #include <QLabel>
9 #include <QTextEdit>
10 
CardInfoText(QWidget * parent)11 CardInfoText::CardInfoText(QWidget *parent) : QFrame(parent), info(nullptr)
12 {
13     nameLabel = new QLabel;
14     nameLabel->setOpenExternalLinks(false);
15     nameLabel->setWordWrap(true);
16     connect(nameLabel, SIGNAL(linkActivated(const QString &)), this, SIGNAL(linkActivated(const QString &)));
17 
18     textLabel = new QTextEdit();
19     textLabel->setReadOnly(true);
20 
21     auto *grid = new QGridLayout(this);
22     grid->addWidget(nameLabel, 0, 0);
23     grid->addWidget(textLabel, 1, 0, -1, 2);
24     grid->setRowStretch(1, 1);
25     grid->setColumnStretch(1, 1);
26 
27     retranslateUi();
28 }
29 
setCard(CardInfoPtr card)30 void CardInfoText::setCard(CardInfoPtr card)
31 {
32     if (card == nullptr) {
33         nameLabel->setText("");
34         textLabel->setText("");
35         return;
36     }
37 
38     QString text = "<table width=\"100%\" border=0 cellspacing=0 cellpadding=0>";
39     text += QString("<tr><td>%1</td><td width=\"5\"></td><td>%2</td></tr>")
40                 .arg(tr("Name:"), card->getName().toHtmlEscaped());
41 
42     QStringList cardProps = card->getProperties();
43     for (const QString &key : cardProps) {
44         if (key.contains("-"))
45             continue;
46         QString keyText = Mtg::getNicePropertyName(key).toHtmlEscaped() + ":";
47         text +=
48             QString("<tr><td>%1</td><td></td><td>%2</td></tr>").arg(keyText, card->getProperty(key).toHtmlEscaped());
49     }
50 
51     auto relatedCards = card->getAllRelatedCards();
52     if (!relatedCards.empty()) {
53         text += QString("<tr><td>%1</td><td width=\"5\"></td><td>").arg(tr("Related cards:"));
54 
55         for (auto *relatedCard : relatedCards) {
56             QString tmp = relatedCard->getName().toHtmlEscaped();
57             text += "<a href=\"" + tmp + "\">" + tmp + "</a><br>";
58         }
59 
60         text += "</td></tr>";
61     }
62 
63     text += "</table>";
64     nameLabel->setText(text);
65     textLabel->setText(card->getText());
66 }
67 
setInvalidCardName(const QString & cardName)68 void CardInfoText::setInvalidCardName(const QString &cardName)
69 {
70     nameLabel->setText(tr("Unknown card:") + " " + cardName);
71     textLabel->setText("");
72 }
73 
retranslateUi()74 void CardInfoText::retranslateUi()
75 {
76     /*
77      * There's no way we can really translate the text currently being rendered.
78      * The best we can do is invalidate the current text.
79      */
80     setInvalidCardName("");
81 }
82