MaterialDataFiles_t SetMaterialFiles() { MaterialDataFiles_t material_files; std::string elementDir("../../Data/MaterialData/PhotonCrossSection"); std::string coh("../../Data/MaterialData/XrayFormFactor/pgs5form_X100_Z100.dat"); std::string incoh("../../Data/MaterialData/XrayFormFactor/incoh_X45_Z100.dat"); std::string k_alpha("../../Data/MaterialData/CharacteristicXray/CharacteristicXrayK_alpha_Z100.dat"); material_files.PhotonCrossSectionDir = elementDir; material_files.CoherentFilepath = coh; material_files.IncoherentFilepath = incoh; material_files.K_alphaFilepath = k_alpha; return material_files; }
void MainWindow::applyPatch(const QString &fileName) { ui->btnPatch->setEnabled(false); ui->btnStart->setEnabled(false); ui->animation->start(); QFutureWatcher<void> *future = new QFutureWatcher<void>(); connect(future, &QFutureWatcher<void>::finished, [this,future]() { ui->animation->stop(); ui->btnStart->setEnabled(true); ui->btnPatch->setEnabled(true); refTask = NULL; future->deleteLater(); }); future->setFuture(QtConcurrent::run([=](const QString &fileName) { QStringList args; QProcess task; refTask = &task; args << "x" << fileName << "-y" << "-o..\\"; task.start("bin\\7za.exe", args); task.waitForFinished(-1); args.clear(); args << "*.pck.b64.files"; QDir elementDir("..\\element"); QStringList packs = elementDir.entryList(args, QDir::Dirs); for (int i = 0; i < packs.size(); i++) { QString source = packs.at(i).toLocal8Bit().constData(); QString dest = source.left(source.indexOf('.')); QString pck = dest + ".pck"; QString pkx = dest + ".pkx"; QString originalWorkingDir = QDir::current().dirName(); QDir::setCurrent("..\\element"); if (QFile::exists(pkx)) { // TODO: merge *.pck and *.pkx args.clear(); args << "/c" << "copy" << "/b" << pck+"+"+pkx << pck; task.start("cmd.exe", args); task.waitForFinished(-1); QFile::remove(pkx); } // TODO: merge source folder into *.pck args.clear(); args << "-pw" << "-ap" << source; task.start("bin\\sPCK.exe", args); task.waitForFinished(-1); // TODO: split *.pck into *.pkx if (QFile(pck).size() > 2147483392) { args.clear(); args << pck << "2147483392"; task.start("bin\\split.exe", args); task.waitForFinished(-1); QFile::remove(pck); QFile::rename(pck + ".1", pck); QFile::rename(pck + ".2", pkx); } // TODO: delete source folder recursive QDir(source).removeRecursively(); QDir::setCurrent(originalWorkingDir); } }, fileName)); }