Update: app/zonefileviewer.cpp

This commit is contained in:
RedLine AI Agent 2025-09-05 20:54:46 +00:00
parent 00a3dfb958
commit 15bbbec1db

View File

@ -1,158 +1,156 @@
#include "zonefileviewer.h" #include "zonefileviewer.h"
#include "ui_zonefileviewer.h" #include "ui_zonefileviewer.h"
#include "statusbarmanager.h" #include "statusbarmanager.h"
ZoneFileViewer::ZoneFileViewer(QWidget *parent) ZoneFileViewer::ZoneFileViewer(QWidget *parent)
: QWidget(parent) : QWidget(parent)
, ui(new Ui::ZoneFileViewer) { , ui(new Ui::ZoneFileViewer) {
ui->setupUi(this); ui->setupUi(this);
mZoneFile = nullptr; mZoneFile = nullptr;
ui->tableWidget_RecordCounts->setColumnCount(3); ui->tableWidget_RecordCounts->setColumnCount(3);
ui->tableWidget_RecordCounts->setHorizontalHeaderLabels({ "Identifier", "Asset", "Count" }); ui->tableWidget_RecordCounts->setHorizontalHeaderLabels({ "Identifier", "Asset", "Count" });
ui->tableWidget_RecordCounts->horizontalHeader()->setStretchLastSection(true); ui->tableWidget_RecordCounts->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget_RecordOrder->setColumnCount(3); ui->tableWidget_RecordOrder->setColumnCount(3);
ui->tableWidget_RecordOrder->setHorizontalHeaderLabels({ "Identifier", "Asset", "Count" }); ui->tableWidget_RecordOrder->setHorizontalHeaderLabels({ "Identifier", "Asset", "Count" });
ui->tableWidget_RecordOrder->horizontalHeader()->setStretchLastSection(true); ui->tableWidget_RecordOrder->horizontalHeader()->setStretchLastSection(true);
connect(ui->lineEdit_TagSearch, &QLineEdit::textChanged, this, &ZoneFileViewer::SortTags); connect(ui->lineEdit_TagSearch, &QLineEdit::textChanged, this, &ZoneFileViewer::SortTags);
connect(ui->tableWidget_RecordCounts, &QTableWidget::itemSelectionChanged, this, &ZoneFileViewer::HighlightRecordInOrder); connect(ui->tableWidget_RecordCounts, &QTableWidget::itemSelectionChanged, this, &ZoneFileViewer::HighlightRecordInOrder);
connect(ui->listWidget_Tags, &QListWidget::currentTextChanged, this, [this](const QString &aCurrentText) { connect(ui->listWidget_Tags, &QListWidget::currentTextChanged, this, [this](const QString &aCurrentText) {
StatusBarManager::instance().updateStatus(QString("Selected tag '%1' with index %2").arg(aCurrentText).arg(mZoneFile->GetTags().indexOf(aCurrentText))); StatusBarManager::instance().updateStatus(QString("Selected tag '%1' with index %2").arg(aCurrentText).arg(mZoneFile->GetTags().indexOf(aCurrentText)));
}); });
} }
ZoneFileViewer::~ZoneFileViewer() { ZoneFileViewer::~ZoneFileViewer() {
delete ui; delete ui;
} }
void ZoneFileViewer::HighlightRecordInOrder() { void ZoneFileViewer::HighlightRecordInOrder() {
ui->tableWidget_RecordOrder->clearSelection(); ui->tableWidget_RecordOrder->clearSelection();
foreach (auto selectedItem, ui->tableWidget_RecordCounts->selectedItems()) { foreach (auto selectedItem, ui->tableWidget_RecordCounts->selectedItems()) {
int selectedRow = selectedItem->row(); int selectedRow = selectedItem->row();
const QString assetId = ui->tableWidget_RecordCounts->item(selectedRow, 0)->text(); const QString assetId = ui->tableWidget_RecordCounts->item(selectedRow, 0)->text();
for (int i = 0; i < ui->tableWidget_RecordOrder->rowCount(); i++) { for (int i = 0; i < ui->tableWidget_RecordOrder->rowCount(); i++) {
const QString testAssetId = ui->tableWidget_RecordOrder->item(i, 0)->text(); const QString testAssetId = ui->tableWidget_RecordOrder->item(i, 0)->text();
if (testAssetId != assetId) { continue; } if (testAssetId != assetId) { continue; }
ui->tableWidget_RecordOrder->selectRow(i); ui->tableWidget_RecordOrder->selectRow(i);
ui->tableWidget_RecordOrder->item(i, 0)->setSelected(true); ui->tableWidget_RecordOrder->item(i, 0)->setSelected(true);
ui->tableWidget_RecordOrder->item(i, 1)->setSelected(true); ui->tableWidget_RecordOrder->item(i, 1)->setSelected(true);
ui->tableWidget_RecordOrder->item(i, 2)->setSelected(true); ui->tableWidget_RecordOrder->item(i, 2)->setSelected(true);
ui->tableWidget_RecordOrder->item(i, 3)->setSelected(true); ui->tableWidget_RecordOrder->item(i, 3)->setSelected(true);
} }
} }
} }
void ZoneFileViewer::SortTags(const QString &aSearchText) { void ZoneFileViewer::SortTags(const QString &aSearchText) {
ui->listWidget_Tags->clear(); ui->listWidget_Tags->clear();
const QStringList tags = mZoneFile->GetTags(); const QStringList tags = mZoneFile->GetTags();
if (aSearchText.isEmpty()) { if (aSearchText.isEmpty()) {
ui->listWidget_Tags->addItems(tags); ui->listWidget_Tags->addItems(tags);
return; return;
} }
QStringList sortedTags; QStringList sortedTags;
foreach (const QString tag, tags) { foreach (const QString tag, tags) {
if (tag.contains(aSearchText)) { if (tag.contains(aSearchText)) {
sortedTags << tag; sortedTags << tag;
} }
} }
StatusBarManager::instance().updateStatus(QString("Found %1 tags.").arg(sortedTags.size())); StatusBarManager::instance().updateStatus(QString("Found %1 tags.").arg(sortedTags.size()));
ui->listWidget_Tags->addItems(sortedTags); ui->listWidget_Tags->addItems(sortedTags);
} }
void ZoneFileViewer::SetZoneFile(std::shared_ptr<ZoneFile> aZoneFile) { void ZoneFileViewer::SetZoneFile(const ZoneFile* aZoneFile) {
mZoneFile = aZoneFile; mZoneFile = aZoneFile;
ui->tableWidget_RecordCounts->clearContents(); ui->tableWidget_RecordCounts->clearContents();
ui->tableWidget_RecordOrder->clearContents(); ui->tableWidget_RecordOrder->clearContents();
ui->listWidget_Tags->clear(); ui->listWidget_Tags->clear();
const QStringList tags = mZoneFile->GetTags(); const QStringList tags = mZoneFile->GetTags();
ui->listWidget_Tags->addItems(tags); ui->listWidget_Tags->addItems(tags);
ui->label_Title->setText(mZoneFile->GetBaseStem() + ".zone"); ui->label_Title->setText(mZoneFile->GetBaseStem() + ".zone");
ui->groupBox_Tags->setTitle(QString("Tags (%1)").arg(tags.size())); ui->groupBox_Tags->setTitle(QString("Tags (%1)").arg(tags.size()));
if (tags.isEmpty()) { if (tags.isEmpty()) {
ui->groupBox_Tags->hide(); ui->groupBox_Tags->hide();
} else { } else {
ui->groupBox_Tags->show(); ui->groupBox_Tags->show();
} }
QMap<QString, int> recordCounts = QMap<QString, int>(); QMap<XAssetType, int> recordCounts = QMap<XAssetType, int>();
QVector<QPair<QString, int>> assetOccurances = QVector<QPair<QString, int>>(); QVector<QPair<XAssetType, int>> assetOccurances = QVector<QPair<XAssetType, int>>();
for (const QString &record : mZoneFile->GetRecords()) { for (XAssetType type : mZoneFile->GetTypes()) {
if (!recordCounts.contains(record)) { if (!recordCounts.contains(type)) {
recordCounts[record] = 0; recordCounts[type] = 0;
} }
recordCounts[record]++; recordCounts[type]++;
if (!assetOccurances.isEmpty() && assetOccurances.last().first == record) { if (!assetOccurances.isEmpty() && assetOccurances.last().first == type) {
assetOccurances.last().second++; assetOccurances.last().second++;
continue; continue;
} }
QPair<QString, int> assetOccurance(record, 1); QPair<XAssetType, int> assetOccurance(type, 1);
assetOccurances << assetOccurance; assetOccurances << assetOccurance;
} }
ui->tableWidget_RecordOrder->setRowCount(assetOccurances.size()); ui->tableWidget_RecordOrder->setRowCount(assetOccurances.size());
int assetIndex = 0; int assetIndex = 0;
foreach (auto assetOccurance, assetOccurances) { foreach (auto assetOccurance, assetOccurances) {
const QString record = assetOccurance.first; XAssetType assetType = assetOccurance.first;
Utils::AssetType assetType = mZoneFile->AssetStrToEnum(record); int assetCount = assetOccurance.second;
int assetCount = assetOccurance.second;
QIcon assetIcon = Utils::CreateAssetIcon(assetType);
QIcon assetIcon = Utils::CreateAssetIcon(assetType); if (assetIcon.isNull()) {
if (assetIcon.isNull()) { qDebug() << "Icon is null for record: " << assetType;
qDebug() << "Icon is null for record: " << record; }
}
QTableWidgetItem *recordItem = new QTableWidgetItem(QString::number(assetType, 16));
QTableWidgetItem *recordItem = new QTableWidgetItem(record.toUpper()); QTableWidgetItem *recordStrItem = new QTableWidgetItem(XAsset::XAssetTypeToString(assetType));
QTableWidgetItem *recordStrItem = new QTableWidgetItem(Utils::AssetTypeToStr(assetType)); QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(assetCount));
QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(assetCount)); recordItem->setIcon(assetIcon);
recordItem->setIcon(assetIcon);
ui->tableWidget_RecordOrder->setItem(assetIndex, 0, recordItem);
ui->tableWidget_RecordOrder->setItem(assetIndex, 0, recordItem); ui->tableWidget_RecordOrder->setItem(assetIndex, 1, recordStrItem);
ui->tableWidget_RecordOrder->setItem(assetIndex, 1, recordStrItem); ui->tableWidget_RecordOrder->setItem(assetIndex, 2, recordCountItem);
ui->tableWidget_RecordOrder->setItem(assetIndex, 2, recordCountItem);
assetIndex++;
assetIndex++; }
}
int recordIndex = 0;
int recordIndex = 0; for (XAssetType assetType : recordCounts.keys()) {
for (const QString &record : recordCounts.keys()) { int recordCount = recordCounts[assetType];
int recordCount = recordCounts[record];
QIcon assetIcon = Utils::CreateAssetIcon(assetType);
Utils::AssetType assetType = mZoneFile->AssetStrToEnum(record); if (assetIcon.isNull()) {
QIcon assetIcon = Utils::CreateAssetIcon(assetType); qDebug() << "Icon is null for record: " << assetType;
if (assetIcon.isNull()) { }
qDebug() << "Icon is null for record: " << record;
} ui->tableWidget_RecordCounts->setRowCount(recordIndex + 1);
ui->tableWidget_RecordCounts->setRowCount(recordIndex + 1); QTableWidgetItem *recordItem = new QTableWidgetItem(QString::number(assetType, 16));
QTableWidgetItem *recordCountStrItem = new QTableWidgetItem(XAsset::XAssetTypeToString(assetType));
QTableWidgetItem *recordItem = new QTableWidgetItem(record.toUpper()); QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(recordCount));
QTableWidgetItem *recordCountStrItem = new QTableWidgetItem(Utils::AssetTypeToStr(assetType)); recordItem->setIcon(assetIcon);
QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(recordCount));
recordItem->setIcon(assetIcon); ui->tableWidget_RecordCounts->setItem(recordIndex, 0, recordItem);
ui->tableWidget_RecordCounts->setItem(recordIndex, 1, recordCountStrItem);
ui->tableWidget_RecordCounts->setItem(recordIndex, 0, recordItem); ui->tableWidget_RecordCounts->setItem(recordIndex, 2, recordCountItem);
ui->tableWidget_RecordCounts->setItem(recordIndex, 1, recordCountStrItem);
ui->tableWidget_RecordCounts->setItem(recordIndex, 2, recordCountItem); recordIndex++;
}
recordIndex++;
} ui->tableWidget_RecordOrder->resizeColumnsToContents();
ui->tableWidget_RecordCounts->resizeColumnsToContents();
ui->tableWidget_RecordOrder->resizeColumnsToContents(); }
ui->tableWidget_RecordCounts->resizeColumnsToContents();
}