annotate data/model/AlignmentModel.h @ 1773:fadd9f8aaa27

This output is too annoying, in the perfectly innocuous case of reading from an aggregate model whose components are different lengths
author Chris Cannam
date Wed, 14 Aug 2019 13:54:23 +0100
parents ee7fd2c01d87
children f19711ab7074
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@1580 65 void toXml(QTextStream &stream,
Chris@1752 66 QString indent = "",
Chris@1752 67 QString extraAttributes = "") const override;
Chris@407 68
Chris@1679 69 QString toDelimitedDataString(QString, DataExportOptions,
Chris@1679 70 sv_frame_t, sv_frame_t) const override {
Chris@1679 71 return "";
Chris@1679 72 }
Chris@1679 73
Chris@297 74 signals:
Chris@1752 75 void completionChanged(ModelId);
Chris@297 76
Chris@297 77 protected slots:
Chris@1752 78 void pathSourceChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame);
Chris@1752 79 void pathSourceCompletionChanged(ModelId);
Chris@297 80
Chris@297 81 protected:
Chris@1735 82 ModelId m_reference;
Chris@1735 83 ModelId m_aligned;
Chris@297 84
Chris@1761 85 ModelId m_pathSource; // a SparseTimeValueModel, which we need a
Chris@1761 86 // handle on only while it's still being generated
Chris@1735 87
Chris@1738 88 mutable std::unique_ptr<Path> m_path;
Chris@1738 89 mutable std::unique_ptr<Path> m_reversePath;
Chris@323 90 bool m_pathBegun;
Chris@297 91 bool m_pathComplete;
Chris@1705 92 QString m_error;
Chris@297 93
Chris@338 94 void constructPath() const;
Chris@297 95 void constructReversePath() const;
Chris@297 96
Chris@1738 97 sv_frame_t performAlignment(const Path &path, sv_frame_t frame) const;
Chris@297 98 };
Chris@297 99
Chris@297 100 #endif