@@ -52,6 +52,9 @@ class DomDataViewItems : public mbCoreDomItems<mbCoreDomDataViewItem>
5252};
5353
5454mbCoreBuilder::Strings::Strings () :
55+ dataViewPrefix(QStringLiteral(" dataview" )),
56+ dataViewAttrNames(QStringList() << mbCoreDataView::Strings::instance().name
57+ << mbCoreDataView::Strings::instance().period),
5558 xml(QStringLiteral(" xml" )),
5659 csv(QStringLiteral(" csv" )),
5760 csvSep(' ;' )
@@ -364,13 +367,33 @@ mbCoreDevice *mbCoreBuilder::importDevice(const QString &file)
364367}
365368
366369mbCoreDataView *mbCoreBuilder::importDataView (const QString &file)
370+ {
371+ if (file.endsWith (Strings::instance ().csv ))
372+ return importDataViewCsv (file);
373+ return importDataViewXml (file);
374+ }
375+
376+ mbCoreDataView *mbCoreBuilder::importDataViewXml (const QString &file)
367377{
368378 QScopedPointer<mbCoreDomDataView> dom (newDomDataView ());
369379 if (loadXml (file, dom.data ()))
370380 return toDataView (dom.data ());
371381 return nullptr ;
372382}
373383
384+ mbCoreDataView *mbCoreBuilder::importDataViewCsv (const QString &file)
385+ {
386+ QFile qf (file);
387+ if (!qf.open (QIODevice::ReadOnly))
388+ {
389+ setError (qf.errorString ());
390+ return nullptr ;
391+ }
392+ mbCoreDataView* view = importDataViewCsv (&qf);
393+ qf.close ();
394+ return view;
395+ }
396+
374397QList<mbCoreDataViewItem *> mbCoreBuilder::importDataViewItems (const QString &file)
375398{
376399 if (file.endsWith (Strings::instance ().csv ))
@@ -423,14 +446,33 @@ mbCoreDevice *mbCoreBuilder::importDevice(QIODevice *io)
423446 return nullptr ;
424447}
425448
426- mbCoreDataView *mbCoreBuilder::importDataView (QIODevice *io)
449+ mbCoreDataView *mbCoreBuilder::importDataViewXml (QIODevice *io)
427450{
428451 QScopedPointer<mbCoreDomDataView> dom (newDomDataView ());
429452 if (loadXml (io, dom.data ()))
430453 return toDataView (dom.data ());
431454 return nullptr ;
432455}
433456
457+ mbCoreDataView *mbCoreBuilder::importDataViewCsv (QIODevice *io)
458+ {
459+ qint64 mempos = io->pos ();
460+ QByteArray headerBytes = io->readLine ();
461+ QString header = QString::fromUtf8 (headerBytes);
462+ MBSETTINGS settings;
463+ if (header.startsWith (Strings::instance ().dataViewPrefix ))
464+ settings = parseCsvDataViewSettings (header);
465+ else
466+ io->seek (mempos);
467+ QList<mbCoreDataViewItem*> items = importDataViewItemsCsv (io);
468+ mbCoreDataView *view = newDataView ();
469+ if (settings.count ())
470+ view->setSettings (settings);
471+ if (items.count ())
472+ view->itemsInsert (items);
473+ return view;
474+ }
475+
434476QList<mbCoreDataViewItem *> mbCoreBuilder::importDataViewItemsXml (QIODevice *io)
435477{
436478 DomDataViewItems dom (this );
@@ -442,8 +484,10 @@ QList<mbCoreDataViewItem *> mbCoreBuilder::importDataViewItemsXml(QIODevice *io)
442484QList<mbCoreDataViewItem *> mbCoreBuilder::importDataViewItemsCsv (QIODevice *io)
443485{
444486 QList<mbCoreDataViewItem *> items;
445- QByteArray header = io->readLine ();
446- QStringList attrNames = parseCsvRow (QString::fromUtf8 (header));
487+ QString header = QString::fromUtf8 (io->readLine ());
488+ if (header.startsWith (Strings::instance ().dataViewPrefix ))
489+ header = QString::fromUtf8 (io->readLine ());
490+ QStringList attrNames = parseCsvRow (header);
447491 if (attrNames.isEmpty ())
448492 return items;
449493 while (!io->atEnd ())
@@ -472,11 +516,31 @@ bool mbCoreBuilder::exportDevice(const QString &file, mbCoreDevice *cfg)
472516}
473517
474518bool mbCoreBuilder::exportDataView (const QString &file, mbCoreDataView *cfg)
519+ {
520+ if (file.endsWith (Strings::instance ().csv ))
521+ return exportDataViewCsv (file, cfg);
522+ return exportDataViewXml (file, cfg);
523+ }
524+
525+ bool mbCoreBuilder::exportDataViewXml (const QString &file, mbCoreDataView *cfg)
475526{
476527 QScopedPointer<mbCoreDomDataView> dom (toDomDataView (cfg));
477528 return saveXml (file, dom.data ());
478529}
479530
531+ bool mbCoreBuilder::exportDataViewCsv (const QString &file, mbCoreDataView *cfg)
532+ {
533+ QFile qf (file);
534+ if (!qf.open (QIODevice::WriteOnly))
535+ {
536+ setError (qf.errorString ());
537+ return false ;
538+ }
539+ bool res = exportDataViewCsv (&qf, cfg);
540+ qf.close ();
541+ return res;
542+ }
543+
480544bool mbCoreBuilder::exportDataViewItems (const QString &file, const QList<mbCoreDataViewItem *> &cfg)
481545{
482546 if (file.endsWith (Strings::instance ().csv ))
@@ -515,12 +579,19 @@ bool mbCoreBuilder::exportDevice(QIODevice *io, mbCoreDevice *cfg)
515579 return saveXml (io, dom.data ());
516580}
517581
518- bool mbCoreBuilder::exportDataView (QIODevice *io, mbCoreDataView *cfg)
582+ bool mbCoreBuilder::exportDataViewXml (QIODevice *io, mbCoreDataView *cfg)
519583{
520584 QScopedPointer<mbCoreDomDataView> dom (toDomDataView (cfg));
521585 return saveXml (io, dom.data ());
522586}
523587
588+ bool mbCoreBuilder::exportDataViewCsv (QIODevice *io, mbCoreDataView *cfg)
589+ {
590+ QString s = makeCsvDataViewSettings (Strings::instance ().dataViewAttrNames , cfg->settings ());
591+ io->write (s.toUtf8 ());
592+ return exportDataViewItemsCsv (io, cfg->itemsCore ());
593+ }
594+
524595bool mbCoreBuilder::exportDataViewItemsXml (QIODevice *io, const QList<mbCoreDataViewItem *> &cfg)
525596{
526597 QScopedPointer<DomDataViewItems> dom (toDomDataViewItems (cfg));
@@ -647,6 +718,36 @@ void mbCoreBuilder::setProject(mbCoreProject *project)
647718 m_project = project;
648719}
649720
721+ MBSETTINGS mbCoreBuilder::parseCsvDataViewSettings (const QString &row)
722+ {
723+ MBSETTINGS settings;
724+ QStringList attrs = parseCsvRow (row);
725+
726+ // Note: pass attrs[0] that must be equal to "dataview"
727+ for (int i = 0 ; i < attrs.count () /2 ; i++)
728+ {
729+ QString name = attrs.at (i*2 +1 );
730+ QString value = attrs.at (i*2 +2 );
731+ settings[name] = value;
732+ }
733+ return settings;
734+ }
735+
736+ QString mbCoreBuilder::makeCsvDataViewSettings (const QStringList &attrNames, const MBSETTINGS &settings)
737+ {
738+ QStringList attrs;
739+
740+ attrs.append (Strings::instance ().dataViewPrefix );
741+ Q_FOREACH (const QString attrName, attrNames)
742+ {
743+ attrs.append (attrName);
744+ attrs.append (settings.value (attrName).toString ());
745+ }
746+
747+ QString v = makeCsvRow (attrs);
748+ return v;
749+ }
750+
650751MBSETTINGS mbCoreBuilder::parseCsvDataViewItem (const QStringList &attrNames, const QString &row)
651752{
652753 MBSETTINGS settings;
0 commit comments