Rework the way sets selection/importing works; fix #539 (rebased)

This commit is contained in:
Fabio Bas 2015-04-18 18:47:09 +02:00
parent e69ca60164
commit 881cea27f4
13 changed files with 369 additions and 162 deletions

View file

@ -33,7 +33,7 @@ static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardSet *set)
CardSet::CardSet(const QString &_shortName, const QString &_longName, const QString &_setType, const QDate &_releaseDate)
: shortName(_shortName), longName(_longName), releaseDate(_releaseDate), setType(_setType)
{
updateSortKey();
loadSetOptions();
}
QString CardSet::getCorrectedShortName() const
@ -58,12 +58,36 @@ void CardSet::setSortKey(unsigned int _sortKey)
settings.setValue("sortkey", sortKey);
}
void CardSet::updateSortKey()
void CardSet::loadSetOptions()
{
QSettings settings;
settings.beginGroup("sets");
settings.beginGroup(shortName);
sortKey = settings.value("sortkey", 0).toInt();
enabled = settings.value("enabled", false).toBool();
isknown = settings.value("isknown", false).toBool();
// qDebug() << "load set" << shortName << "key" << sortKey;
}
void CardSet::setEnabled(bool _enabled)
{
enabled = _enabled;
QSettings settings;
settings.beginGroup("sets");
settings.beginGroup(shortName);
settings.setValue("enabled", enabled);
}
void CardSet::setIsKnown(bool _isknown)
{
isknown = _isknown;
QSettings settings;
settings.beginGroup("sets");
settings.beginGroup(shortName);
settings.setValue("isknown", isknown);
}
class SetList::CompareFunctor {
@ -79,6 +103,81 @@ void SetList::sortByKey()
qSort(begin(), end(), CompareFunctor());
}
int SetList::getEnabledSetsNum()
{
int num=0;
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
if(set->getEnabled())
++num;
}
return num;
}
int SetList::getUnknownSetsNum()
{
int num=0;
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
if(!set->getIsKnown())
++num;
}
return num;
}
void SetList::enableAllUnknown()
{
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
if(!set->getIsKnown())
{
set->setIsKnown(true);
set->setEnabled(true);
}
}
}
void SetList::enableAll()
{
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
set->setIsKnown(true);
set->setEnabled(true);
}
}
void SetList::markAllAsKnown()
{
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
if(!set->getIsKnown())
{
set->setIsKnown(true);
}
}
}
void SetList::guessSortKeys()
{
// sort by release date DESC; invalid dates to the bottom.
QDate distantFuture(2050, 1, 1);
int aHundredYears = 36500;
for (int i = 0; i < size(); ++i)
{
CardSet *set = at(i);
QDate date = set->getReleaseDate();
if(date.isNull())
set->setSortKey(aHundredYears);
else
set->setSortKey(date.daysTo(distantFuture));
}
}
PictureToLoad::PictureToLoad(CardInfo *_card, bool _hq)
: card(_card), setIndex(0), hq(_hq)
{
@ -512,7 +611,7 @@ void CardInfo::getPixmap(QSize size, QPixmap &pixmap)
void CardInfo::clearPixmapCache()
{
qDebug() << "Deleting pixmap for" << name;
//qDebug() << "Deleting pixmap for" << name;
QPixmapCache::remove(pixmapCacheKey);
}
@ -736,7 +835,11 @@ void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
else if (xml.name() == "releasedate")
releaseDate = QDate::fromString(xml.readElementText(), Qt::ISODate);
}
sets.insert(shortName, new CardSet(shortName, longName, setType, releaseDate));
CardSet * newSet = getSet(shortName);
newSet->setLongName(longName);
newSet->setSetType(setType);
newSet->setReleaseDate(releaseDate);
}
}
}
@ -907,6 +1010,11 @@ void CardDatabase::picDownloadHqChanged()
}
}
void CardDatabase::emitCardListChanged()
{
emit cardListChanged();
}
LoadStatus CardDatabase::loadCardDatabase(const QString &path, bool tokens)
{
LoadStatus tempLoadStatus = NotLoaded;
@ -919,8 +1027,6 @@ LoadStatus CardDatabase::loadCardDatabase(const QString &path, bool tokens)
while (setsIterator.hasNext())
allSets.append(setsIterator.next().value());
allSets.sortByKey();
for (int i = 0; i < allSets.size(); ++i)
allSets[i]->setSortKey(i);
emit cardListChanged();
}

