| 1315 | } |
| 1316 | |
| 1317 | void HDF5FilterPrivate::scanHDF5DataSet(hid_t did, char* dataSetName, QTreeWidgetItem* parentItem) { |
| 1318 | QString attr = scanHDF5Attrs(did).join(QString()); |
| 1319 | |
| 1320 | char link[MAXNAMELENGTH]; |
| 1321 | m_status = H5Iget_name(did, link, MAXNAMELENGTH); |
| 1322 | handleError(m_status, QStringLiteral("H5Iget_name")); |
| 1323 | |
| 1324 | QStringList dataSetProps; |
| 1325 | hsize_t size = H5Dget_storage_size(did); |
| 1326 | handleError((int)size, QStringLiteral("H5Dget_storage_size")); |
| 1327 | hid_t datatype = H5Dget_type(did); |
| 1328 | handleError((int)datatype, QStringLiteral("H5Dget_type")); |
| 1329 | size_t typeSize = H5Tget_size(datatype); |
| 1330 | handleError((int)typeSize, QStringLiteral("H5Dget_size")); |
| 1331 | |
| 1332 | dataSetProps << readHDF5DataType(datatype); |
| 1333 | |
| 1334 | hid_t dataspace = H5Dget_space(did); |
| 1335 | int rank = H5Sget_simple_extent_ndims(dataspace); |
| 1336 | handleError(rank, QStringLiteral("H5Sget_simple_extent_ndims")); |
| 1337 | unsigned int rows = 1, cols = 1, regs = 1; |
| 1338 | if (rank == 1) { |
| 1339 | hsize_t dims_out[1]; |
| 1340 | m_status = H5Sget_simple_extent_dims(dataspace, dims_out, nullptr); |
| 1341 | handleError(m_status, QStringLiteral("H5Sget_simple_extent_dims")); |
| 1342 | rows = dims_out[0]; |
| 1343 | dataSetProps << QLatin1String(", ") << QString::number(rows) << QLatin1String(" (") << QString::number(size / typeSize) << QLatin1String(")"); |
| 1344 | } else if (rank == 2) { |
| 1345 | hsize_t dims_out[2]; |
| 1346 | m_status = H5Sget_simple_extent_dims(dataspace, dims_out, nullptr); |
| 1347 | handleError(m_status, QStringLiteral("H5Sget_simple_extent_dims")); |
| 1348 | rows = dims_out[0]; |
| 1349 | cols = dims_out[1]; |
| 1350 | dataSetProps << QLatin1String(", ") << QString::number(rows) << QLatin1String("x") << QString::number(cols) << QLatin1String(" (") |
| 1351 | << QString::number(size / typeSize) << QLatin1String(")"); |
| 1352 | } else if (rank == 3) { |
| 1353 | hsize_t dims_out[3]; |
| 1354 | m_status = H5Sget_simple_extent_dims(dataspace, dims_out, nullptr); |
| 1355 | handleError(m_status, QStringLiteral("H5Sget_simple_extent_dims")); |
| 1356 | rows = dims_out[0]; |
| 1357 | cols = dims_out[1]; |
| 1358 | regs = dims_out[2]; |
| 1359 | dataSetProps << QLatin1String(", ") << QString::number(rows) << QLatin1String("x") << QString::number(cols) << QLatin1String("x") |
| 1360 | << QString::number(regs) << QLatin1String(" (") << QString::number(size / typeSize) << QLatin1String(")"); |
| 1361 | } else |
| 1362 | dataSetProps << QLatin1String(", ") << i18n("rank %1 not supported yet", rank); |
| 1363 | |
| 1364 | hid_t pid = H5Dget_create_plist(did); |
| 1365 | handleError((int)pid, QStringLiteral("H5Dget_create_plist")); |
| 1366 | dataSetProps << QStringLiteral(", ") << readHDF5PropertyList(pid).join(QString()); |
| 1367 | |
| 1368 | auto* dataSetItem = |
| 1369 | new QTreeWidgetItem(QStringList() << QLatin1String(dataSetName) << QLatin1String(link) << i18n("data set") << dataSetProps.join(QString()) << attr); |
| 1370 | dataSetItem->setIcon(0, QIcon::fromTheme(QStringLiteral("x-office-spreadsheet"))); |
| 1371 | for (int i = 0; i < dataSetItem->columnCount(); ++i) { |
| 1372 | if (rows > 0 && cols > 0 && regs > 0) { |
| 1373 | dataSetItem->setBackground(i, QColor(192, 255, 192)); |
| 1374 | dataSetItem->setForeground(i, Qt::black); |
nothing calls this directly
no test coverage detected