23 #include "missingwadsdialog.h" 25 #include "ui_missingwadsdialog.h" 26 #include "gui/mainwindow.h" 27 #include "gui/wadseekerinterface.h" 29 #include "application.h" 30 #include <wadseeker/freedoom.h> 31 #include <wadseeker/wadseeker.h> 32 #include <QListWidgetItem> 34 DClass<MissingWadsDialog> :
public Ui::MissingWadsDialog
37 ::MissingWadsDialog::MissingWadsProceed decision;
53 MissingWadsDialog::~MissingWadsDialog()
57 void MissingWadsDialog::setAllowIgnore(
bool allow)
59 d->btnIgnore->setVisible(allow);
60 d->lblUseIgnore->setVisible(allow);
61 d->lblUseIgnoreCantRun->setVisible(allow);
64 void MissingWadsDialog::setup()
66 d->btnInstallFreedoom->hide();
67 if (WadseekerInterface::isInstantiated())
69 setupWadseekerIsRunning();
73 setupWadseekerNotRunning();
77 void MissingWadsDialog::setupWadseekerIsRunning()
79 d->areaWadseekerAlreadyRunning->show();
80 d->areaWadseekerCanBeRun->hide();
81 d->btnInstall->hide();
84 void MissingWadsDialog::setupWadseekerNotRunning()
86 d->areaWadseekerAlreadyRunning->hide();
87 d->areaWadseekerCanBeRun->show();
89 setupForbiddenFilesArea();
90 setupDownloadableFilesArea();
91 setupOptionalFilesArea();
93 d->btnInstall->setVisible(hasAnyAllowedFile());
96 void MissingWadsDialog::setupForbiddenFilesArea()
98 QStringList files = forbiddenFiles();
101 d->areaCantBeDownloaded->show();
102 d->lblCantBeDownloadedFiles->setText(files.join(
", "));
104 bool installFreedoom = isFreedoomReplaceableOnList(files);
105 d->lblInstallFreedoom->setVisible(installFreedoom);
106 d->btnInstallFreedoom->setVisible(installFreedoom);
110 d->areaCantBeDownloaded->hide();
114 void MissingWadsDialog::setupDownloadableFilesArea()
116 QStringList files = downloadableFiles();
117 if (!files.isEmpty())
119 d->areaCanBeDownloadedFiles->show();
120 d->lblCanBeDownloadedFiles->setText(files.join(
", "));
124 d->areaCanBeDownloadedFiles->hide();
128 void MissingWadsDialog::setupOptionalFilesArea()
130 QStringList files = optionalFiles();
131 if (!files.isEmpty())
133 d->areaOptionalFiles->show();
134 foreach (
const QString &file, files)
136 QListWidgetItem *item =
new QListWidgetItem(file, d->optionalFilesList);
137 item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
138 item->setCheckState(Qt::Checked);
143 d->areaOptionalFiles->hide();
147 bool MissingWadsDialog::isFreedoomReplaceableOnList(
const QStringList &files)
const 149 foreach (
const QString &file, files)
151 if (Freedoom::hasFreedoomReplacement(file))
159 void MissingWadsDialog::updateStateAccordingToFileSelection()
161 d->btnInstall->setEnabled(!filesToDownload().isEmpty());
164 void MissingWadsDialog::ignoreMissingFiles()
166 d->decision = Ignore;
170 void MissingWadsDialog::installFreedoom()
172 QTimer::singleShot(0, gApp->mainWindow(), SLOT(showInstallFreedoomDialog()));
176 void MissingWadsDialog::installMissingFiles()
178 d->decision = Install;
182 QStringList MissingWadsDialog::downloadableFiles()
const 185 foreach (
const PWad &file, d->wads)
187 if (!Wadseeker::isForbiddenWad(file.
name()) && !file.
isOptional())
189 result << file.
name();
195 QStringList MissingWadsDialog::forbiddenFiles()
const 198 foreach (
const PWad &file, d->wads)
200 if (Wadseeker::isForbiddenWad(file.
name()))
202 result << file.
name();
208 QStringList MissingWadsDialog::optionalFiles()
const 211 foreach (
const PWad &file, d->wads)
215 result << file.
name();
221 QStringList MissingWadsDialog::filesToDownload()
const 223 QStringList result = downloadableFiles();
224 result << selectedOptionalFiles();
228 QStringList MissingWadsDialog::selectedOptionalFiles()
const 231 for (
int i = 0; i < d->optionalFilesList->count(); ++i)
233 QListWidgetItem *item = d->optionalFilesList->item(i);
234 if (item->checkState() == Qt::Checked)
236 result << item->text();
242 bool MissingWadsDialog::hasAnyAllowedFile()
const 244 return !downloadableFiles().isEmpty() || !optionalFiles().isEmpty();
247 MissingWadsDialog::MissingWadsProceed MissingWadsDialog::decision()
const
bool isOptional() const
Is this WAD required to join the server?
const QString & name() const
File name of the WAD.