modify up the simplifyCardName function to ignore right halves add guessCard function that prioritises full card names the simple ones fix imports for misformatted split cards or double faced cards introduces a small concession: not completely formatted names with a shared name on the left side will get mixed up, eg "bind" but not "Bind" this should be fine considering how this would fix a lot more cards
123 lines
3 KiB
C++
123 lines
3 KiB
C++
#include "cardframe.h"
|
|
|
|
#include "cardinfopicture.h"
|
|
#include "cardinfotext.h"
|
|
#include "carditem.h"
|
|
#include "main.h"
|
|
#include "settingscache.h"
|
|
|
|
#include <QSplitter>
|
|
#include <QVBoxLayout>
|
|
#include <utility>
|
|
|
|
CardFrame::CardFrame(const QString &cardName, QWidget *parent) : QTabWidget(parent), info(nullptr), cardTextOnly(false)
|
|
{
|
|
setContentsMargins(3, 3, 3, 3);
|
|
pic = new CardInfoPicture();
|
|
pic->setObjectName("pic");
|
|
text = new CardInfoText();
|
|
text->setObjectName("text");
|
|
connect(text, SIGNAL(linkActivated(const QString &)), this, SLOT(setCard(const QString &)));
|
|
|
|
tab1 = new QWidget(this);
|
|
tab2 = new QWidget(this);
|
|
tab3 = new QWidget(this);
|
|
|
|
tab1->setObjectName("tab1");
|
|
tab2->setObjectName("tab2");
|
|
tab3->setObjectName("tab3");
|
|
|
|
insertTab(ImageOnlyView, tab1, QString());
|
|
insertTab(TextOnlyView, tab2, QString());
|
|
insertTab(ImageAndTextView, tab3, QString());
|
|
connect(this, SIGNAL(currentChanged(int)), this, SLOT(setViewMode(int)));
|
|
|
|
tab1Layout = new QVBoxLayout();
|
|
tab1Layout->setObjectName("tab1Layout");
|
|
tab1Layout->setContentsMargins(0, 0, 0, 0);
|
|
tab1Layout->setSpacing(0);
|
|
tab1->setLayout(tab1Layout);
|
|
|
|
tab2Layout = new QVBoxLayout();
|
|
tab2Layout->setObjectName("tab2Layout");
|
|
tab2Layout->setContentsMargins(0, 0, 0, 0);
|
|
tab2Layout->setSpacing(0);
|
|
tab2->setLayout(tab2Layout);
|
|
|
|
splitter = new QSplitter();
|
|
splitter->setObjectName("splitter");
|
|
splitter->setOrientation(Qt::Vertical);
|
|
|
|
tab3Layout = new QVBoxLayout();
|
|
tab3Layout->setObjectName("tab3Layout");
|
|
tab3Layout->setContentsMargins(0, 0, 0, 0);
|
|
tab3Layout->setSpacing(0);
|
|
tab3Layout->addWidget(splitter);
|
|
tab3->setLayout(tab3Layout);
|
|
|
|
setViewMode(SettingsCache::instance().getCardInfoViewMode());
|
|
|
|
setCard(db->getCard(cardName));
|
|
}
|
|
|
|
void CardFrame::retranslateUi()
|
|
{
|
|
setTabText(ImageOnlyView, tr("Image"));
|
|
setTabText(TextOnlyView, tr("Description"));
|
|
setTabText(ImageAndTextView, tr("Both"));
|
|
}
|
|
|
|
void CardFrame::setViewMode(int mode)
|
|
{
|
|
if (currentIndex() != mode)
|
|
setCurrentIndex(mode);
|
|
|
|
switch (mode) {
|
|
case ImageOnlyView:
|
|
case TextOnlyView:
|
|
tab1Layout->addWidget(pic);
|
|
tab2Layout->addWidget(text);
|
|
break;
|
|
case ImageAndTextView:
|
|
splitter->addWidget(pic);
|
|
splitter->addWidget(text);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
SettingsCache::instance().setCardInfoViewMode(mode);
|
|
}
|
|
|
|
void CardFrame::setCard(CardInfoPtr card)
|
|
{
|
|
if (info) {
|
|
disconnect(info.data(), nullptr, this, nullptr);
|
|
}
|
|
|
|
info = std::move(card);
|
|
|
|
if (info) {
|
|
connect(info.data(), SIGNAL(destroyed()), this, SLOT(clearCard()));
|
|
}
|
|
|
|
text->setCard(info);
|
|
pic->setCard(info);
|
|
}
|
|
|
|
void CardFrame::setCard(const QString &cardName)
|
|
{
|
|
setCard(db->guessCard(cardName));
|
|
}
|
|
|
|
void CardFrame::setCard(AbstractCardItem *card)
|
|
{
|
|
if (card) {
|
|
setCard(card->getInfo());
|
|
}
|
|
}
|
|
|
|
void CardFrame::clearCard()
|
|
{
|
|
setCard((CardInfoPtr) nullptr);
|
|
}
|