Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit c52f1cf

Browse files
committed
[netcdf] add file info for import dialog
1 parent 38ec9fa commit c52f1cf

File tree

6 files changed

+80
-6
lines changed

6 files changed

+80
-6
lines changed

compile_debug

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ fi
88

99
cd $BUILDDIR
1010

11-
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr && make -j 4
11+
cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_NETCDF=OFF -DCMAKE_INSTALL_PREFIX=/usr && make -j 4

src/backend/datasources/filters/FITSFilter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ void FITSFilter::setExportTo(const int exportTo) {
248248

249249
QString FITSFilter::fileInfoString(const QString& fileName) {
250250
const int imagesCount = FITSFilterPrivate::extensionNames(fileName).values(QLatin1String("IMAGES")).size();
251-
QString info(i18n("Images: %1", QString::number(imagesCount )));
251+
QString info(i18n("Images: %1", QString::number(imagesCount)));
252252

253253
info += QLatin1String("<br>");
254254

src/backend/datasources/filters/NetCDFFilter.cpp

+69-1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,53 @@ int NetCDFFilter::endColumn() const {
137137
return d->endColumn;
138138
}
139139

140+
QString NetCDFFilter::fileInfoString(const QString& fileName) {
141+
DEBUG("NetCDFFilter::fileInfoString()");
142+
143+
QByteArray bafileName = fileName.toLatin1();
144+
DEBUG("fileName = " << bafileName.data());
145+
146+
QString info;
147+
#ifdef HAVE_NETCDF
148+
int ncid, status;
149+
status = nc_open(bafileName.data(), NC_NOWRITE, &ncid);
150+
NetCDFFilterPrivate::handleError(status, "nc_open");
151+
if (status != NC_NOERR) {
152+
DEBUG(" File error. Giving up");
153+
return QString();
154+
}
155+
156+
int ndims, nvars, nattr, uldid;
157+
status = nc_inq(ncid, &ndims, &nvars, &nattr, &uldid);
158+
NetCDFFilterPrivate::handleError(status, "nc_inq");
159+
DEBUG(" nattr/ndims/nvars = " << nattr << ' ' << ndims << ' ' << nvars);
160+
161+
if (status == NC_NOERR) {
162+
info += i18n("Number of global attributes: %1", QString::number(nattr));
163+
info += QLatin1String("<br>");
164+
info += i18n("Number of dimensions: %1", QString::number(ndims));
165+
info += QLatin1String("<br>");
166+
info += i18n("Number of variables: %1", QString::number(nvars));
167+
info += QLatin1String("<br>");
168+
169+
int format;
170+
status = nc_inq_format(ncid, &format);
171+
if (status == NC_NOERR)
172+
info += i18n("Format version: %1", NetCDFFilterPrivate::translateFormat(format));
173+
info += QLatin1String("<br>");
174+
175+
info += i18n("Using library version %1", QString(nc_inq_libvers()));
176+
} else {
177+
info += i18n("Error getting file info");
178+
}
179+
180+
status = ncclose(ncid);
181+
NetCDFFilterPrivate::handleError(status, "nc_close");
182+
#endif
183+
184+
return info;
185+
}
186+
140187
//#####################################################################
141188
//################### Private implementation ##########################
142189
//#####################################################################
@@ -150,7 +197,7 @@ NetCDFFilterPrivate::NetCDFFilterPrivate(NetCDFFilter* owner) : q(owner) {
150197
#ifdef HAVE_NETCDF
151198
void NetCDFFilterPrivate::handleError(int err, const QString& function) {
152199
if (err != NC_NOERR)
153-
qDebug() << "NETCDF ERROR:" << function << "() - " << nc_strerror(m_status);
200+
qDebug() << "NETCDF ERROR:" << function << "() - " << nc_strerror(err);
154201
}
155202

156203
QString NetCDFFilterPrivate::translateDataType(nc_type type) {
@@ -200,6 +247,27 @@ QString NetCDFFilterPrivate::translateDataType(nc_type type) {
200247
return typeString;
201248
}
202249

250+
QString NetCDFFilterPrivate::translateFormat(int format) {
251+
QString formatString;
252+
253+
switch (format) {
254+
case NC_FORMAT_CLASSIC:
255+
formatString = "NC_FORMAT_CLASSIC";
256+
break;
257+
case NC_FORMAT_64BIT:
258+
formatString = "NC_FORMAT_64BIT";
259+
break;
260+
case NC_FORMAT_NETCDF4:
261+
formatString = "NC_FORMAT_NETCDF4";
262+
break;
263+
case NC_FORMAT_NETCDF4_CLASSIC:
264+
formatString = "NC_FORMAT_NETCDF4_CLASSIC";
265+
break;
266+
}
267+
268+
return formatString;
269+
}
270+
203271
QString NetCDFFilterPrivate::scanAttrs(int ncid, int varid, int attid, QTreeWidgetItem* parentItem) {
204272
char name[NC_MAX_NAME + 1];
205273

src/backend/datasources/filters/NetCDFFilter.h

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class NetCDFFilter : public AbstractFileFilter {
6161
void setEndColumn(const int);
6262
int endColumn() const;
6363

64+
static QString fileInfoString(const QString&);
65+
6466
void save(QXmlStreamWriter*) const override;
6567
bool load(XmlStreamReader*) override;
6668

src/backend/datasources/filters/NetCDFFilterPrivate.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class NetCDFFilterPrivate {
4545
QVector<QStringList> readCurrentVar(const QString& fileName, AbstractDataSource* = nullptr,
4646
AbstractFileFilter::ImportMode = AbstractFileFilter::Replace, int lines = -1);
4747
void write(const QString& fileName, AbstractDataSource*);
48+
#ifdef HAVE_NETCDF
49+
static void handleError(int status, const QString& function);
50+
static QString translateFormat(int format);
51+
static QString translateDataType(nc_type type);
52+
#endif
4853

4954
const NetCDFFilter* q;
5055

@@ -58,8 +63,6 @@ class NetCDFFilterPrivate {
5863
#ifdef HAVE_NETCDF
5964
int m_status;
6065

61-
void handleError(int status, const QString& function);
62-
QString translateDataType(nc_type type);
6366
QString scanAttrs(int ncid, int varid, int attid, QTreeWidgetItem* parentItem = nullptr);
6467
void scanDims(int ncid, int ndims, QTreeWidgetItem* parentItem);
6568
void scanVars(int ncid, int nvars, QTreeWidgetItem* parentItem);

src/kdefrontend/datasources/FileInfoDialog.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "FileInfoDialog.h"
3131
#include "backend/datasources/LiveDataSource.h"
3232
#include "backend/datasources/filters/AsciiFilter.h"
33+
#include "backend/datasources/filters/NetCDFFilter.h"
3334
#include "backend/datasources/filters/FITSFilter.h"
3435
#include "backend/datasources/filters/NgspiceRawAsciiFilter.h"
3536

@@ -169,7 +170,7 @@ QString FileInfoDialog::fileInfoString(const QString& name) const {
169170
//TODO infoStrings << HDF5Filter::fileInfoString(fileName);
170171
break;
171172
case AbstractFileFilter::NETCDF:
172-
//TODO infoStrings << NETCDFFilter::fileInfoString(fileName);
173+
infoStrings << NetCDFFilter::fileInfoString(fileName);
173174
break;
174175
case AbstractFileFilter::FITS:
175176
infoStrings << FITSFilter::fileInfoString(fileName);

0 commit comments

Comments
 (0)