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