View file

@ -31,6 +31,7 @@ private:
unsigned int sortKey;
QDate releaseDate;
QString setType;
bool enabled, isknown;
public:
CardSet(const QString &_shortName = QString(), const QString &_longName = QString(), const QString &_setType = QString(), const QDate &_releaseDate = QDate());
QString getCorrectedShortName() const;
@ -38,9 +39,17 @@ public:
QString getLongName() const { return longName; }
QString getSetType() const { return setType; }
QDate getReleaseDate() const { return releaseDate; }
void setLongName(QString & _longName) { longName = _longName; }
void setSetType(QString & _setType) { setType = _setType; }
void setReleaseDate(QDate & _releaseDate) { releaseDate = _releaseDate; }
void loadSetOptions();
int getSortKey() const { return sortKey; }
void setSortKey(unsigned int _sortKey);
void updateSortKey();
bool getEnabled() const { return enabled; }
void setEnabled(bool _enabled);
bool getIsKnown() const { return isknown; }
void setIsKnown(bool _isknown);
};
class SetList : public QList<CardSet *> {
@ -48,6 +57,12 @@ private:
class CompareFunctor;
public:
void sortByKey();
void guessSortKeys();
void enableAllUnknown();
void enableAll();
void markAllAsKnown();
int getEnabledSetsNum();
int getUnknownSetsNum();
};
class PictureToLoad {
@ -253,6 +268,7 @@ public:
public slots:
void clearPixmapCache();
LoadStatus loadCardDatabase(const QString &path, bool tokens = false);
void emitCardListChanged();
private slots:
void imageLoaded(CardInfo *card, QImage image);
void picDownloadChanged();

View file

@ -42,7 +42,10 @@ QVariant CardDatabaseModel::data(const QModelIndex &index, int role) const
QStringList setList;
const QList<CardSet *> &sets = card->getSets();
for (int i = 0; i < sets.size(); i++)
setList << sets[i]->getShortName();
{
if(sets[i]->getEnabled())
setList << sets[i]->getShortName();
}
return setList.join(", ");
}
case ManaCostColumn: return role == SortRole ?
@ -77,9 +80,26 @@ void CardDatabaseModel::updateCardList()
for (int i = 0; i < cardList.size(); ++i)
disconnect(cardList[i], 0, this, 0);
cardList = db->getCardList();
for (int i = 0; i < cardList.size(); ++i)
connect(cardList[i], SIGNAL(cardInfoChanged(CardInfo *)), this, SLOT(cardInfoChanged(CardInfo *)));
cardList.clear();
foreach(CardInfo * card, db->getCardList())
{
bool hasSet = false;
foreach(CardSet * set, card->getSets())
{
if(set->getEnabled())
{
hasSet = true;
break;
}
}
if(hasSet)
{
cardList.append(card);
connect(card, SIGNAL(cardInfoChanged(CardInfo *)), this, SLOT(cardInfoChanged(CardInfo *)));
}
}
endResetModel();
}

View file

