Removed unused asset functions, refactored.

This commit is contained in:
= 2025-01-10 04:36:12 -05:00
parent 14f6a481f5
commit 67f3e21779
2 changed files with 159 additions and 230 deletions

View File

@ -278,12 +278,12 @@ QByteArray MainWindow::DecompressZLIB(QByteArray compressedData) {
} }
/* /*
OpenFastFile() GetFastFilePath()
Opens a file dialog in the steam folder, Opens a file dialog in the steam folder,
and opens the selected file. and opens the selected file.
*/ */
QFile* MainWindow::OpenFastFile() { QString MainWindow::GetFastFilePath() {
// Reset dialog before opening new file // Reset dialog before opening new file
Reset(); Reset();
@ -299,22 +299,16 @@ QFile* MainWindow::OpenFastFile() {
const QString fastFileStem = fastFilePath.split('/').last(); const QString fastFileStem = fastFilePath.split('/').last();
setWindowTitle(QString("FastFile Wizard - %1").arg(fastFileStem)); setWindowTitle(QString("FastFile Wizard - %1").arg(fastFileStem));
// Check fastfile can be read return fastFilePath;
QFile *fastFile = new QFile(fastFilePath);
if (!fastFile->open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, "Warning!", QString("%1 could not be read!.").arg(fastFilePath));
return nullptr;
}
return fastFile;
} }
/* /*
OpenZoneFile() GetZoneFilePath()
Opens a file dialog in the steam folder, Opens a file dialog in the steam folder,
and opens the selected file. and opens the selected file.
*/ */
QFile* MainWindow::OpenZoneFile() { QString MainWindow::GetZoneFilePath() {
// Reset dialog before opening new file // Reset dialog before opening new file
Reset(); Reset();
@ -330,13 +324,74 @@ QFile* MainWindow::OpenZoneFile() {
const QString zoneFileStem = zoneFilePath.split('/').last(); const QString zoneFileStem = zoneFilePath.split('/').last();
setWindowTitle(QString("FastFile Wizard - %1").arg(zoneFileStem)); setWindowTitle(QString("FastFile Wizard - %1").arg(zoneFileStem));
return zoneFilePath;
}
QByteArray MainWindow::OpenFastFile(QString aFastFilePath)
{
Reset();
// Check fastfile can be read // Check fastfile can be read
QFile *zoneFile = new QFile(zoneFilePath); QFile *fastFile = new QFile(aFastFilePath);
if (!zoneFile->open(QIODevice::ReadOnly)) { qDebug() << aFastFilePath;
QMessageBox::warning(this, "Warning!", QString("%1 could not be read!.").arg(zoneFilePath)); if (!fastFile->open(QIODevice::ReadOnly)) {
return nullptr; QMessageBox::warning(this, "Warning!", QString("FastFile '%1' could not be read!.").arg(fastFile->fileName()));
return QByteArray();
} }
return zoneFile; LogOpenedFile(fastFile->fileName());
ui->lineEdit_FastFile->setText(fastFile->fileName());
// Decompress fastfile and close
const QByteArray fastFileData = fastFile->readAll();
// Parse data from fast file header
ParseFFHeader(fastFileData.mid(0, 12));
fastFile->close();
// Decompress fastfile and close
const QByteArray decompressedData = DecompressZLIB(fastFileData.mid(12));
// ui->plainTextEdit_ZoneDump->setPlainText(decompressedData.toHex());
const QString zoneFilePath = aFastFilePath.replace(".ff", ".zone");
ui->lineEdit_ZoneFile->setText(zoneFilePath);
// Open zone file
OpenZoneFile(zoneFilePath);
// Clean up & return
delete fastFile;
return fastFileData;
}
QByteArray MainWindow::OpenZoneFile(QString aZoneFilePath)
{
Reset();
// Check zone file is writeable
QFile *zoneFile = new QFile(aZoneFilePath);
if (!zoneFile->open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, "Warning!", QString("ZoneFile '%1' could not be read!.").arg(zoneFile->fileName()));
return QByteArray();
}
LogOpenedFile(zoneFile->fileName());
ui->lineEdit_ZoneFile->setText(zoneFile->fileName());
// Parse & close zone file
QByteArray zoneFileData = zoneFile->readAll();
ParseZoneFile(zoneFileData);
zoneFile->close();
// Check if corresponding zone file exists
const QString fastFilePath = zoneFile->fileName().replace(".zone", ".ff");
if (QFile::exists(fastFilePath)) {
ui->lineEdit_FastFile->setText(fastFilePath);
LogOpenedFile(fastFilePath);
}
// Clean up & return
delete zoneFile;
return zoneFileData;
} }
void MainWindow::ParseFFCompany(QDataStream *afastFileStream) { void MainWindow::ParseFFCompany(QDataStream *afastFileStream) {
@ -420,9 +475,9 @@ void MainWindow::ParseFFVersion(QDataStream *afastFileStream) {
} }
} }
void MainWindow::ParseFFHeader(QFile *aFastFilePtr) { void MainWindow::ParseFFHeader(QByteArray aFastFileData) {
// Open stream to fastfile // Open stream to fastfile
QDataStream afastFileStream(aFastFilePtr); QDataStream afastFileStream(aFastFileData);
afastFileStream.setByteOrder(QDataStream::LittleEndian); afastFileStream.setByteOrder(QDataStream::LittleEndian);
ParseFFCompany(&afastFileStream); ParseFFCompany(&afastFileStream);
@ -759,10 +814,6 @@ void MainWindow::ParseAsset_RawFile(QDataStream *aZoneFileStream) {
// qDebug() << QString("%1: %2").arg(rawFilePath).arg(rawFileContents); // qDebug() << QString("%1: %2").arg(rawFilePath).arg(rawFileContents);
} }
void MainWindow::ParseAsset_PhysPreset(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_XModel(QDataStream *aZoneFileStream) { void MainWindow::ParseAsset_XModel(QDataStream *aZoneFileStream) {
} }
@ -793,10 +844,6 @@ void MainWindow::ParseAsset_TechSet(QDataStream *aZoneFileStream) {
//qDebug() << "Tech Set: " << techSetName; //qDebug() << "Tech Set: " << techSetName;
} }
void MainWindow::ParseAsset_Image(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_LoadedSound(QDataStream *aZoneFileStream) { void MainWindow::ParseAsset_LoadedSound(QDataStream *aZoneFileStream) {
} }
@ -805,34 +852,14 @@ void MainWindow::ParseAsset_ColMapMP(QDataStream *aZoneFileStream) {
} }
void MainWindow::ParseAsset_GameMapSP(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_GameMapMP(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_LightDef(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_UIMap(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_SNDDriverGlobals(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_AIType(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_FX(QDataStream *aZoneFileStream) { void MainWindow::ParseAsset_FX(QDataStream *aZoneFileStream) {
} }
void MainWindow::ParseAsset_Font(QDataStream *aZoneFileStream) {
}
void MainWindow::ParseAsset_XAnim(QDataStream *aZoneFileStream) { void MainWindow::ParseAsset_XAnim(QDataStream *aZoneFileStream) {
// Read in pointer to x_anim name // Read in pointer to x_anim name
QByteArray namePtr(4, Qt::Uninitialized); QByteArray namePtr(4, Qt::Uninitialized);
@ -1413,134 +1440,62 @@ void MainWindow::ParseAsset_StringTable(QDataStream *aZoneFileStream) {
} }
void MainWindow::on_pushButton_FastFile_clicked() { void MainWindow::on_pushButton_FastFile_clicked() {
// Try to prompt user to open fastfile // Open fast file
QFile *fastFile; QString fastFilePath = GetFastFilePath();
if (!(fastFile = OpenFastFile())) { OpenFastFile(fastFilePath);
QMessageBox::warning(this, "Warning!", QString("Failed to open FastFile!."));
return;
}
// Parse data from fast file header
ParseFFHeader(fastFile);
// Decompress fastfile and close
const QByteArray fastFileData = fastFile->readAll();
const QByteArray decompressedData = DecompressZLIB(fastFileData);
// ui->plainTextEdit_ZoneDump->setPlainText(decompressedData.toHex());
const QString zoneFilePath = fastFile->fileName().replace(".ff", ".zone");
fastFile->close();
// Check zone file is writeable
QFile *zoneFile = new QFile(zoneFilePath);
if (!zoneFile->open(QIODevice::ReadWrite)) {
qDebug() << QString("Zone file could not be written to: '%1'").arg(zoneFilePath);
return;
}
// Write zone data
zoneFile->write(decompressedData);
zoneFile->close();
// Open zone file as little endian stream
QDataStream zoneFileStream(decompressedData);
zoneFileStream.setByteOrder(QDataStream::LittleEndian);
// Parse data from zone file header
ParseZoneHeader(&zoneFileStream);
ParseZoneIndex(&zoneFileStream);
// Track current and consecutive assets
int assetIndex = 0;
// Iterate asset types found in index
for (auto [assetType, assetCount] : mTypeMap.asKeyValueRange()) {
// Get asset description from type
QString assetStr = Utils::AssetTypeToString(assetType);
// Insert row and populate
ui->tableWidget_Index->insertRow(assetIndex);
ui->tableWidget_Index->setItem(assetIndex, 0, new QTableWidgetItem(assetType));
ui->tableWidget_Index->setItem(assetIndex, 1, new QTableWidgetItem(assetStr));
ui->tableWidget_Index->setItem(assetIndex, 2, new QTableWidgetItem(QString::number(assetCount)));
// Update count
assetIndex++;
}
for (int i = 0; i < mTypeOrder.size(); i++) {
const QString typeHex = mTypeOrder[i];
const QString typeStr = Utils::AssetTypeToString(typeHex);
// qDebug() << "Parsing Asset of Type: " << typeHex;
if (typeStr == "LOCAL STRING") { // localized string asset
ParseAsset_LocalString(&zoneFileStream);
} else if (typeStr == "RAW FILE") { // gsc
ParseAsset_RawFile(&zoneFileStream);
} else if (typeStr == "PHYS PRESET") { // physpreset
ParseAsset_PhysPreset(&zoneFileStream);
} else if (typeStr == "MODEL") { // xmodel
ParseAsset_XModel(&zoneFileStream);
} else if (typeStr == "MATERIAL") { // material
ParseAsset_Material(&zoneFileStream);
} else if (typeStr == "SHADER") { // pixelshader
ParseAsset_PixelShader(&zoneFileStream);
} else if (typeStr == "TECH SET") { // techset include
ParseAsset_TechSet(&zoneFileStream);
} else if (typeStr == "IMAGE") { // image
ParseAsset_Image(&zoneFileStream);
} else if (typeStr == "SOUND") { // loaded_sound
ParseAsset_LoadedSound(&zoneFileStream);
} else if (typeStr == "COLLISION MAP") { // col_map_mp
ParseAsset_ColMapMP(&zoneFileStream);
} else if (typeStr == "MP MAP") { // game_map_sp
ParseAsset_GameMapSP(&zoneFileStream);
} else if (typeStr == "SP MAP") { // game_map_mp
ParseAsset_GameMapMP(&zoneFileStream);
} else if (typeStr == "LIGHT DEF") { // lightdef
ParseAsset_LightDef(&zoneFileStream);
} else if (typeStr == "UI MAP") { // ui_map
ParseAsset_UIMap(&zoneFileStream);
} else if (typeStr == "SND DRIVER GLOBALS") { // snddriverglobals
ParseAsset_SNDDriverGlobals(&zoneFileStream);
} else if (typeStr == "AI TYPE") { // aitype
ParseAsset_AIType(&zoneFileStream);
} else if (typeStr == "EFFECT") { // aitype
ParseAsset_FX(&zoneFileStream);
} else if (typeStr == "ANIMATION") { // aitype
ParseAsset_XAnim(&zoneFileStream);
} else if (typeStr == "STRING TABLE") { // string_table
ParseAsset_StringTable(&zoneFileStream);
} else if (typeStr == "MENU") { // string_table
ParseAsset_MenuFile(&zoneFileStream);
} else if (typeStr == "WEAPON") { // string_table
ParseAsset_Weapon(&zoneFileStream);
} else if (typeStr == "D3DBSP DUMP") { // string_table
ParseAsset_D3DBSP(&zoneFileStream);
} else if (typeStr != "UNKNOWN") {
qDebug() << "Found bad asset type!" << typeStr;
}
}
// Close zone file
zoneFile->close();
// Clean up
delete zoneFile;
delete fastFile;
} }
void MainWindow::on_pushButton_FastFile_2_clicked() { void MainWindow::on_pushButton_ZoneFile_clicked() {
// Check zone file is writeable const QString zoneFilePath = GetZoneFilePath();
QFile *zoneFile; OpenZoneFile(zoneFilePath);
if (!(zoneFile = OpenZoneFile())) { }
QMessageBox::warning(this, "Warning!", QString("Failed to open FastFile!."));
return;
}
const QByteArray decompressedData = zoneFile->readAll();
void MainWindow::LogOpenedFile(QString aFileName)
{
mRecentFiles.enqueue(aFileName);
mRecentFiles.removeDuplicates();
RefreshRecentFileMenu();
}
void MainWindow::RefreshRecentFileMenu()
{
foreach (QAction* action, mRecentFileActions) {
ui->menuRecent_Fast_Files->removeAction(action);
ui->menuRecent_Zone_Files->removeAction(action);
action->deleteLater();
}
mRecentFileActions.clear();
foreach (QString recentFileText, mRecentFiles) {
if (recentFileText.contains(".ff")) {
QAction *recentFastFileAction = new QAction(ui->menuRecent_Fast_Files);
recentFastFileAction->setText(recentFileText);
mRecentFileActions << recentFastFileAction;
ui->menuRecent_Fast_Files->addAction(recentFastFileAction);
connect(recentFastFileAction, &QAction::triggered, this, [&, this, recentFileText](bool checked = false) {
OpenFastFile(recentFileText);
});
} else if (recentFileText.contains(".zone")) {
QAction *recentZoneFileAction = new QAction(ui->menuRecent_Zone_Files);
recentZoneFileAction->setText(recentFileText);
mRecentFileActions << recentZoneFileAction;
ui->menuRecent_Zone_Files->addAction(recentZoneFileAction);
connect(recentZoneFileAction, &QAction::triggered, this, [&, this, recentFileText](bool checked = false) {
OpenZoneFile(recentFileText);
});
}
}
}
void MainWindow::ParseZoneFile(QByteArray aDecompressedData) {
// Open zone file as little endian stream // Open zone file as little endian stream
QDataStream zoneFileStream(decompressedData); QDataStream zoneFileStream(aDecompressedData);
zoneFileStream.setByteOrder(QDataStream::LittleEndian); zoneFileStream.setByteOrder(QDataStream::LittleEndian);
zoneFileStream.setFloatingPointPrecision(QDataStream::SinglePrecision);
// Parse data from zone file header // Parse data from zone file header
ParseZoneHeader(&zoneFileStream); ParseZoneHeader(&zoneFileStream);
@ -1569,60 +1524,40 @@ void MainWindow::on_pushButton_FastFile_2_clicked() {
const QString typeStr = Utils::AssetTypeToString(typeHex); const QString typeStr = Utils::AssetTypeToString(typeHex);
// qDebug() << "Parsing Asset of Type: " << typeHex; // qDebug() << "Parsing Asset of Type: " << typeHex;
if (typeStr == "LOCAL STRING") { // localized string asset if (typeStr == "ANIMATION") { // aitype
ParseAsset_LocalString(&zoneFileStream); ParseAsset_XAnim(&zoneFileStream);
} else if (typeStr == "RAW FILE") { // gsc
ParseAsset_RawFile(&zoneFileStream);
} else if (typeStr == "PHYS PRESET") { // physpreset
ParseAsset_PhysPreset(&zoneFileStream);
} else if (typeStr == "MODEL") { // xmodel } else if (typeStr == "MODEL") { // xmodel
ParseAsset_XModel(&zoneFileStream); ParseAsset_XModel(&zoneFileStream);
} else if (typeStr == "MATERIAL") { // material } else if (typeStr == "MATERIAL") { // material
ParseAsset_Material(&zoneFileStream); ParseAsset_Material(&zoneFileStream);
} else if (typeStr == "SHADER") { // pixelshader
ParseAsset_PixelShader(&zoneFileStream);
} else if (typeStr == "TECH SET") { // techset include } else if (typeStr == "TECH SET") { // techset include
ParseAsset_TechSet(&zoneFileStream); ParseAsset_TechSet(&zoneFileStream);
} else if (typeStr == "IMAGE") { // image
ParseAsset_Image(&zoneFileStream);
} else if (typeStr == "SOUND") { // loaded_sound } else if (typeStr == "SOUND") { // loaded_sound
ParseAsset_LoadedSound(&zoneFileStream); ParseAsset_LoadedSound(&zoneFileStream);
} else if (typeStr == "COLLISION MAP") { // col_map_mp } else if (typeStr == "COLLISION MAP") { // col_map_mp
ParseAsset_ColMapMP(&zoneFileStream); ParseAsset_ColMapMP(&zoneFileStream);
} else if (typeStr == "MP MAP") { // game_map_sp } else if (typeStr == "SHADER") { // pixelshader
ParseAsset_GameMapSP(&zoneFileStream); ParseAsset_PixelShader(&zoneFileStream);
} else if (typeStr == "SP MAP") { // game_map_mp
ParseAsset_GameMapMP(&zoneFileStream);
} else if (typeStr == "LIGHT DEF") { // lightdef
ParseAsset_LightDef(&zoneFileStream);
} else if (typeStr == "UI MAP") { // ui_map
ParseAsset_UIMap(&zoneFileStream);
} else if (typeStr == "SND DRIVER GLOBALS") { // snddriverglobals
ParseAsset_SNDDriverGlobals(&zoneFileStream);
} else if (typeStr == "AI TYPE") { // aitype
ParseAsset_AIType(&zoneFileStream);
} else if (typeStr == "EFFECT") { // aitype
ParseAsset_FX(&zoneFileStream);
} else if (typeStr == "ANIMATION") { // aitype
ParseAsset_XAnim(&zoneFileStream);
} else if (typeStr == "STRING TABLE") { // string_table
ParseAsset_StringTable(&zoneFileStream);
} else if (typeStr == "MENU") { // string_table
ParseAsset_MenuFile(&zoneFileStream);
} else if (typeStr == "WEAPON") { // string_table
ParseAsset_Weapon(&zoneFileStream);
} else if (typeStr == "D3DBSP DUMP") { // string_table } else if (typeStr == "D3DBSP DUMP") { // string_table
ParseAsset_D3DBSP(&zoneFileStream); ParseAsset_D3DBSP(&zoneFileStream);
} else if (typeStr != "UNKNOWN") { } else if (typeStr == "FONT") { // font
ParseAsset_Font(&zoneFileStream);
} else if (typeStr == "MENU") { // string_table
ParseAsset_MenuFile(&zoneFileStream);
} else if (typeStr == "LOCAL STRING") { // localized string asset
ParseAsset_LocalString(&zoneFileStream);
} else if (typeStr == "WEAPON") { // string_table
ParseAsset_Weapon(&zoneFileStream);
} else if (typeStr == "EFFECT") { // aitype
ParseAsset_FX(&zoneFileStream);
} else if (typeStr == "RAW FILE") { // gsc
ParseAsset_RawFile(&zoneFileStream);
} else if (typeStr == "STRING TABLE") { // string_table
ParseAsset_StringTable(&zoneFileStream);
} else {
qDebug() << "Found bad asset type!" << typeStr; qDebug() << "Found bad asset type!" << typeStr;
} }
} }
// Close zone file
zoneFile->close();
// Clean up
delete zoneFile;
} }
int MainWindow::LoadFile_D3DBSP(const QString aFilePath) { int MainWindow::LoadFile_D3DBSP(const QString aFilePath) {

View File

@ -19,7 +19,7 @@
#include <Qt3DRender/QCamera> #include <Qt3DRender/QCamera>
#include <Qt3DRender/QCameraLens> #include <Qt3DRender/QCameraLens>
#include <Qt3DCore/QTransform> #include <Qt3DCore/QTransform>
#include <Qt3DCore/QAspectEngine> #include <Qt3DCore/QAspectEngine>>
#include <Qt3DInput/QInputAspect> #include <Qt3DInput/QInputAspect>
@ -84,7 +84,7 @@ public:
private slots: private slots:
void on_pushButton_FastFile_clicked(); void on_pushButton_FastFile_clicked();
void on_pushButton_FastFile_2_clicked(); void on_pushButton_ZoneFile_clicked();
void LogOpenedFile(QString aFileName); void LogOpenedFile(QString aFileName);
void RefreshRecentFileMenu(); void RefreshRecentFileMenu();
@ -102,6 +102,7 @@ private slots:
void ParseFFMagic(QDataStream *afastFileStream); void ParseFFMagic(QDataStream *afastFileStream);
void ParseFFVersion(QDataStream *afastFileStream); void ParseFFVersion(QDataStream *afastFileStream);
void ParseZoneFile(QByteArray aDecompressedData);
void ParseZoneHeader(QDataStream *aZoneFileStream); void ParseZoneHeader(QDataStream *aZoneFileStream);
void ParseZoneSize(QDataStream *aZoneFileStream); void ParseZoneSize(QDataStream *aZoneFileStream);
@ -113,28 +114,21 @@ private slots:
void ParseZoneTags(QDataStream *aZoneFileStream); void ParseZoneTags(QDataStream *aZoneFileStream);
void ParseZoneIndex(QDataStream *aZoneFileStream); void ParseZoneIndex(QDataStream *aZoneFileStream);
void ParseAsset_LocalString(QDataStream *aZoneFileStream); void ParseAsset_XAnim(QDataStream *aZoneFileStream);
void ParseAsset_RawFile(QDataStream *aZoneFileStream);
void ParseAsset_PhysPreset(QDataStream *aZoneFileStream);
void ParseAsset_XModel(QDataStream *aZoneFileStream); void ParseAsset_XModel(QDataStream *aZoneFileStream);
void ParseAsset_Material(QDataStream *aZoneFileStream); void ParseAsset_Material(QDataStream *aZoneFileStream);
void ParseAsset_PixelShader(QDataStream *aZoneFileStream);
void ParseAsset_TechSet(QDataStream *aZoneFileStream); void ParseAsset_TechSet(QDataStream *aZoneFileStream);
void ParseAsset_Image(QDataStream *aZoneFileStream);
void ParseAsset_LoadedSound(QDataStream *aZoneFileStream); void ParseAsset_LoadedSound(QDataStream *aZoneFileStream);
void ParseAsset_ColMapMP(QDataStream *aZoneFileStream); void ParseAsset_ColMapMP(QDataStream *aZoneFileStream);
void ParseAsset_GameMapSP(QDataStream *aZoneFileStream); void ParseAsset_PixelShader(QDataStream *aZoneFileStream);
void ParseAsset_GameMapMP(QDataStream *aZoneFileStream);
void ParseAsset_LightDef(QDataStream *aZoneFileStream);
void ParseAsset_UIMap(QDataStream *aZoneFileStream);
void ParseAsset_SNDDriverGlobals(QDataStream *aZoneFileStream);
void ParseAsset_AIType(QDataStream *aZoneFileStream);
void ParseAsset_FX(QDataStream *aZoneFileStream);
void ParseAsset_XAnim(QDataStream *aZoneFileStream);
void ParseAsset_StringTable(QDataStream *aZoneFileStream);
void ParseAsset_MenuFile(QDataStream *aZoneFileStream);
void ParseAsset_Weapon(QDataStream *aZoneFileStream);
void ParseAsset_D3DBSP(QDataStream *aZoneFileStream); void ParseAsset_D3DBSP(QDataStream *aZoneFileStream);
void ParseAsset_Font(QDataStream *aZoneFileStream);
void ParseAsset_MenuFile(QDataStream *aZoneFileStream);
void ParseAsset_LocalString(QDataStream *aZoneFileStream);
void ParseAsset_Weapon(QDataStream *aZoneFileStream);
void ParseAsset_FX(QDataStream *aZoneFileStream);
void ParseAsset_RawFile(QDataStream *aZoneFileStream);
void ParseAsset_StringTable(QDataStream *aZoneFileStream);
int LoadFile_D3DBSP(const QString aFilePath); int LoadFile_D3DBSP(const QString aFilePath);