geopro/src/app/panels/DatasetListPanel.cpp

64 lines
2.4 KiB
C++

#include "panels/DatasetListPanel.hpp"
#include <QColor>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QString>
namespace geopro::app {
namespace {
QString humanSize(long long b) {
if (b < 1024) return QStringLiteral("%1 B").arg(b);
const double kb = b / 1024.0;
if (kb < 1024.0) return QStringLiteral("%1 KB").arg(kb, 0, 'f', 1);
return QStringLiteral("%1 MB").arg(kb / 1024.0, 0, 'f', 1);
}
} // namespace
void populateDatasetList(QStandardItemModel* model, const std::vector<geopro::data::DsRow>& rows,
bool append) {
if (!model) return;
if (!append) model->clear();
for (const auto& d : rows) {
QString text = QString::fromStdString(d.dsName);
QString sub = QString::fromStdString(d.createTime); // 名称下先创建时间
if (!d.typeName.empty())
sub += QStringLiteral(" · %1").arg(QString::fromStdString(d.typeName)); // 再跟类型
if (!sub.isEmpty()) text += QStringLiteral("\n%1").arg(sub);
auto* item = new QStandardItem(text);
item->setEditable(false);
item->setData(QString::fromStdString(d.id), kDsIdRole);
item->setData(QString::fromStdString(d.ddCode), kDsDdTypeRole);
model->appendRow(item);
}
}
void populateFileList(QStandardItemModel* model, const std::vector<geopro::data::DsRow>& rows,
bool append) {
if (!model) return;
if (!append) model->clear();
if (!append && rows.empty()) {
auto* hint = new QStandardItem(QStringLiteral("(暂无文件)"));
hint->setFlags(Qt::NoItemFlags);
hint->setForeground(QColor("#9AA6B6"));
hint->setTextAlignment(Qt::AlignCenter);
model->appendRow(hint);
return;
}
for (const auto& d : rows) {
const QString fname =
d.fileName.empty() ? QString::fromStdString(d.dsName) : QString::fromStdString(d.fileName);
QString sub = QString::fromStdString(d.createTime); // 名称下先创建时间
sub += QStringLiteral(" · %1").arg(humanSize(d.fileSize)); // 再跟大小
const QString text = fname + QStringLiteral("\n%1").arg(sub);
auto* item = new QStandardItem(text);
item->setEditable(false);
item->setData(QString::fromStdString(d.id), kDsIdRole);
item->setData(QString::fromStdString(d.fileUrl), kDsFileUrlRole);
model->appendRow(item);
}
}
} // namespace geopro::app