@ -4,6 +4,11 @@ SetsModel::SetsModel(CardDatabase *_db, QObject *parent)
: QAbstractTableModel(parent), sets(_db->getSetList())
{
sets.sortByKey();
foreach(CardSet *set, sets)
{
if(set->getEnabled())
enabledSets.insert(set);
}
}
SetsModel::~SetsModel()
@ -20,12 +25,20 @@ int SetsModel::rowCount(const QModelIndex &parent) const
QVariant SetsModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || (index.column() >= NUM_COLS) || (index.row() >= rowCount()) || (role != Qt::DisplayRole))
if (!index.isValid() || (index.column() >= NUM_COLS) || (index.row() >= rowCount()))
return QVariant();
CardSet *set = sets[index.row()];
if ( role == Qt::CheckStateRole && index.column() == EnabledCol )
return static_cast< int >( enabledSets.contains(set) ? Qt::Checked : Qt::Unchecked );
if (role != Qt::DisplayRole)
return QVariant();
switch (index.column()) {
case SortKeyCol: return QString("%1").arg(set->getSortKey(), 4, 10, QChar('0'));
case SortKeyCol: return QString("%1").arg(set->getSortKey(), 8, 10, QChar('0'));
case IsKnownCol: return set->getIsKnown();
case SetTypeCol: return set->getSetType();
case ShortNameCol: return set->getShortName();
case LongNameCol: return set->getLongName();
@ -34,12 +47,24 @@ QVariant SetsModel::data(const QModelIndex &index, int role) const
}
}
bool SetsModel::setData(const QModelIndex & index, const QVariant & value, int role)
{
if (role == Qt::CheckStateRole && index.column () == EnabledCol)
{
toggleRow(index.row(), value == Qt::Checked);
return true;
}
return false;
}
QVariant SetsModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if ((role != Qt::DisplayRole) || (orientation != Qt::Horizontal))
return QVariant();
switch (section) {
case SortKeyCol: return tr("Key");
case IsKnownCol: return tr("Is known");
case EnabledCol: return tr("Enabled");
case SetTypeCol: return tr("Set type");
case ShortNameCol: return tr("Set code");
case LongNameCol: return tr("Long name");
@ -50,8 +75,17 @@ QVariant SetsModel::headerData(int section, Qt::Orientation orientation, int rol
Qt::ItemFlags SetsModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags result = QAbstractTableModel::flags(index);
return result | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
if (!index.isValid())
return 0;
Qt::ItemFlags flags = QAbstractTableModel::flags(index) |
Qt::ItemIsDragEnabled |
Qt::ItemIsDropEnabled;
if ( index.column() == EnabledCol)
flags |= Qt::ItemIsUserCheckable;
return flags;
}
Qt::DropActions SetsModel::supportedDropActions() const
@ -86,6 +120,30 @@ bool SetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
return true;
}
void SetsModel::toggleRow(int row, bool enable)
{
CardSet *temp = sets.at(row);
if(enable)
enabledSets.insert(temp);
else
enabledSets.remove(temp);
emit dataChanged(index(row, EnabledCol), index(row, EnabledCol));
}
void SetsModel::toggleAll(bool enable)
{
enabledSets.clear();
if(enable)
{
foreach(CardSet *set, sets)
enabledSets.insert(set);
}
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
}
void SetsModel::swapRows(int oldRow, int newRow)
{
beginRemoveRows(QModelIndex(), oldRow, oldRow);
@ -124,19 +182,35 @@ void SetsModel::sort(int column, Qt::SortOrder order)
emit dataChanged(index(0, 0), index(numRows - 1, columnCount() - 1));
}
void SetsModel::save()
void SetsModel::save(CardDatabase *db)
{
// order
for (int i = 0; i < sets.size(); i++)
sets[i]->setSortKey(i);
sets[i]->setSortKey(i+1);
// enabled sets
foreach(CardSet *set, sets)
set->setEnabled(enabledSets.contains(set));
sets.sortByKey();
db->emitCardListChanged();
}
void SetsModel::restore(CardDatabase *db)
{
// order
sets = db->getSetList();
sets.sortByKey();
// enabled sets
enabledSets.clear();
foreach(CardSet *set, sets)
{
if(set->getEnabled())
enabledSets.insert(set);
}
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
}

View file

