MCPcopy Create free account
hub / github.com/KDE/labplot / prepareImport

Method prepareImport

src/backend/matrix/Matrix.cpp:1373–1475  ·  view source on GitHub ↗

############################################################################## ######################## Data Import ####################################### ##############################################################################

Source from the content-addressed store, hash-verified

1371// ######################## Data Import #######################################
1372// ##############################################################################
1373int Matrix::prepareImport(std::vector<void*>& dataContainer,
1374 AbstractFileFilter::ImportMode mode,
1375 int actualRows,
1376 int actualCols,
1377 const QStringList& /*colNameList*/,
1378 const QVector<AbstractColumn::ColumnMode>& columnMode,
1379 bool& ok,
1380 bool initializeDataContainer) {
1381 Q_D(Matrix);
1382 auto newColumnMode = columnMode.at(0); // only first column mode used
1383 DEBUG(Q_FUNC_INFO << ", rows = " << actualRows << " cols = " << actualCols << ", mode = " << ENUM_TO_STRING(AbstractFileFilter, ImportMode, mode)
1384 << ", column mode = " << ENUM_TO_STRING(AbstractColumn, ColumnMode, newColumnMode))
1385 // QDEBUG(" column modes = " << columnMode);
1386 int columnOffset = 0;
1387 setUndoAware(false);
1388
1389 setSuppressDataChangedSignal(true);
1390
1391 // resize the matrix
1392 try {
1393 if (mode == AbstractFileFilter::ImportMode::Replace) {
1394 clear();
1395 setDimensions(actualRows, actualCols);
1396 } else { // Append
1397 // handle mismatch of modes
1398 DEBUG(Q_FUNC_INFO << ", TODO: matrix mode = " << ENUM_TO_STRING(AbstractColumn, ColumnMode, d->mode)
1399 << ", columnMode = " << ENUM_TO_STRING(AbstractColumn, ColumnMode, columnMode.at(0)))
1400 // TODO: no way to convert types yet!
1401 if (d->mode != newColumnMode) {
1402 DEBUG(Q_FUNC_INFO << ", WARNING mismatch of types in append mode!")
1403 }
1404 // catch some cases
1405 if ((d->mode == AbstractColumn::ColumnMode::Integer || d->mode == AbstractColumn::ColumnMode::BigInt)
1406 && newColumnMode == AbstractColumn::ColumnMode::Double)
1407 d->mode = newColumnMode;
1408
1409 columnOffset = columnCount();
1410 actualCols += columnOffset;
1411 DEBUG(Q_FUNC_INFO << ", col count = " << columnCount() << ", actualCols = " << actualCols)
1412 if (rowCount() < actualRows)
1413 setDimensions(actualRows, actualCols);
1414 else
1415 setDimensions(rowCount(), actualCols);
1416 }
1417 } catch (std::bad_alloc&) {
1418 ok = false;
1419 return 0;
1420 }
1421
1422 DEBUG(Q_FUNC_INFO << ", actual rows/cols = " << actualRows << "/" << actualCols)
1423 // data() returns a void* which is a pointer to a matrix of any data type (see ColumnPrivate.cpp)
1424 if (initializeDataContainer) {
1425 dataContainer.resize(actualCols);
1426
1427 switch (newColumnMode) { // prepare all columns
1428 case AbstractColumn::ColumnMode::Double:
1429 for (int n = 0; n < actualCols; n++) {
1430 QVector<double>* vector = &(static_cast<QVector<QVector<double>>*>(data())->operator[](n));

Callers 15

readMethod · 0.45
readCurrentSheetMethod · 0.45
importDataMethod · 0.45
readCurrentVarMethod · 0.45
readDataFromDeviceMethod · 0.45
readCurrentVarMethod · 0.45
readDataRegionMethod · 0.45
readDataFromFileMethod · 0.45
readFromDeviceMethod · 0.45
importDataMethod · 0.45
readDataFromFileMethod · 0.45
readCurrentDataSetMethod · 0.45

Calls 5

columnCountFunction · 0.85
rowCountFunction · 0.85
dataClass · 0.85
operator[]Method · 0.80
resizeMethod · 0.45

Tested by

no test coverage detected