123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #include "StartGameTab.h"
- #include "ui_StartGameTab.h"
- #include "../mainwindow_moc.h"
- #include "../main.h"
- #include "../modManager/cmodlistview_moc.h"
- #include "../../lib/filesystem/Filesystem.h"
- #include "../../lib/VCMIDirs.h"
- StartGameTab::StartGameTab(QWidget * parent)
- : QWidget(parent)
- , ui(new Ui::StartGameTab)
- {
- ui->setupUi(this);
- refreshState();
- ui->buttonGameResume->setVisible(false); // TODO: implement
- }
- StartGameTab::~StartGameTab()
- {
- delete ui;
- }
- MainWindow * StartGameTab::getMainWindow()
- {
- foreach(QWidget *w, qApp->allWidgets())
- if(QMainWindow* mainWin = qobject_cast<QMainWindow*>(w))
- return dynamic_cast<MainWindow *>(mainWin);
- return nullptr;
- }
- void StartGameTab::refreshState()
- {
- refreshGameData();
- refreshUpdateStatus(EGameUpdateStatus::NOT_CHECKED);//TODO
- refreshTranslation(ETranslationStatus::ACTIVE);
- refreshMods();
- }
- void StartGameTab::refreshGameData()
- {
- // Some players are using pirated version of the game with some of the files missing
- // leading to broken town hall menu (and possibly other dialogs)
- // Provide diagnostics to indicate problem with chair-monitor adaptor layer and not with VCMI
- static constexpr std::array potentiallyMissingFiles = {
- "Data/TpThBkDg.bmp",
- "Data/TpThBkFr.bmp",
- "Data/TpThBkIn.bmp",
- "Data/TpThBkNc.bmp",
- "Data/TpThBkSt.bmp",
- "Data/TpThBRrm.bmp",
- "Data/TpThBkCs.bmp",
- "Data/TpThBkRm.bmp",
- "Data/TpThBkTw.bmp",
- };
- // Some players for some reason don't have AB expansion campaign files
- static constexpr std::array armaggedonBladeCampaigns = {
- "DATA/AB",
- "DATA/BLOOD",
- "DATA/SLAYER",
- "DATA/FESTIVAL",
- "DATA/FIRE",
- "DATA/FOOL",
- };
- bool missingSoundtrack = !CResourceHandler::get()->existsResource(AudioPath::builtin("Music/MainMenu"));
- bool missingVideoFiles = !CResourceHandler::get()->existsResource(VideoPath::builtin("Video/H3Intro"));
- bool missingGameFiles = false;
- bool missingCampaings = false;
- for (const auto & filename : potentiallyMissingFiles)
- missingGameFiles &= !CResourceHandler::get()->existsResource(ImagePath::builtin(filename));
- for (const auto & filename : armaggedonBladeCampaigns)
- missingCampaings &= !CResourceHandler::get()->existsResource(ResourcePath(filename, EResType::CAMPAIGN));
- ui->labelMissingCampaigns->setVisible(missingCampaings);
- ui->labelMissingFiles->setVisible(missingGameFiles);
- ui->labelMissingVideo->setVisible(missingVideoFiles);
- ui->labelMissingSoundtrack->setVisible(missingSoundtrack);
- ui->buttonMissingCampaignsHelp->setVisible(missingCampaings);
- ui->buttonMissingFilesHelp->setVisible(missingGameFiles);
- ui->buttonMissingVideoHelp->setVisible(missingVideoFiles);
- ui->buttonMissingSoundtrackHelp->setVisible(missingSoundtrack);
- // TODO: Chronicles
- }
- void StartGameTab::refreshTranslation(ETranslationStatus status)
- {
- ui->buttonInstallTranslation->setVisible(status == ETranslationStatus::NOT_INSTALLLED);
- ui->buttonInstallTranslationHelp->setVisible(status == ETranslationStatus::NOT_INSTALLLED);
- ui->buttonActivateTranslation->setVisible(status == ETranslationStatus::NOT_INSTALLLED);
- ui->buttonActivateTranslationHelp->setVisible(status == ETranslationStatus::NOT_INSTALLLED);
- }
- void StartGameTab::refreshMods()
- {
- QStringList updateableMods;
- ui->buttonUpdateMods->setVisible(!updateableMods.empty());
- ui->buttonUpdateModsHelp->setVisible(!updateableMods.empty());
- }
- void StartGameTab::refreshUpdateStatus(EGameUpdateStatus status)
- {
- ui->buttonEngine->setText("VCMI " VCMI_VERSION_STRING);
- ui->buttonUpdateCheck->setVisible(status == EGameUpdateStatus::NOT_CHECKED);
- ui->labelUpdateNotFound->setVisible(status == EGameUpdateStatus::NO_UPDATE);
- ui->labelUpdateAvailable->setVisible(status == EGameUpdateStatus::UPDATE_AVAILABLE);
- ui->buttonOpenChangelog->setVisible(status == EGameUpdateStatus::UPDATE_AVAILABLE);
- ui->buttonOpenDownloads->setVisible(status == EGameUpdateStatus::UPDATE_AVAILABLE);
- }
- void StartGameTab::on_buttonGameStart_clicked()
- {
- getMainWindow()->hide();
- startGame({});
- }
- void StartGameTab::on_buttonOpenChangelog_clicked()
- {
- QDesktopServices::openUrl(QUrl("https://vcmi.eu/ChangeLog/"));
- }
- void StartGameTab::on_buttonOpenDownloads_clicked()
- {
- QDesktopServices::openUrl(QUrl("https://vcmi.eu/download/"));
- }
- void StartGameTab::on_buttonUpdateCheck_clicked()
- {
- // TODO: implement
- }
- void StartGameTab::on_buttonGameEditor_clicked()
- {
- getMainWindow()->hide();
- startEditor({});
- }
- void StartGameTab::on_buttonImportFiles_clicked()
- {
- const auto & importFunctor = [this]
- {
- #ifndef VCMI_MOBILE
- QString filter =
- tr("All supported files") + " (*.h3m *.vmap *.h3c *.vcmp *.zip *.json *.exe);;" +
- tr("Maps") + " (*.h3m *.vmap);;" +
- tr("Campaigns") + " (*.h3c *.vcmp);;" +
- tr("Configs") + " (*.json);;" +
- tr("Mods") + " (*.zip);;" +
- tr("Gog files") + " (*.exe)";
- #else
- //Workaround for sometimes incorrect mime for some extensions (e.g. for exe)
- QString filter = tr("All files (*.*)");
- #endif
- QStringList files = QFileDialog::getOpenFileNames(this, tr("Select files (configs, mods, maps, campaigns, gog files) to install..."), QDir::homePath(), filter);
- for(const auto & file : files)
- getMainWindow()->manualInstallFile(file);
- };
- // iOS can't display modal dialogs when called directly on button press
- // https://bugreports.qt.io/browse/QTBUG-98651
- QTimer::singleShot(0, this, importFunctor);
- }
|