@ -3,6 +3,7 @@
#include <QAbstractTableModel>
#include <QMimeData>
#include <QSet>
#include "carddatabase.h"
class SetsProxyModel;
@ -21,16 +22,18 @@ class SetsModel : public QAbstractTableModel {
Q_OBJECT
friend class SetsProxyModel;
private:
static const int NUM_COLS = 5;
static const int NUM_COLS = 7;
SetList sets;
QSet<CardSet *> enabledSets;
public:
enum SetsColumns { SortKeyCol, LongNameCol, ShortNameCol, SetTypeCol, ReleaseDateCol };
enum SetsColumns { SortKeyCol, IsKnownCol, EnabledCol, LongNameCol, ShortNameCol, SetTypeCol, ReleaseDateCol };
SetsModel(CardDatabase *_db, QObject *parent = 0);
~SetsModel();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent); return NUM_COLS; }
QVariant data(const QModelIndex &index, int role) const;
bool setData(const QModelIndex & index, const QVariant & value, int role);
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
Qt::DropActions supportedDropActions() const;
@ -39,8 +42,10 @@ public:
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
QStringList mimeTypes() const;
void swapRows(int oldRow, int newRow);
void toggleRow(int row, bool enable);
void toggleAll(bool enable);
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
void save();
void save(CardDatabase *db);
void restore(CardDatabase *db);
};

View file

@ -17,6 +17,7 @@
#include <QClipboard>
#include <QTextStream>
#include <QProcessEnvironment>
#include <QTimer>
#include "tab_deck_editor.h"
#include "window_sets.h"
#include "carddatabase.h"
@ -287,10 +288,13 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
deckEditToolBar->addAction(aDecrement);
deckEditToolBar->addAction(aIncrement);
deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
retranslateUi();
resize(950, 700);
connect(this, SIGNAL(setListChanged()), db, SIGNAL(cardListChanged()));
QTimer::singleShot(0, this, SLOT(checkUnknownSets()));
}
TabDeckEditor::~TabDeckEditor()
@ -781,3 +785,40 @@ void TabDeckEditor::filterRemove(QAction *action) {
filterModel->removeRow(idx.row(), idx.parent());
}
void TabDeckEditor::checkUnknownSets()
{
SetList sets = db->getSetList();
// no set is enabled. Probably this is the first time running trice
if(!sets.getEnabledSetsNum())
{
sets.guessSortKeys();
sets.sortByKey();
sets.enableAll();
db->emitCardListChanged();
actEditSets();
return;
}
int numUnknownSets = sets.getUnknownSetsNum();
// no unkown sets.
if(!numUnknownSets)
return;
int ret = QMessageBox::question(this, tr("New sets found"), tr("%1 new set(s) have been found in the card database. Do you want to enable them?").arg(numUnknownSets), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes);
switch(ret)
{
case QMessageBox::No:
sets.markAllAsKnown();
break;
case QMessageBox::Yes:
sets.enableAllUnknown();
db->emitCardListChanged();
break;
default:
break;
}
}

View file

@ -111,10 +111,12 @@ public:
void setDeck(DeckLoader *_deckLoader);
void setModified(bool _windowModified);
bool confirmClose();
public slots:
void closeRequest();
public slots:
void closeRequest();
void checkUnknownSets();
signals:
void deckEditorClosing(TabDeckEditor *tab);
void deckEditorClosing(TabDeckEditor *tab);
void setListChanged();
};
#endif

View file

