1 #include "cardframe.h"
2
3 #include "cardinfopicture.h"
4 #include "cardinfotext.h"
5 #include "carditem.h"
6 #include "main.h"
7 #include "settingscache.h"
8
9 #include <QSplitter>
10 #include <QVBoxLayout>
11 #include <utility>
12
CardFrame(const QString & cardName,QWidget * parent)13 CardFrame::CardFrame(const QString &cardName, QWidget *parent) : QTabWidget(parent), info(nullptr), cardTextOnly(false)
14 {
15 setContentsMargins(3, 3, 3, 3);
16 pic = new CardInfoPicture();
17 pic->setObjectName("pic");
18 text = new CardInfoText();
19 text->setObjectName("text");
20 connect(text, SIGNAL(linkActivated(const QString &)), this, SLOT(setCard(const QString &)));
21
22 tab1 = new QWidget(this);
23 tab2 = new QWidget(this);
24 tab3 = new QWidget(this);
25
26 tab1->setObjectName("tab1");
27 tab2->setObjectName("tab2");
28 tab3->setObjectName("tab3");
29
30 insertTab(ImageOnlyView, tab1, QString());
31 insertTab(TextOnlyView, tab2, QString());
32 insertTab(ImageAndTextView, tab3, QString());
33 connect(this, SIGNAL(currentChanged(int)), this, SLOT(setViewMode(int)));
34
35 tab1Layout = new QVBoxLayout();
36 tab1Layout->setObjectName("tab1Layout");
37 tab1Layout->setContentsMargins(0, 0, 0, 0);
38 tab1Layout->setSpacing(0);
39 tab1->setLayout(tab1Layout);
40
41 tab2Layout = new QVBoxLayout();
42 tab2Layout->setObjectName("tab2Layout");
43 tab2Layout->setContentsMargins(0, 0, 0, 0);
44 tab2Layout->setSpacing(0);
45 tab2->setLayout(tab2Layout);
46
47 splitter = new QSplitter();
48 splitter->setObjectName("splitter");
49 splitter->setOrientation(Qt::Vertical);
50
51 tab3Layout = new QVBoxLayout();
52 tab3Layout->setObjectName("tab3Layout");
53 tab3Layout->setContentsMargins(0, 0, 0, 0);
54 tab3Layout->setSpacing(0);
55 tab3Layout->addWidget(splitter);
56 tab3->setLayout(tab3Layout);
57
58 setViewMode(SettingsCache::instance().getCardInfoViewMode());
59
60 setCard(db->getCard(cardName));
61 }
62
retranslateUi()63 void CardFrame::retranslateUi()
64 {
65 setTabText(ImageOnlyView, tr("Image"));
66 setTabText(TextOnlyView, tr("Description"));
67 setTabText(ImageAndTextView, tr("Both"));
68 }
69
setViewMode(int mode)70 void CardFrame::setViewMode(int mode)
71 {
72 if (currentIndex() != mode)
73 setCurrentIndex(mode);
74
75 switch (mode) {
76 case ImageOnlyView:
77 case TextOnlyView:
78 tab1Layout->addWidget(pic);
79 tab2Layout->addWidget(text);
80 break;
81 case ImageAndTextView:
82 splitter->addWidget(pic);
83 splitter->addWidget(text);
84 break;
85 default:
86 break;
87 }
88
89 SettingsCache::instance().setCardInfoViewMode(mode);
90 }
91
setCard(CardInfoPtr card)92 void CardFrame::setCard(CardInfoPtr card)
93 {
94 if (info) {
95 disconnect(info.data(), nullptr, this, nullptr);
96 }
97
98 info = std::move(card);
99
100 if (info) {
101 connect(info.data(), SIGNAL(destroyed()), this, SLOT(clearCard()));
102 }
103
104 text->setCard(info);
105 pic->setCard(info);
106 }
107
setCard(const QString & cardName)108 void CardFrame::setCard(const QString &cardName)
109 {
110 setCard(db->guessCard(cardName));
111 }
112
setCard(AbstractCardItem * card)113 void CardFrame::setCard(AbstractCardItem *card)
114 {
115 if (card) {
116 setCard(card->getInfo());
117 }
118 }
119
clearCard()120 void CardFrame::clearCard()
121 {
122 setCard((CardInfoPtr) nullptr);
123 }
124