Mercurial > hg > svcore
comparison data/model/BoxModel.h @ 1833:21c792334c2e sensible-delimited-data-strings
Rewrite all the DelimitedDataString stuff so as to return vectors of individual cell strings rather than having the classes add the delimiters themselves. Rename accordingly to names based on StringExport. Take advantage of this in the CSV writer code so as to properly quote cells that contain delimiter characters.
author | Chris Cannam |
---|---|
date | Fri, 03 Apr 2020 17:11:05 +0100 |
parents | c546429d4c2f |
children |
comparison
equal
deleted
inserted
replaced
1832:7c92c644db20 | 1833:21c792334c2e |
---|---|
346 options.levelAttributeName = "extent"; | 346 options.levelAttributeName = "extent"; |
347 | 347 |
348 m_events.toXml(out, indent, QString("dimensions=\"2\""), options); | 348 m_events.toXml(out, indent, QString("dimensions=\"2\""), options); |
349 } | 349 } |
350 | 350 |
351 QString getDelimitedDataHeaderLine(QString delimiter, | 351 QVector<QString> |
352 DataExportOptions opts) const override { | 352 getStringExportHeaders(DataExportOptions opts) const override { |
353 | |
353 QStringList list; | 354 QStringList list; |
354 | 355 |
355 // These are considered API rather than human-readable text - | 356 // These are considered API rather than human-readable text - |
356 // they shouldn't be translated | 357 // they shouldn't be translated |
357 | 358 |
361 list << "start" << "end"; | 362 list << "start" << "end"; |
362 } | 363 } |
363 | 364 |
364 list << "extent start" << "extent end" << "label"; | 365 list << "extent start" << "extent end" << "label"; |
365 | 366 |
366 return list.join(delimiter).toUpper(); | 367 QVector<QString> sv; |
367 } | 368 for (QString s: list) { |
368 | 369 sv.push_back(s.toUpper()); |
369 QString toDelimitedDataString(QString delimiter, | 370 } |
370 DataExportOptions opts, | 371 return sv; |
371 sv_frame_t startFrame, | 372 } |
372 sv_frame_t duration) const override { | 373 |
374 QVector<QVector<QString>> | |
375 toStringExportRows(DataExportOptions opts, | |
376 sv_frame_t startFrame, | |
377 sv_frame_t duration) const override { | |
373 | 378 |
374 // We need a custom format here | 379 // We need a custom format here |
375 | 380 |
376 EventVector ee = m_events.getEventsSpanning(startFrame, duration); | 381 EventVector ee = m_events.getEventsSpanning(startFrame, duration); |
377 | 382 |
378 QString s; | 383 QVector<QVector<QString>> rows; |
379 | 384 |
380 for (auto e: ee) { | 385 for (auto e: ee) { |
381 | 386 |
382 QStringList list; | 387 QVector<QString> list; |
383 | 388 |
384 if (opts & DataExportWriteTimeInFrames) { | 389 if (opts & DataExportWriteTimeInFrames) { |
385 | 390 |
386 list << QString("%1").arg(e.getFrame()); | 391 list << QString("%1").arg(e.getFrame()); |
387 list << QString("%1").arg(e.getFrame() + e.getDuration()); | 392 list << QString("%1").arg(e.getFrame() + e.getDuration()); |
403 | 408 |
404 if (e.getLabel() != "") { | 409 if (e.getLabel() != "") { |
405 list << e.getLabel(); | 410 list << e.getLabel(); |
406 } | 411 } |
407 | 412 |
408 s += list.join(delimiter) + "\n"; | 413 rows.push_back(list); |
409 } | 414 } |
410 | 415 |
411 return s; | 416 return rows; |
412 } | 417 } |
413 | 418 |
414 protected: | 419 protected: |
415 sv_samplerate_t m_sampleRate; | 420 sv_samplerate_t m_sampleRate; |
416 int m_resolution; | 421 int m_resolution; |