@ -7,6 +7,9 @@
#include <QPushButton>
#include <QItemSelection>
#include <QMessageBox>
#include <QGroupBox>
#include <QDialogButtonBox>
#include <QVBoxLayout>
WndSets::WndSets(QWidget *parent)
: QMainWindow(parent)
@ -37,12 +40,18 @@ WndSets::WndSets(QWidget *parent)
view->sortByColumn(SetsModel::SortKeyCol, Qt::AscendingOrder);
view->setColumnHidden(SetsModel::SortKeyCol, true);
view->setColumnHidden(SetsModel::IsKnownCol, true);
view->setRootIsDecorated(false);
saveButton = new QPushButton(tr("Save set ordering"));
connect(saveButton, SIGNAL(clicked()), this, SLOT(actSave()));
restoreButton = new QPushButton(tr("Restore saved set ordering"));
connect(restoreButton, SIGNAL(clicked()), this, SLOT(actRestore()));
enableButton = new QPushButton(tr("Enable set"));
connect(enableButton, SIGNAL(clicked()), this, SLOT(actEnable()));
disableButton = new QPushButton(tr("Disable set"));
connect(disableButton, SIGNAL(clicked()), this, SLOT(actDisable()));
enableAllButton = new QPushButton(tr("Enable all sets"));
connect(enableAllButton, SIGNAL(clicked()), this, SLOT(actEnableAll()));
disableAllButton = new QPushButton(tr("Disable all sets"));
connect(disableAllButton, SIGNAL(clicked()), this, SLOT(actDisableAll()));
upButton = new QPushButton(tr("Move selected set up"));
connect(upButton, SIGNAL(clicked()), this, SLOT(actUp()));
downButton = new QPushButton(tr("Move selected set down"));
@ -52,6 +61,8 @@ WndSets::WndSets(QWidget *parent)
bottomButton = new QPushButton(tr("Move selected set to bottom"));
connect(bottomButton, SIGNAL(clicked()), this, SLOT(actBottom()));
enableButton->setDisabled(true);
disableButton->setDisabled(true);
upButton->setDisabled(true);
downButton->setDisabled(true);
topButton->setDisabled(true);
@ -60,17 +71,31 @@ WndSets::WndSets(QWidget *parent)
connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
this, SLOT(actToggleButtons(const QItemSelection &, const QItemSelection &)));
QGroupBox *toggleFrame = new QGroupBox(tr("Enable sets"));
QVBoxLayout *toggleVBox = new QVBoxLayout;
toggleVBox->addWidget(enableButton);
toggleVBox->addWidget(disableButton);
toggleVBox->addWidget(enableAllButton);
toggleVBox->addWidget(disableAllButton);
toggleFrame->setLayout(toggleVBox);
QGroupBox *sortFrame = new QGroupBox(tr("Sort sets"));
QVBoxLayout *sortVBox = new QVBoxLayout;
sortVBox->addWidget(upButton);
sortVBox->addWidget(downButton);
sortVBox->addWidget(topButton);
sortVBox->addWidget(bottomButton);
sortFrame->setLayout(sortVBox);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(actSave()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(actRestore()));
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(view, 0, 0, 1, 2);
mainLayout->addWidget(upButton, 1, 0, 1, 1);
mainLayout->addWidget(downButton, 2, 0, 1, 1);
mainLayout->addWidget(topButton, 1, 1, 1, 1);
mainLayout->addWidget(bottomButton, 2, 1, 1, 1);
mainLayout->addWidget(saveButton, 3, 0, 1, 1);
mainLayout->addWidget(restoreButton, 3, 1, 1, 1);
mainLayout->addWidget(toggleFrame, 1, 0, 1, 1);
mainLayout->addWidget(sortFrame, 1, 1, 1, 1);
mainLayout->addWidget(buttonBox, 2, 0, 1, 2);
QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout);
@ -86,13 +111,15 @@ WndSets::~WndSets()
void WndSets::actSave()
{
model->save();
model->save(db);
QMessageBox::information(this, tr("Success"), tr("The sets database has been saved successfully."));
close();
}
void WndSets::actRestore()
{
model->restore(db);
close();
}
void WndSets::actToggleButtons(const QItemSelection & selected, const QItemSelection &)
@ -102,6 +129,8 @@ void WndSets::actToggleButtons(const QItemSelection & selected, const QItemSelec
downButton->setDisabled(disabled);
topButton->setDisabled(disabled);
bottomButton->setDisabled(disabled);
enableButton->setDisabled(disabled);
disableButton->setDisabled(disabled);
}
void WndSets::selectRow(int row)
@ -111,6 +140,34 @@ void WndSets::selectRow(int row)
view->scrollTo(idx, QAbstractItemView::EnsureVisible);
}
void WndSets::actEnable()
{
QModelIndexList rows = view->selectionModel()->selectedRows();
if(rows.empty())
return;
model->toggleRow(rows.first().row(), true);
}
void WndSets::actDisable()
{
QModelIndexList rows = view->selectionModel()->selectedRows();
if(rows.empty())
return;
model->toggleRow(rows.first().row(), false);
}
void WndSets::actEnableAll()
{
model->toggleAll(true);
}
void WndSets::actDisableAll()
{
model->toggleAll(false);
}
void WndSets::actUp()
{
QModelIndexList rows = view->selectionModel()->selectedRows();

View file

@ -15,13 +15,18 @@ class WndSets : public QMainWindow {
private:
SetsModel *model;
QTreeView *view;
QPushButton *saveButton, *restoreButton, *upButton, *downButton, *bottomButton, *topButton;
QPushButton *enableButton, *disableButton, *enableAllButton, *disableAllButton,
*upButton, *downButton, *bottomButton, *topButton;
public:
WndSets(QWidget *parent = 0);
~WndSets();
protected:
void selectRow(int row);
private slots:
void actEnable();
void actDisable();
void actEnableAll();
void actDisableAll();
void actSave();
void actRestore();
void actUp();

View file

@ -32,7 +32,6 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
QVariant editionCards;
QString setType;
QDate releaseDate;
bool import;
while (it.hasNext()) {
map = it.next().toMap();
@ -45,11 +44,7 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
setType[0] = setType[0].toUpper();
releaseDate = map.value("releaseDate").toDate();
// core and expansion sets are marked to be imported by default
import = (0 == QString::compare(setType, QString("core"), Qt::CaseInsensitive) ||
0 == QString::compare(setType, QString("expansion"), Qt::CaseInsensitive));
newSetList.append(SetToDownload(edition, editionLong, editionCards, import, setType, releaseDate));
newSetList.append(SetToDownload(edition, editionLong, editionCards, setType, releaseDate));
}
qSort(newSetList);
@ -265,10 +260,7 @@ int OracleImporter::startImport()
while (it.hasNext())
{
curSet = & it.next();
if(!curSet->getImport())
continue;
curSet = & it.next();
CardSet *set = new CardSet(curSet->getShortName(), curSet->getLongName(), curSet->getSetType(), curSet->getReleaseDate());
if (!sets.contains(set->getShortName()))
sets.insert(set->getShortName(), set);

View file

@ -8,7 +8,6 @@
class SetToDownload {
private:
QString shortName, longName;
bool import;
QVariant cards;
QDate releaseDate;
QString setType;
@ -18,10 +17,8 @@ public:
const QVariant &getCards() const { return cards; }
const QString &getSetType() const { return setType; }
const QDate &getReleaseDate() const { return releaseDate; }
bool getImport() const { return import; }
void setImport(bool _import) { import = _import; }
SetToDownload(const QString &_shortName, const QString &_longName, const QVariant &_cards, bool _import, const QString &_setType = QString(), const QDate &_releaseDate = QDate())
: shortName(_shortName), longName(_longName), import(_import), cards(_cards), releaseDate(_releaseDate), setType(_setType) { }
SetToDownload(const QString &_shortName, const QString &_longName, const QVariant &_cards, const QString &_setType = QString(), const QDate &_releaseDate = QDate())
: shortName(_shortName), longName(_longName), cards(_cards), releaseDate(_releaseDate), setType(_setType) { }
bool operator<(const SetToDownload &set) const { return longName.compare(set.longName, Qt::CaseInsensitive) < 0; }
};

View file

@ -56,7 +56,6 @@ OracleWizard::OracleWizard(QWidget *parent)
addPage(new IntroPage);
addPage(new LoadSetsPage);
addPage(new ChooseSetsPage);
addPage(new SaveSetsPage);
retranslateUi();
@ -427,94 +426,6 @@ void LoadSetsPage::importFinished()
}
}
ChooseSetsPage::ChooseSetsPage(QWidget *parent)
: OracleWizardPage(parent)
{
checkBoxLayout = new QVBoxLayout;
QWidget *checkboxFrame = new QWidget(this);
checkboxFrame->setLayout(checkBoxLayout);
QScrollArea *checkboxArea = new QScrollArea(this);
checkboxArea->setWidget(checkboxFrame);
checkboxArea->setWidgetResizable(true);
checkAllButton = new QPushButton(this);
connect(checkAllButton, SIGNAL(clicked()), this, SLOT(actCheckAll()));
uncheckAllButton = new QPushButton(this);
connect(uncheckAllButton, SIGNAL(clicked()), this, SLOT(actUncheckAll()));
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(checkboxArea, 0, 0, 1, 2);
layout->addWidget(checkAllButton, 1, 0);
layout->addWidget(uncheckAllButton, 1, 1);
setLayout(layout);
}
void ChooseSetsPage::initializePage()
{
// populate checkbox list
for (int i = 0; i < checkBoxList.size(); ++i)
delete checkBoxList[i];
checkBoxList.clear();
QList<SetToDownload> &sets = wizard()->importer->getSets();
for (int i = 0; i < sets.size(); ++i) {
QCheckBox *checkBox = new QCheckBox(sets[i].getLongName());
checkBox->setChecked(sets[i].getImport());
connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(checkBoxChanged(int)));
checkBoxLayout->addWidget(checkBox);
checkBoxList << checkBox;
}
}
void ChooseSetsPage::retranslateUi()
{
setTitle(tr("Sets selection"));
setSubTitle(tr("The following sets has been found in the source file. "
"Please mark the sets that will be imported.\n"
"All core and expansion sets are selected by default."));
checkAllButton->setText(tr("&Check all"));
uncheckAllButton->setText(tr("&Uncheck all"));
}
void ChooseSetsPage::checkBoxChanged(int state)
{
QCheckBox *checkBox = qobject_cast<QCheckBox *>(sender());
QList<SetToDownload> &sets = wizard()->importer->getSets();
for (int i = 0; i < sets.size(); ++i)
if (sets[i].getLongName() == checkBox->text()) {
sets[i].setImport(state);
break;
}
}
void ChooseSetsPage::actCheckAll()
{
for (int i = 0; i < checkBoxList.size(); ++i)
checkBoxList[i]->setChecked(true);
}
void ChooseSetsPage::actUncheckAll()
{
for (int i = 0; i < checkBoxList.size(); ++i)
checkBoxList[i]->setChecked(false);
}
bool ChooseSetsPage::validatePage()
{
for (int i = 0; i < checkBoxList.size(); ++i)
{
if(checkBoxList[i]->isChecked())
return true;
}
QMessageBox::critical(this, tr("Error"), tr("Please mark at least one set."));
return false;
}
SaveSetsPage::SaveSetsPage(QWidget *parent)
: OracleWizardPage(parent)
{

View file

@ -98,25 +98,6 @@ private slots:
void zipDownloadFailed(const QString &message);
};
class ChooseSetsPage : public OracleWizardPage
{
Q_OBJECT
public:
ChooseSetsPage(QWidget *parent = 0);
void retranslateUi();
protected:
void initializePage();
bool validatePage();
private:
QPushButton *checkAllButton, *uncheckAllButton;
QVBoxLayout *checkBoxLayout;
QList<QCheckBox *> checkBoxList;
private slots:
void actCheckAll();
void actUncheckAll();
void checkBoxChanged(int state);
};
class SaveSetsPage : public OracleWizardPage
{
Q_OBJECT