annotate data/model/AlignmentModel.h @ 1752:6d09d68165a4 by-id

Further review of ById: make IDs only available when adding a model to the ById store, not by querying the item directly. This means any id encountered in the wild must have been added to the store at some point (even if later released), which simplifies reasoning about lifecycles
author Chris Cannam
date Fri, 05 Jul 2019 15:28:07 +0100
parents 4abc0f08adf9
children ee7fd2c01d87
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@1735 85 ModelId m_pathSource; // a SparseTimeValueModel
Chris@1735 86
Chris@1738 87 mutable std::unique_ptr<Path> m_path;
Chris@1738 88 mutable std::unique_ptr<Path> m_reversePath;
Chris@323 89 bool m_pathBegun;
Chris@297 90 bool m_pathComplete;
Chris@1705 91 QString m_error;
Chris@297 92
Chris@338 93 void constructPath() const;
Chris@297 94 void constructReversePath() const;
Chris@297 95
Chris@1738 96 sv_frame_t performAlignment(const Path &path, sv_frame_t frame) const;
Chris@297 97 };
Chris@297 98
Chris@297 99 #endif