annotate data/model/AggregateWaveModel.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 78fe29adfd16
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_AGGREGATE_WAVE_MODEL_H
Chris@1581 17 #define SV_AGGREGATE_WAVE_MODEL_H
Chris@297 18
Chris@297 19 #include "RangeSummarisableTimeValueModel.h"
Chris@297 20 #include "PowerOfSqrtTwoZoomConstraint.h"
Chris@297 21
Chris@297 22 #include <vector>
Chris@297 23
Chris@297 24 class AggregateWaveModel : public RangeSummarisableTimeValueModel
Chris@297 25 {
Chris@297 26 Q_OBJECT
Chris@297 27
Chris@297 28 public:
Chris@297 29 struct ModelChannelSpec
Chris@297 30 {
Chris@297 31 ModelChannelSpec(RangeSummarisableTimeValueModel *m, int c) :
Chris@297 32 model(m), channel(c) { }
Chris@297 33 RangeSummarisableTimeValueModel *model;
Chris@297 34 int channel;
Chris@297 35 };
Chris@297 36
Chris@297 37 typedef std::vector<ModelChannelSpec> ChannelSpecList;
Chris@297 38
Chris@297 39 AggregateWaveModel(ChannelSpecList channelSpecs);
Chris@297 40 ~AggregateWaveModel();
Chris@297 41
Chris@1580 42 bool isOK() const override;
Chris@1580 43 bool isReady(int *) 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@297 49
Chris@1580 50 QString getTypeName() const override { return tr("Aggregate Wave"); }
Chris@345 51
Chris@929 52 int getComponentCount() const;
Chris@929 53 ModelChannelSpec getComponent(int c) const;
Chris@297 54
Chris@1580 55 const ZoomConstraint *getZoomConstraint() const override { return &m_zoomConstraint; }
Chris@297 56
Chris@1038 57 sv_frame_t getFrameCount() const;
Chris@1580 58 int getChannelCount() const override;
Chris@1580 59 sv_samplerate_t getSampleRate() const override;
Chris@297 60
Chris@1580 61 float getValueMinimum() const override { return -1.0f; }
Chris@1580 62 float getValueMaximum() const override { return 1.0f; }
Chris@297 63
Chris@1580 64 sv_frame_t getStartFrame() const override { return 0; }
Chris@1580 65 sv_frame_t getEndFrame() const override { return getFrameCount(); }
Chris@297 66
Chris@1580 67 floatvec_t getData(int channel, sv_frame_t start, sv_frame_t count) const override;
Chris@297 68
Chris@1580 69 std::vector<floatvec_t> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const override;
Chris@363 70
Chris@1580 71 int getSummaryBlockSize(int desired) const override;
Chris@377 72
Chris@1580 73 void getSummaries(int channel, sv_frame_t start, sv_frame_t count,
Chris@300 74 RangeBlock &ranges,
Chris@1580 75 int &blockSize) const override;
Chris@297 76
Chris@1580 77 Range getSummary(int channel, sv_frame_t start, sv_frame_t count) const override;
Chris@297 78
Chris@1580 79 void toXml(QTextStream &out,
Chris@297 80 QString indent = "",
Chris@1580 81 QString extraAttributes = "") const override;
Chris@297 82
Chris@297 83 signals:
Chris@297 84 void modelChanged();
Chris@1038 85 void modelChangedWithin(sv_frame_t, sv_frame_t);
Chris@297 86 void completionChanged();
Chris@1390 87 void modelInvalidated();
Chris@297 88
Chris@297 89 protected slots:
Chris@297 90 void componentModelChanged();
Chris@1038 91 void componentModelChangedWithin(sv_frame_t, sv_frame_t);
Chris@297 92 void componentModelCompletionChanged();
Chris@1389 93 void componentModelAboutToBeDeleted();
Chris@297 94
Chris@297 95 protected:
Chris@297 96 ChannelSpecList m_components;
Chris@297 97 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint;
Chris@1389 98 bool m_invalidated; // because one of its component models is aboutToBeDeleted
Chris@297 99 };
Chris@297 100
Chris@297 101 #endif
Chris@297 102