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