annotate data/model/AlignmentModel.h @ 1671:82d03c9661f9 single-point

Rework isReady()/getCompletion() on models. Previously the new overhauled models were implementing getCompletion() but inheriting a version of isReady() (from the Model base) that didn't call it, referring only to isOK(). So they were reporting completion as soon as they had begun. Instead hoist getCompletion() to abstract base and call it from Model::isReady().
author Chris Cannam
date Wed, 27 Mar 2019 13:15:16 +0000
parents ad5f892c0c4d
children 0d89abd631ac
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@407 20 #include "PathModel.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@297 33 AlignmentModel(Model *reference,
Chris@297 34 Model *aligned,
Chris@1010 35 Model *inputModel, // probably an AggregateWaveModel; may be null; I take ownership
Chris@297 36 SparseTimeValueModel *path); // I take ownership
Chris@297 37 ~AlignmentModel();
Chris@297 38
Chris@1580 39 bool isOK() const override;
Chris@1580 40 sv_frame_t getStartFrame() const override;
Chris@1580 41 sv_frame_t getEndFrame() const override;
Chris@1580 42 sv_samplerate_t getSampleRate() const override;
Chris@1580 43 bool isReady(int *completion = 0) const override;
Chris@1671 44 int getCompletion() const override {
Chris@1671 45 int c = 0;
Chris@1671 46 (void)isReady(&c);
Chris@1671 47 return c;
Chris@1671 48 }
Chris@1580 49 const ZoomConstraint *getZoomConstraint() const override;
Chris@297 50
Chris@1580 51 QString getTypeName() const override { return tr("Alignment"); }
Chris@345 52
Chris@297 53 const Model *getReferenceModel() const;
Chris@297 54 const Model *getAlignedModel() const;
Chris@297 55
Chris@1038 56 sv_frame_t toReference(sv_frame_t frame) const;
Chris@1038 57 sv_frame_t fromReference(sv_frame_t frame) const;
Chris@297 58
Chris@1016 59 void setPathFrom(SparseTimeValueModel *rawpath);
Chris@407 60 void setPath(PathModel *path);
Chris@407 61
Chris@1580 62 void toXml(QTextStream &stream,
Chris@407 63 QString indent = "",
Chris@1580 64 QString extraAttributes = "") const override;
Chris@407 65
Chris@297 66 signals:
Chris@297 67 void modelChanged();
Chris@1038 68 void modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame);
Chris@297 69 void completionChanged();
Chris@297 70
Chris@297 71 protected slots:
Chris@297 72 void pathChanged();
Chris@1038 73 void pathChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame);
Chris@297 74 void pathCompletionChanged();
Chris@297 75
Chris@297 76 protected:
Chris@297 77 Model *m_reference; // I don't own this
Chris@297 78 Model *m_aligned; // I don't own this
Chris@297 79
Chris@297 80 Model *m_inputModel; // I own this
Chris@338 81
Chris@338 82 SparseTimeValueModel *m_rawPath; // I own this
Chris@338 83 mutable PathModel *m_path; // I own this
Chris@338 84 mutable PathModel *m_reversePath; // I own this
Chris@323 85 bool m_pathBegun;
Chris@297 86 bool m_pathComplete;
Chris@297 87
Chris@338 88 void constructPath() const;
Chris@297 89 void constructReversePath() const;
Chris@297 90
Chris@1038 91 sv_frame_t align(PathModel *path, sv_frame_t frame) const;
Chris@297 92 };
Chris@297 93
Chris@297 94 #endif