diff --git a/sdk/plugins/gallery.cpp b/sdk/plugins/gallery.cpp index a99972f..c5965a7 100644 --- a/sdk/plugins/gallery.cpp +++ b/sdk/plugins/gallery.cpp @@ -22,13 +22,13 @@ #include #include #endif // BR_EMBEDDED +#include #include #include "NaturalStringCompare.h" #include "core/bee.h" #include "core/opencvutils.h" #include "core/qtutils.h" -#include namespace br { @@ -339,20 +339,33 @@ class csvGallery : public Gallery { if (files.isEmpty()) return; - QStringList keys; + QMap samples; foreach (const File &file, files) foreach (const QString &key, file.localKeys()) - if (!keys.contains(key)) keys += key; - qSort(keys); + if (!samples.contains(key)) + samples.insert(key, file.value(key)); + + QStringList lines; + lines.reserve(files.size()+1); + + { // Make header + QStringList words; + words.append("File"); + foreach (const QString &key, samples.keys()) + words.append(getCSVElement(key, samples[key], true)); + lines.append(words.join(",")); + } - const int rows = files.size(); - const int columns = keys.size(); - QSharedPointer output(Output::make(file, keys, files)); + // Make table + foreach (const File &file, files) { + QStringList words; + words.append(file.name); + foreach (const QString &key, samples.keys()) + words.append(getCSVElement(key, file.value(key), false)); + lines.append(words.join(",")); + } - for (int i=0; isetRelative(files[i].label(), i, j); - else output->setRelative(files[i].get(keys[j], std::numeric_limits::quiet_NaN()), i, j); + QtUtils::writeFile(file, lines); } TemplateList readBlock(bool *done) @@ -377,6 +390,25 @@ class csvGallery : public Gallery { files.append(t.file); } + + static QString getCSVElement(const QString &key, const QVariant &value, bool header) + { + if (value.canConvert()) { + if (header) return key; + else return value.value(); + } else if (value.canConvert()) { + const QPointF point = value.value(); + if (header) return key+"_X,"+key+"_Y"; + else return QString::number(point.x())+","+QString::number(point.y()); + } else if (value.canConvert()) { + const QRectF rect = value.value(); + if (header) return key+"_X,"+key+"_Y,"+key+"_Width,"+key+"_Height"; + else return QString::number(rect.x())+","+QString::number(rect.y())+","+QString::number(rect.width())+","+QString::number(rect.height()); + } else { + if (header) return key; + else return QString::number(std::numeric_limits::quiet_NaN()); + } + } }; BR_REGISTER(Gallery, csvGallery)