23 #include "maplistselector.h"
25 #include "commongui.h"
26 #include "modreader.h"
27 #include "templatedpathresolver.h"
31 #include <QScopedPointer>
32 #include <QSharedPointer>
35 MapEntry::MapEntry(
const QString &name,
const QString &originalFile,
const bool &isIwad)
38 this->originalFile = originalFile;
39 this->isIwad = isIwad;
42 DClass<MapListSelector> :
public Ui::MapListSelector
46 QList<MapEntry> mapList;
47 QScopedPointer<QTimer> checkWadTimer;
54 d->checkWadTimer.reset(
new QTimer);
59 connect(d->checkWadTimer.data(), SIGNAL(timeout()),
this, SLOT(performCheckStep()));
62 MapListSelector::~MapListSelector()
69 d->progressBar->setMaximum(d->progressBar->value() + paths.size());
70 setIfFinishedStateIsEnabled(
false);
71 d->checkWadTimer->start(0);
76 QStringList tempSelectedMapList;
77 for (
int i = 0; i < d->listMapsWidget->count(); ++i)
79 QListWidgetItem *item = d->listMapsWidget->item(i);
80 if (item->checkState() == Qt::Checked)
81 tempSelectedMapList << item->text();
83 return tempSelectedMapList;
86 void MapListSelector::performCheckStep()
88 if (d->paths.isEmpty())
90 d->checkWadTimer->stop();
91 setMapsOfCheckableList(d->mapList);
92 setIfFinishedStateIsEnabled(
true);
96 QSharedPointer<ModReader> modReader = ModReader::create(path);
97 if (!modReader.isNull() && modReader->load())
99 for (
const QString &tempMap : modReader->getAllMaps())
101 addEntryToMapList(
MapEntry(tempMap, QFile(path).fileName(), modReader->isIwad()));
104 d->progressBar->setValue(d->progressBar->value() + 1);
107 void MapListSelector::addEntryToMapList(
const MapEntry &newEntry)
109 bool equalEntryFound =
false;
110 for (
int i = 0; i < d->mapList.size(); ++i)
112 if (d->mapList[i].name == newEntry.name)
114 d->mapList.replace(i, newEntry);
115 equalEntryFound =
true;
118 if (!equalEntryFound)
119 d->mapList.append(newEntry);
122 void MapListSelector::setMapsOfCheckableList(
const QList<MapEntry> &list)
124 d->listMapsWidget->clear();
125 for (
const MapEntry &mapEntry : list)
127 auto item =
new QListWidgetItem(mapEntry.name, d->listMapsWidget);
128 item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
129 item->setCheckState(Qt::Checked);
132 item->setBackground(Qt::lightGray);
133 item->setForeground(Qt::black);
135 item->setToolTip(
"File: " + mapEntry.originalFile);
139 void MapListSelector::setIfFinishedStateIsEnabled(
const bool &state)
141 d->btnAdd->setEnabled(state);
143 d->btnAdd->setFocus();
144 d->checkAll->setEnabled(state);
145 d->descriptionSelect->setVisible(state);
146 d->listMapsWidget->setVisible(state);
147 d->descriptionLoading->setVisible(!state);
148 d->progressBar->setVisible(!state);
152 void MapListSelector::accept()
157 void MapListSelector::reject()
159 d->listMapsWidget->clear();
160 d->checkWadTimer->stop();
164 void MapListSelector::selectAll()
166 Qt::CheckState checkState = d->checkAll->checkState();
167 for (
int i = 0; i < d->listMapsWidget->count(); ++i)
168 d->listMapsWidget->item(i)->setCheckState(checkState);
171 void MapListSelector::listItemChanged()
174 if (checkedMaps.size() > 0 && checkedMaps.size() < d->listMapsWidget->count())
175 d->checkAll->setCheckState(Qt::PartiallyChecked);
178 d->checkAll->setCheckState((checkedMaps.size() == 0) ?
179 Qt::Unchecked : Qt::Checked);
183 void MapListSelector::showContextMenu(
const QPoint &pos)
185 QPoint globalPos = d->listMapsWidget->mapToGlobal(pos);
188 myMenu.addAction(tr(
"Invert selection"),
this, SLOT(invertSelection()));
189 myMenu.exec(globalPos);
192 void MapListSelector::invertSelection()
194 for (
int i = 0; i < d->listMapsWidget->count(); ++i)
196 QListWidgetItem *item = d->listMapsWidget->item(i);
197 if (item->isSelected())
198 item->setCheckState(item->checkState() == Qt::Unchecked ?
199 Qt::Checked : Qt::Unchecked);