annotate data/model/AlignmentModel.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 3072aa267248
rev   line source
Chris@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@1581 16 #ifndef SV_ALIGNMENT_MODEL_H
Chris@1581 17 #define SV_ALIGNMENT_MODEL_H
Chris@297 18
Chris@297 19 #include "Model.h"
Chris@1738 20 #include "Path.h"
Chris@338 21 #include "base/RealTime.h"
Chris@338 22
Chris@338 23 #include <QString>
Chris@338 24 #include <QStringList>
Chris@297 25
Chris@297 26 class SparseTimeValueModel;
Chris@297 27
Chris@297 28 class AlignmentModel : public Model
Chris@297 29 {
Chris@297 30 Q_OBJECT
Chris@297 31
Chris@297 32 public:
Chris@1735 33 AlignmentModel(ModelId reference /* any model */,
Chris@1735 34 ModelId aligned /* any model */,
Chris@1735 35 ModelId path /* a SparseTimeValueModel */);
Chris@297 36 ~AlignmentModel();
Chris@297 37
Chris@1580 38 bool isOK() const override;
Chris@1705 39
Chris@1705 40 void setError(QString error) { m_error = error; }
Chris@1705 41 QString getError() const { return m_error; }
Chris@1705 42
Chris@1580 43 sv_frame_t getStartFrame() const override;
Chris@1725 44 sv_frame_t getTrueEndFrame() const override;
Chris@1580 45 sv_samplerate_t getSampleRate() const override;
Chris@1580 46 bool isReady(int *completion = 0) const override;
Chris@1671 47 int getCompletion() const override {
Chris@1671 48 int c = 0;
Chris@1671 49 (void)isReady(&c);
Chris@1671 50 return c;
Chris@1671 51 }
Chris@1580 52 const ZoomConstraint *getZoomConstraint() const override;
Chris@297 53
Chris@1580 54 QString getTypeName() const override { return tr("Alignment"); }
Chris@345 55
Chris@1735 56 ModelId getReferenceModel() const;
Chris@1735 57 ModelId getAlignedModel() const;
Chris@297 58
Chris@1038 59 sv_frame_t toReference(sv_frame_t frame) const;
Chris@1038 60 sv_frame_t fromReference(sv_frame_t frame) const;
Chris@297 61
Chris@1735 62 void setPathFrom(ModelId pathSource); // a SparseTimeValueModel
Chris@1738 63 void setPath(const Path &path);
Chris@407 64
Chris@1774 65 /**
Chris@1774 66 * Set the calculated pitch relative to a reference. This is
Chris@1774 67 * purely metadata.
Chris@1774 68 */
Chris@1774 69 void setRelativePitch(int cents) { m_relativePitch = cents; }
Chris@1774 70
Chris@1774 71 /**
Chris@1774 72 * Get the value set with setRelativePitch.
Chris@1774 73 */
Chris@1774 74 int getRelativePitch() const { return m_relativePitch; }
Chris@1774 75
Chris@1580 76 void toXml(QTextStream &stream,
Chris@1752 77 QString indent = "",
Chris@1752 78 QString extraAttributes = "") const override;
Chris@407 79
Chris@1833 80 QVector<QString>
Chris@1833 81 getStringExportHeaders(DataExportOptions) const override {
Chris@1833 82 return {};
Chris@1815 83 }
Chris@1833 84
Chris@1833 85 QVector<QVector<QString>>
Chris@1833 86 toStringExportRows(DataExportOptions, sv_frame_t, sv_frame_t) const override {
Chris@1833 87 return {};
Chris@1679 88 }
Chris@1679 89
Chris@297 90 signals:
Chris@1752 91 void completionChanged(ModelId);
Chris@297 92
Chris@297 93 protected slots:
Chris@1752 94 void pathSourceChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame);
Chris@1752 95 void pathSourceCompletionChanged(ModelId);
Chris@297 96
Chris@297 97 protected:
Chris@1735 98 ModelId m_reference;
Chris@1735 99 ModelId m_aligned;
Chris@297 100
Chris@1761 101 ModelId m_pathSource; // a SparseTimeValueModel, which we need a
Chris@1761 102 // handle on only while it's still being generated
Chris@1735 103
Chris@1738 104 mutable std::unique_ptr<Path> m_path;
Chris@1738 105 mutable std::unique_ptr<Path> m_reversePath;
Chris@323 106 bool m_pathBegun;
Chris@297 107 bool m_pathComplete;
Chris@1705 108 QString m_error;
Chris@1774 109 int m_relativePitch;
Chris@297 110
Chris@338 111 void constructPath() const;
Chris@297 112 void constructReversePath() const;
Chris@297 113
Chris@1738 114 sv_frame_t performAlignment(const Path &path, sv_frame_t frame) const;
Chris@297 115 };
Chris@297 116
Chris@297 117 #endif