1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include "threaddetails.h"
#include "ui_threaddetails.h"
#include <QMutexLocker>
ThreadDetails* ThreadDetails::mInstance;
ThreadDetails::ThreadDetails(QWidget *parent)
: QWidget(parent)
, mUi(new Ui::ThreadDetails)
{
mInstance = this;
setWindowFlags(Qt::Window);
mUi->setupUi(this);
connect(&mTimer, &QTimer::timeout, this, &ThreadDetails::updateUI);
mTimer.start(1000);
}
ThreadDetails::~ThreadDetails()
{
mInstance = nullptr;
delete mUi;
}
// NOLINTNEXTLINE(performance-unnecessary-value-param) - false positive
void ThreadDetails::threadDetailsUpdated(QMap<int, CheckThread::Details> threadDetails)
{
QMutexLocker locker(&mMutex);
mThreadDetails = threadDetails;
if (threadDetails.empty()) {
mProgress.clear();
}
}
// cppcheck-suppress passedByValue
// NOLINTNEXTLINE(performance-unnecessary-value-param) - false positive
void ThreadDetails::progress(QString filename, QString stage, std::size_t value) {
QMutexLocker locker(&mMutex);
mProgress[filename] = {QString(), stage + QString(value > 0 ? ": %1%" : "").arg(value)};
}
void ThreadDetails::updateUI() {
QString text("Thread\tStart time\tFile/Progress\n");
{
QMutexLocker locker(&mMutex);
for (const auto& td: mThreadDetails) {
auto& timeProgress = mProgress[td.file];
if (timeProgress.first.isEmpty() && !timeProgress.second.isEmpty())
timeProgress.first = QTime::currentTime().toString(Qt::TextDate);
text += QString("%1\t%2\t%3\n\t%4\t%5\n").arg(td.threadIndex).arg(td.startTime.toString(Qt::TextDate)).arg(td.file).arg(timeProgress.first).arg(timeProgress.second);
}
}
mUi->plainTextEdit->setPlainText(text);
}
|