launcher: Add game size column

This commit is contained in:
nmzik
2026-09-12 17:28:00 +04:00
parent 069f928edc
commit d3d7bd33f8
3 changed files with 46 additions and 3 deletions
@@ -218,6 +218,11 @@
<string>Firmware Version</string>
</property>
</column>
<column>
<property name="text">
<string>Size</string>
</property>
</column>
<column>
<property name="text">
<string>Path</string>
+36
View File
@@ -5,12 +5,15 @@
#include <QApplication>
#include <QComboBox>
#include <QDir>
#include <QDirIterator>
#include <QFileInfo>
#include <QFont>
#include <QFutureWatcher>
#include <QHBoxLayout>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QLocale>
#include <QSize>
#include <QStringList>
#include <QStyle>
@@ -18,6 +21,7 @@
#include <QVersionNumber>
#include <QWheelEvent>
#include <QWidget>
#include <QtConcurrentRun>
namespace {
@@ -26,6 +30,7 @@ enum Column {
SerialColumn,
GameVersionColumn,
FirmwareVersionColumn,
SizeColumn,
PathColumn,
StatusColumn,
CommentsColumn,
@@ -155,6 +160,34 @@ ConfigurationItem::ConfigurationItem(std::unique_ptr<Configuration> info, QTreeW
Update();
SetRunning(false);
setData(SizeColumn, Qt::UserRole, qint64(-1));
setText(SizeColumn, QStringLiteral("\u2014"));
auto* watcher = new QFutureWatcher<qint64>(this);
connect(watcher, &QFutureWatcher<qint64>::finished, this, [this, watcher]() {
const auto bytes = watcher->result();
setData(SizeColumn, Qt::UserRole, bytes);
if (bytes >= 0) {
setText(SizeColumn,
QLocale().formattedDataSize(bytes, 2, QLocale::DataSizeTraditionalFormat));
}
watcher->deleteLater();
});
watcher->setFuture(QtConcurrent::run([path = m_info->basedir]() -> qint64 {
if (path.isEmpty() || !QDir(path).exists()) {
return -1;
}
qint64 bytes = 0;
QDirIterator files(path, QDir::Files | QDir::Hidden | QDir::System | QDir::NoSymLinks,
QDirIterator::Subdirectories);
while (files.hasNext()) {
files.next();
if (files.fileInfo().isFile()) {
bytes += files.fileInfo().size();
}
}
return bytes;
}));
}
ConfigurationItem::~ConfigurationItem() = default;
@@ -193,6 +226,9 @@ bool ConfigurationItem::operator<(const QTreeWidgetItem& other) const {
const int column = treeWidget() != nullptr ? treeWidget()->sortColumn() : NameColumn;
switch (column) {
case NameColumn: return GetSortText(*m_info) < GetSortText(*other_item->m_info);
case SizeColumn:
return data(SizeColumn, Qt::UserRole).toLongLong() <
other.data(SizeColumn, Qt::UserRole).toLongLong();
case StatusColumn:
return GetStatusText(m_info->game_status) <
GetStatusText(other_item->m_info->game_status);
+5 -3
View File
@@ -61,9 +61,10 @@ constexpr int GAME_NAME_COLUMN = 0;
constexpr int GAME_SERIAL_COLUMN = 1;
constexpr int GAME_VERSION_COLUMN = 2;
constexpr int GAME_FIRMWARE_VERSION_COLUMN = 3;
constexpr int GAME_PATH_COLUMN = 4;
constexpr int GAME_STATUS_COLUMN = 5;
constexpr int GAME_COMMENT_COLUMN = 6;
constexpr int GAME_SIZE_COLUMN = 4;
constexpr int GAME_PATH_COLUMN = 5;
constexpr int GAME_STATUS_COLUMN = 6;
constexpr int GAME_COMMENT_COLUMN = 7;
static QString NormalizeGameDirectory(const QString& dir) {
const auto trimmed = dir.trimmed();
@@ -217,6 +218,7 @@ ConfigurationListWidget::ConfigurationListWidget(QWidget* parent)
m_ui->cfgs_list->setColumnWidth(GAME_SERIAL_COLUMN, 110);
m_ui->cfgs_list->setColumnWidth(GAME_VERSION_COLUMN, 120);
m_ui->cfgs_list->setColumnWidth(GAME_FIRMWARE_VERSION_COLUMN, 150);
m_ui->cfgs_list->setColumnWidth(GAME_SIZE_COLUMN, 100);
m_ui->cfgs_list->setColumnWidth(GAME_PATH_COLUMN, 320);
m_ui->cfgs_list->setColumnWidth(GAME_STATUS_COLUMN, 150);
m_ui->cfgs_list->setColumnWidth(GAME_COMMENT_COLUMN, 240);