mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
SelectVolume loads covers from ComicVine
This commit is contained in:
parent
9938167a90
commit
80d0236010
@ -9,9 +9,9 @@ static const QString CV_WEB_ADDRESS = "http://www.comicvine.com/api";
|
|||||||
//gets any volumen containing any comic matching 'query'
|
//gets any volumen containing any comic matching 'query'
|
||||||
static const QString CV_SEARCH = CV_WEB_ADDRESS + "/search/?api_key=" + CV_API_KEY +
|
static const QString CV_SEARCH = CV_WEB_ADDRESS + "/search/?api_key=" + CV_API_KEY +
|
||||||
"&format=json&limit=100&resources=volume"
|
"&format=json&limit=100&resources=volume"
|
||||||
"&field_list=name,start_year,publisher,id,image,count_of_issues"
|
"&field_list=name,start_year,publisher,id,image,count_of_issues,deck"
|
||||||
"&query=%1&page=%2";
|
"&query=%1&page=%2";
|
||||||
//http://www.comicvine.com/api/search/?api_key=46680bebb358f1de690a5a365e15d325f9649f91&format=json&limit=100&resources=volume&field_list=name,start_year,publisher,id,image,count_of_issues&query=superman
|
//http://www.comicvine.com/api/search/?api_key=46680bebb358f1de690a5a365e15d325f9649f91&format=json&limit=100&resources=volume&field_list=name,start_year,publisher,id,image,count_of_issues,deck&query=superman
|
||||||
|
|
||||||
//gets the detail for a volume %1
|
//gets the detail for a volume %1
|
||||||
static const QString CV_SERIES_DETAIL = CV_WEB_ADDRESS + "/volume/4050-%1/?api_key=" + CV_API_KEY +
|
static const QString CV_SERIES_DETAIL = CV_WEB_ADDRESS + "/volume/4050-%1/?api_key=" + CV_API_KEY +
|
||||||
@ -54,6 +54,7 @@ void ComicVineClient::proccessVolumesSearchData(const QByteArray & data)
|
|||||||
{
|
{
|
||||||
QString json(data);
|
QString json(data);
|
||||||
emit searchResult(json);
|
emit searchResult(json);
|
||||||
|
emit finished();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineClient::queryTimeOut()
|
void ComicVineClient::queryTimeOut()
|
||||||
|
@ -13,6 +13,7 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void searchResult(QString);
|
void searchResult(QString);
|
||||||
|
void finished();
|
||||||
public slots:
|
public slots:
|
||||||
void search(const QString & query, int page = 0);
|
void search(const QString & query, int page = 0);
|
||||||
void getSeriesDetail(const QString & id);
|
void getSeriesDetail(const QString & id);
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
|
|
||||||
ComicVineDialog::ComicVineDialog(QWidget *parent) :
|
ComicVineDialog::ComicVineDialog(QWidget *parent) :
|
||||||
QDialog(parent),comicVineClient(new ComicVineClient)
|
QDialog(parent)
|
||||||
{
|
{
|
||||||
doLayout();
|
doLayout();
|
||||||
doStackedWidgets();
|
doStackedWidgets();
|
||||||
@ -77,11 +77,11 @@ void ComicVineDialog::doLayout()
|
|||||||
void ComicVineDialog::doStackedWidgets()
|
void ComicVineDialog::doStackedWidgets()
|
||||||
{
|
{
|
||||||
doLoading();
|
doLoading();
|
||||||
content->addWidget(seriesQuestion = new SeriesQuestion);
|
content->addWidget(seriesQuestionWidget = new SeriesQuestion);
|
||||||
content->addWidget(searchSingleComic = new SearchSingleComic);
|
content->addWidget(searchSingleComicWidget = new SearchSingleComic);
|
||||||
content->addWidget(searchVolume = new SearchVolume);
|
content->addWidget(searchVolumeWidget = new SearchVolume);
|
||||||
content->addWidget(selectVolume = new SelectVolume);
|
content->addWidget(selectVolumeWidget = new SelectVolume);
|
||||||
content->addWidget(selectComic = new SelectComic);
|
content->addWidget(selectComicWidget = new SelectComic);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineDialog::doConnections()
|
void ComicVineDialog::doConnections()
|
||||||
@ -89,16 +89,14 @@ void ComicVineDialog::doConnections()
|
|||||||
connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));
|
connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));
|
||||||
connect(nextButton,SIGNAL(clicked()),this,SLOT(goNext()));
|
connect(nextButton,SIGNAL(clicked()),this,SLOT(goNext()));
|
||||||
connect(searchButton,SIGNAL(clicked()),this,SLOT(search()));
|
connect(searchButton,SIGNAL(clicked()),this,SLOT(search()));
|
||||||
|
|
||||||
connect(comicVineClient,SIGNAL(searchResult(QString)),this,SLOT(debugClientResults(QString)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineDialog::goNext()
|
void ComicVineDialog::goNext()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
if(content->currentWidget() == seriesQuestion)
|
if(content->currentWidget() == seriesQuestionWidget)
|
||||||
{
|
{
|
||||||
if(seriesQuestion->getYes())
|
if(seriesQuestionWidget->getYes())
|
||||||
{
|
{
|
||||||
QString volumeSearchString = comics[0].getParentFolderName();
|
QString volumeSearchString = comics[0].getParentFolderName();
|
||||||
|
|
||||||
@ -107,7 +105,7 @@ void ComicVineDialog::goNext()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
showLoading();
|
showLoading();
|
||||||
comicVineClient->search(volumeSearchString);
|
searchVolume(volumeSearchString);
|
||||||
status = AutoSearching;
|
status = AutoSearching;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,12 +118,12 @@ void ComicVineDialog::goNext()
|
|||||||
titleHeader->setSubTitle(tr("comic %1 of %2 - %3").arg(currentIndex+1).arg(comics.length()).arg(title));
|
titleHeader->setSubTitle(tr("comic %1 of %2 - %3").arg(currentIndex+1).arg(comics.length()).arg(title));
|
||||||
showLoading();
|
showLoading();
|
||||||
|
|
||||||
comicVineClient->search(title);
|
searchVolume(title);
|
||||||
status = AutoSearching;
|
status = AutoSearching;
|
||||||
mode = SingleComicInList;
|
mode = SingleComicInList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (content->currentWidget() == searchSingleComic) {
|
else if (content->currentWidget() == searchSingleComicWidget) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,7 +146,7 @@ void ComicVineDialog::show()
|
|||||||
titleHeader->setSubTitle(title);
|
titleHeader->setSubTitle(title);
|
||||||
showLoading();
|
showLoading();
|
||||||
|
|
||||||
comicVineClient->search(title);
|
searchVolume(title);
|
||||||
status = AutoSearching;
|
status = AutoSearching;
|
||||||
mode = SingleComic;
|
mode = SingleComic;
|
||||||
}else if(comics.length()>1)
|
}else if(comics.length()>1)
|
||||||
@ -205,7 +203,7 @@ void ComicVineDialog::debugClientResults(const QString & string)
|
|||||||
void ComicVineDialog::showSeriesQuestion()
|
void ComicVineDialog::showSeriesQuestion()
|
||||||
{
|
{
|
||||||
status = AskingForInfo;
|
status = AskingForInfo;
|
||||||
content->setCurrentWidget(seriesQuestion);
|
content->setCurrentWidget(seriesQuestionWidget);
|
||||||
backButton->setHidden(true);
|
backButton->setHidden(true);
|
||||||
skipButton->setHidden(true);
|
skipButton->setHidden(true);
|
||||||
nextButton->setVisible(true);
|
nextButton->setVisible(true);
|
||||||
@ -216,7 +214,7 @@ void ComicVineDialog::showSeriesQuestion()
|
|||||||
void ComicVineDialog::showSearchSingleComic()
|
void ComicVineDialog::showSearchSingleComic()
|
||||||
{
|
{
|
||||||
status = AskingForInfo;
|
status = AskingForInfo;
|
||||||
content->setCurrentWidget(searchSingleComic);
|
content->setCurrentWidget(searchSingleComicWidget);
|
||||||
backButton->setHidden(true);
|
backButton->setHidden(true);
|
||||||
skipButton->setHidden(true);
|
skipButton->setHidden(true);
|
||||||
nextButton->setHidden(true);
|
nextButton->setHidden(true);
|
||||||
@ -227,7 +225,7 @@ void ComicVineDialog::showSearchSingleComic()
|
|||||||
void ComicVineDialog::showSearchVolume()
|
void ComicVineDialog::showSearchVolume()
|
||||||
{
|
{
|
||||||
status = AskingForInfo;
|
status = AskingForInfo;
|
||||||
content->setCurrentWidget(searchVolume);
|
content->setCurrentWidget(searchVolumeWidget);
|
||||||
backButton->setHidden(true);
|
backButton->setHidden(true);
|
||||||
nextButton->setHidden(true);
|
nextButton->setHidden(true);
|
||||||
searchButton->setVisible(true);
|
searchButton->setVisible(true);
|
||||||
@ -241,14 +239,14 @@ void ComicVineDialog::showSearchVolume()
|
|||||||
|
|
||||||
void ComicVineDialog::showSelectVolume(const QString & json)
|
void ComicVineDialog::showSelectVolume(const QString & json)
|
||||||
{
|
{
|
||||||
content->setCurrentWidget(selectVolume);
|
content->setCurrentWidget(selectVolumeWidget);
|
||||||
selectVolume->load(json);
|
selectVolumeWidget->load(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineDialog::showSelectComic(const QString &json)
|
void ComicVineDialog::showSelectComic(const QString &json)
|
||||||
{
|
{
|
||||||
content->setCurrentWidget(selectComic);
|
content->setCurrentWidget(selectComicWidget);
|
||||||
selectComic->load(json);
|
selectComicWidget->load(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineDialog::showLoading()
|
void ComicVineDialog::showLoading()
|
||||||
@ -273,22 +271,30 @@ void ComicVineDialog::search()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ComicVineDialog::searchVolume(const QString &v)
|
||||||
|
{
|
||||||
|
ComicVineClient * comicVineClient = new ComicVineClient;
|
||||||
|
connect(comicVineClient,SIGNAL(searchResult(QString)),this,SLOT(debugClientResults(QString)));
|
||||||
|
connect(comicVineClient,SIGNAL(finished()),comicVineClient,SLOT(deleteLater()));
|
||||||
|
comicVineClient->search(v);
|
||||||
|
}
|
||||||
|
|
||||||
void ComicVineDialog::launchSearchVolume()
|
void ComicVineDialog::launchSearchVolume()
|
||||||
{
|
{
|
||||||
showLoading();
|
showLoading();
|
||||||
//TODO: check if volume info is empty.
|
//TODO: check if volume info is empty.
|
||||||
comicVineClient->search(searchVolume->getVolumeInfo());
|
searchVolume(searchVolumeWidget->getVolumeInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicVineDialog::launchSearchComic()
|
void ComicVineDialog::launchSearchComic()
|
||||||
{
|
{
|
||||||
showLoading();
|
showLoading();
|
||||||
|
|
||||||
QString volumeInfo = searchSingleComic->getVolumeInfo();
|
QString volumeInfo = searchSingleComicWidget->getVolumeInfo();
|
||||||
QString comicInfo = searchSingleComic->getComicInfo();
|
QString comicInfo = searchSingleComicWidget->getComicInfo();
|
||||||
int comicNumber = searchSingleComic->getComicNumber();
|
int comicNumber = searchSingleComicWidget->getComicNumber();
|
||||||
|
|
||||||
if(comicInfo.isEmpty() && comicNumber == -1)
|
if(comicInfo.isEmpty() && comicNumber == -1)
|
||||||
comicVineClient->search(volumeInfo);
|
searchVolume(volumeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ protected slots:
|
|||||||
void showSearchVolume();
|
void showSearchVolume();
|
||||||
void showLoading();
|
void showLoading();
|
||||||
void search();
|
void search();
|
||||||
|
void searchVolume(const QString & v);
|
||||||
void launchSearchVolume();
|
void launchSearchVolume();
|
||||||
void launchSearchComic();
|
void launchSearchComic();
|
||||||
void showSelectVolume(const QString & json);
|
void showSelectVolume(const QString & json);
|
||||||
@ -65,8 +66,6 @@ private:
|
|||||||
ScrapperMode mode;
|
ScrapperMode mode;
|
||||||
ScrapperStatus status;
|
ScrapperStatus status;
|
||||||
|
|
||||||
ComicVineClient * comicVineClient;
|
|
||||||
|
|
||||||
int currentIndex;
|
int currentIndex;
|
||||||
|
|
||||||
TitleHeader * titleHeader;
|
TitleHeader * titleHeader;
|
||||||
@ -90,11 +89,11 @@ private:
|
|||||||
|
|
||||||
QList<ComicDB> comics;
|
QList<ComicDB> comics;
|
||||||
|
|
||||||
SeriesQuestion * seriesQuestion;
|
SeriesQuestion * seriesQuestionWidget;
|
||||||
SearchSingleComic * searchSingleComic;
|
SearchSingleComic * searchSingleComicWidget;
|
||||||
SearchVolume * searchVolume;
|
SearchVolume * searchVolumeWidget;
|
||||||
SelectVolume * selectVolume;
|
SelectVolume * selectVolumeWidget;
|
||||||
SelectComic * selectComic;
|
SelectComic * selectComicWidget;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COMIC_VINE_DIALOG_H
|
#endif // COMIC_VINE_DIALOG_H
|
||||||
|
@ -28,15 +28,18 @@ void VolumesModel::load(const QString &json)
|
|||||||
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext
|
int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext
|
||||||
QScriptValueIterator it(sc.property("results"));
|
QScriptValueIterator it(sc.property("results"));
|
||||||
bool test;
|
bool test;
|
||||||
|
QScriptValue resultsValue;
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
it.next();
|
it.next();
|
||||||
QString numIssues = it.value().property("count_of_issues").toString();
|
resultsValue = it.value();
|
||||||
QString year = it.value().property("start_year").toString();
|
QString numIssues = resultsValue.property("count_of_issues").toString();
|
||||||
QString name = it.value().property("name").toString();
|
QString year = resultsValue.property("start_year").toString();
|
||||||
QString publisher = it.value().property("publisher").property("name").toString();
|
QString name = resultsValue.property("name").toString();
|
||||||
QString url = it.value().property("image").property("screen_url").toString();
|
QString publisher = resultsValue.property("publisher").property("name").toString();
|
||||||
|
QString url = resultsValue.property("image").property("medium_url").toString();
|
||||||
|
QString deck = resultsValue.property("deck").toString();
|
||||||
QStringList & l = *(new QStringList);
|
QStringList & l = *(new QStringList);
|
||||||
l << name << year << numIssues << publisher << url;
|
l << name << year << numIssues << publisher << url << deck;
|
||||||
test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty();
|
test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty();
|
||||||
if(numResults>0 && !test)
|
if(numResults>0 && !test)
|
||||||
_data.push_back(&l);
|
_data.push_back(&l);
|
||||||
|
@ -21,6 +21,7 @@ public:
|
|||||||
QVariant headerData(int section, Qt::Orientation orientation,
|
QVariant headerData(int section, Qt::Orientation orientation,
|
||||||
int role = Qt::DisplayRole) const;
|
int role = Qt::DisplayRole) const;
|
||||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
@ -28,11 +29,14 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
QList <QList <QString> * > _data;
|
QList <QList <QString> * > _data;
|
||||||
|
|
||||||
|
public:
|
||||||
enum Column {
|
enum Column {
|
||||||
SERIES,
|
SERIES = 0,
|
||||||
YEAR,
|
YEAR,
|
||||||
ISSUES,
|
ISSUES,
|
||||||
PUBLISHER
|
PUBLISHER,
|
||||||
|
COVER_URL,
|
||||||
|
DECK
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
#include <QModelIndex>
|
||||||
|
|
||||||
#include "volumes_model.h"
|
#include "volumes_model.h"
|
||||||
|
#include "http_worker.h"
|
||||||
|
|
||||||
SelectVolume::SelectVolume(QWidget *parent)
|
SelectVolume::SelectVolume(QWidget *parent)
|
||||||
:QWidget(parent),model(0)
|
:QWidget(parent),model(0)
|
||||||
@ -40,8 +42,11 @@ SelectVolume::SelectVolume(QWidget *parent)
|
|||||||
|
|
||||||
//widgets
|
//widgets
|
||||||
cover = new QLabel();
|
cover = new QLabel();
|
||||||
|
cover->setScaledContents(true);
|
||||||
|
cover->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
|
||||||
detailLabel = new QLabel();
|
detailLabel = new QLabel();
|
||||||
detailLabel->setStyleSheet(labelStylesheet);
|
detailLabel->setStyleSheet(labelStylesheet);
|
||||||
|
detailLabel->setWordWrap(true);
|
||||||
tableVolumes = new QTableView();
|
tableVolumes = new QTableView();
|
||||||
tableVolumes->setStyleSheet(tableStylesheet);
|
tableVolumes->setStyleSheet(tableStylesheet);
|
||||||
|
|
||||||
@ -78,17 +83,23 @@ SelectVolume::SelectVolume(QWidget *parent)
|
|||||||
|
|
||||||
tableVolumes->setSelectionMode(QAbstractItemView::SingleSelection);
|
tableVolumes->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
|
|
||||||
|
//connections
|
||||||
|
connect(tableVolumes,SIGNAL(clicked(QModelIndex)),this,SLOT(loadVolumeInfo(QModelIndex)));
|
||||||
|
|
||||||
left->addWidget(cover);
|
left->addWidget(cover);
|
||||||
left->addWidget(detailLabel);
|
left->addWidget(detailLabel);
|
||||||
left->addStretch();
|
left->addStretch();
|
||||||
leftWidget->setMaximumWidth(168);
|
leftWidget->setMaximumWidth(180);
|
||||||
leftWidget->setLayout(left);
|
leftWidget->setLayout(left);
|
||||||
|
left->setContentsMargins(0,0,0,0);
|
||||||
|
leftWidget->setContentsMargins(0,0,0,0);
|
||||||
|
|
||||||
content->addWidget(leftWidget);
|
content->addWidget(leftWidget);
|
||||||
content->addWidget(tableVolumes,0,Qt::AlignRight);
|
content->addWidget(tableVolumes,0,Qt::AlignRight|Qt::AlignTop);
|
||||||
|
|
||||||
l->addSpacing(15);
|
l->addSpacing(15);
|
||||||
l->addWidget(label);
|
l->addWidget(label);
|
||||||
|
l->addSpacing(5);
|
||||||
l->addLayout(content);
|
l->addLayout(content);
|
||||||
l->addStretch();
|
l->addStretch();
|
||||||
|
|
||||||
@ -99,7 +110,7 @@ SelectVolume::SelectVolume(QWidget *parent)
|
|||||||
|
|
||||||
void SelectVolume::load(const QString & json)
|
void SelectVolume::load(const QString & json)
|
||||||
{
|
{
|
||||||
VolumesModel * tempM = new VolumesModel();;
|
VolumesModel * tempM = new VolumesModel();
|
||||||
tempM->load(json);
|
tempM->load(json);
|
||||||
tableVolumes->setModel(tempM);
|
tableVolumes->setModel(tempM);
|
||||||
|
|
||||||
@ -107,11 +118,47 @@ void SelectVolume::load(const QString & json)
|
|||||||
|
|
||||||
tableVolumes->setFixedSize(419,341);
|
tableVolumes->setFixedSize(419,341);
|
||||||
|
|
||||||
|
if(tempM->rowCount()>0)
|
||||||
|
{
|
||||||
|
tableVolumes->selectRow(0);
|
||||||
|
loadVolumeInfo(tempM->index(0,0));
|
||||||
|
}
|
||||||
|
|
||||||
if(model != 0)
|
if(model != 0)
|
||||||
delete model;
|
delete model;
|
||||||
else
|
else
|
||||||
model = tempM;
|
model = tempM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SelectVolume::~SelectVolume() {}
|
SelectVolume::~SelectVolume() {}
|
||||||
|
|
||||||
|
void SelectVolume::loadVolumeInfo(const QModelIndex & mi)
|
||||||
|
{
|
||||||
|
QStringList * data = static_cast<QStringList *>(mi.internalPointer());
|
||||||
|
QString coverURL = data->at(VolumesModel::COVER_URL);
|
||||||
|
QString deck = data->at(VolumesModel::DECK);
|
||||||
|
|
||||||
|
//cover->setText(coverURL);
|
||||||
|
detailLabel->setText(deck);
|
||||||
|
|
||||||
|
HttpWorker * search = new HttpWorker(coverURL);
|
||||||
|
connect(search,SIGNAL(dataReady(const QByteArray &)),this,SLOT(setCover(const QByteArray &)));
|
||||||
|
connect(search,SIGNAL(timeout()),this,SLOT(queryTimeOut())); //TODO
|
||||||
|
connect(search,SIGNAL(finished()),search,SLOT(deleteLater()));
|
||||||
|
search->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelectVolume::setCover(const QByteArray & data)
|
||||||
|
{
|
||||||
|
QPixmap p;
|
||||||
|
p.loadFromData(data);
|
||||||
|
int w = p.width();
|
||||||
|
int h = p.height();
|
||||||
|
|
||||||
|
cover->setPixmap(p);
|
||||||
|
float aspectRatio = static_cast<float>(w)/h;
|
||||||
|
|
||||||
|
cover->setFixedSize(180,static_cast<int>(180/aspectRatio));
|
||||||
|
|
||||||
|
cover->update();
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
class QLabel;
|
class QLabel;
|
||||||
class QTableView;
|
class QTableView;
|
||||||
class VolumesModel;
|
class VolumesModel;
|
||||||
|
class QModelIndex;
|
||||||
|
|
||||||
class SelectVolume : public QWidget
|
class SelectVolume : public QWidget
|
||||||
{
|
{
|
||||||
@ -14,6 +15,9 @@ public:
|
|||||||
SelectVolume(QWidget * parent = 0);
|
SelectVolume(QWidget * parent = 0);
|
||||||
void load(const QString & json);
|
void load(const QString & json);
|
||||||
virtual ~SelectVolume();
|
virtual ~SelectVolume();
|
||||||
|
public slots:
|
||||||
|
void loadVolumeInfo(const QModelIndex & mi);
|
||||||
|
void setCover(const QByteArray &);
|
||||||
private:
|
private:
|
||||||
QLabel * cover;
|
QLabel * cover;
|
||||||
QLabel * detailLabel;
|
QLabel * detailLabel;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user