SXXXXXXX_PyUCC/__UCC/Unified-Code-Counter-src/Unified-Code-Counter-master/gui/GTableDialog.cpp
2025-11-25 14:18:55 +01:00

139 lines
3.9 KiB
C++

//! GAsciiDialog class methods.
/*!
* \file GAsciiDialog.cpp
*
* This file contains the GAsciiDialog class methods.
*/
#include <QDir>
#include <QTextStream>
#include "GTableDialog.h"
/*!
* Constructs a GTableDialog object.
*
* \param filePath results file or directory
* \param parent parent widget
* \param f window flags
*/
GTableDialog::GTableDialog(const QString &filePath, QWidget *parent, Qt::WindowFlags f)
: QDialog(parent, f)
{
ui.setupUi(this);
outputDir = "";
ui.cboResultsSelect->clear();
ui.tblResults->clear();
if (!filePath.isEmpty())
{
QFileInfo fi(filePath);
if (fi.isDir())
{
outputDir = filePath;
QDir dir(filePath);
dir.setNameFilters(QStringList() << tr("*outfile*.csv") << tr("MatchedPairs.csv") << tr("*DuplicatePairs.csv"));
QStringList fileList = dir.entryList();
for (int i = 0; i < fileList.count(); i++)
ui.cboResultsSelect->addItem(fileList.at(i));
}
else if (fi.isFile())
{
outputDir = fi.absolutePath();
ui.cboResultsSelect->addItem(fi.fileName());
}
}
}
/*!
* Selects a file to display.
*
* \param fileName file name
*/
void GTableDialog::on_cboResultsSelect_currentIndexChanged(const QString &fileName)
{
ui.tblResults->clear();
ui.tblResults->setColumnCount(0);
ui.tblResults->setRowCount(0);
QFile file(outputDir + "/" + fileName);
if (file.open(QIODevice::ReadOnly))
{
QTextStream ts(&file);
QTableWidgetItem *twItem;
QString line;
int i = -1, j, k, n;
while (ts.status() == QTextStream::Ok && !ts.atEnd())
{
line = ts.readLine();
if (!line.isEmpty())
{
i++;
ui.tblResults->insertRow(i);
QStringList s;
/*
* In some cases, we want to display quotes or commas in CSV file.
* To do that, we need to quote the whole line.
* In this if condition, we parse this kind of text and display it in one column
*/
if (line.at(0) == QChar('"') && line.endsWith(QChar('"')))
{
line = line.mid(1, line.size() - 2);
QString temp = "";
for (int it1 = 0; it1 < line.size(); it1++)
{
temp.append(line.at(it1));
/*
* The quote character we want to display in CSV has been replace with two quote characters ("")
* So here we need to skip one quote character
*/
if (line.at(it1) == QChar('"') && it1 + 1 < line.size() && line.at(it1 + 1) == QChar('"'))
it1++;
}
s.append(temp);
}
else s = line.split(',');
if (s.count() > ui.tblResults->columnCount())
ui.tblResults->setColumnCount(s.count());
for (j = 0; j < s.count(); j++)
{
twItem = new QTableWidgetItem(s.value(j));
ui.tblResults->setItem(i, j, twItem);
if (s.value(j).length() > 15 && j == s.count() - 1)
ui.tblResults->setSpan(i, j, 1, 2);
else if (j < s.count() - 1 && s.value(j + 1).isEmpty())
{
n = 2;
for (k = j + 1; k < s.count() - 1; k++)
{
if (!s.value(k + 1).isEmpty())
break;
n++;
}
ui.tblResults->setSpan(i, j, 1, n);
}
}
}
}
// update span for title rows
for (i = 0; i < ui.tblResults->rowCount() - 1; i++)
{
QString text = ui.tblResults->item(i, 0)->text();
if (ui.tblResults->item(i, 0)->text().startsWith(" "))
{
for (j = 0; j < ui.tblResults->columnCount(); j++)
{
if (!ui.tblResults->item(i + 1, j) || ui.tblResults->item(i + 1, j)->text().isEmpty())
break;
n = ui.tblResults->columnSpan(i + 1, j);
if (n > 1)
j += n - 1;
}
if (j < ui.tblResults->columnCount())
ui.tblResults->setSpan(i, 0, 1, j);
}
}
}
}