#include "definitionviewer.h" #include #include #include DefinitionViewer::DefinitionViewer(const QVector& results, QWidget *parent) : QDialog(parent) , mResults(results) { setWindowTitle("XPlor - Definition Viewer"); setMinimumSize(600, 400); resize(700, 500); auto* layout = new QVBoxLayout(this); mSummaryLabel = new QLabel(this); layout->addWidget(mSummaryLabel); mTreeWidget = new QTreeWidget(this); mTreeWidget->setHeaderLabels({"Definition", "Status", "Error"}); mTreeWidget->header()->setSectionResizeMode(0, QHeaderView::Stretch); mTreeWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); mTreeWidget->header()->setSectionResizeMode(2, QHeaderView::Stretch); mTreeWidget->setAlternatingRowColors(true); layout->addWidget(mTreeWidget); auto* closeButton = new QPushButton("Close", this); connect(closeButton, &QPushButton::clicked, this, &QDialog::accept); layout->addWidget(closeButton); populateTree(); } void DefinitionViewer::setResults(const QVector& results) { mResults = results; populateTree(); } void DefinitionViewer::populateTree() { mTreeWidget->clear(); // Group by subdirectory QMap> byFolder; QString basePath = QCoreApplication::applicationDirPath() + "/definitions/"; for (const auto& result : mResults) { QString relativePath = result.filePath; if (relativePath.startsWith(basePath)) { relativePath = relativePath.mid(basePath.length()); } QFileInfo fi(relativePath); QString folder = fi.path(); if (folder == ".") folder = "(root)"; byFolder[folder].append(&result); } int successCount = 0; int failCount = 0; for (auto it = byFolder.begin(); it != byFolder.end(); ++it) { const QString& folder = it.key(); const auto& items = it.value(); auto* folderItem = new QTreeWidgetItem(mTreeWidget); folderItem->setText(0, folder); folderItem->setExpanded(true); int folderSuccess = 0; int folderFail = 0; for (const auto* result : items) { auto* item = new QTreeWidgetItem(folderItem); item->setText(0, result->fileName); if (result->success) { item->setText(1, "OK"); item->setForeground(0, QColor(0, 128, 0)); item->setForeground(1, QColor(0, 128, 0)); folderSuccess++; successCount++; } else { item->setText(1, "FAILED"); item->setText(2, result->errorMessage); item->setForeground(0, QColor(192, 0, 0)); item->setForeground(1, QColor(192, 0, 0)); item->setForeground(2, QColor(128, 128, 128)); folderFail++; failCount++; } } // Set folder color based on contents if (folderFail == 0) { folderItem->setForeground(0, QColor(0, 128, 0)); } else if (folderSuccess == 0) { folderItem->setForeground(0, QColor(192, 0, 0)); } else { folderItem->setForeground(0, QColor(200, 140, 0)); } folderItem->setText(1, QString("%1/%2").arg(folderSuccess).arg(folderSuccess + folderFail)); } mSummaryLabel->setText(QString("Loaded: %1 successful, %2 failed (%3 total)") .arg(successCount) .arg(failCount) .arg(successCount + failCount)); if (failCount > 0) { mSummaryLabel->setStyleSheet("color: #c00000; font-weight: bold;"); } else { mSummaryLabel->setStyleSheet("color: #008000; font-weight: bold;"); } }