Chris@545
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@545
|
2
|
Chris@545
|
3 /*
|
Chris@545
|
4 Sonic Visualiser
|
Chris@545
|
5 An audio file viewer and annotation editor.
|
Chris@545
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@545
|
7 This file copyright 2009 QMUL.
|
Chris@545
|
8
|
Chris@545
|
9 This program is free software; you can redistribute it and/or
|
Chris@545
|
10 modify it under the terms of the GNU General Public License as
|
Chris@545
|
11 published by the Free Software Foundation; either version 2 of the
|
Chris@545
|
12 License, or (at your option) any later version. See the file
|
Chris@545
|
13 COPYING included with this distribution for more information.
|
Chris@545
|
14 */
|
Chris@545
|
15
|
Chris@545
|
16 #ifndef _DENSE_3D_MODEL_PEAK_CACHE_H_
|
Chris@545
|
17 #define _DENSE_3D_MODEL_PEAK_CACHE_H_
|
Chris@545
|
18
|
Chris@545
|
19 #include "DenseThreeDimensionalModel.h"
|
Chris@545
|
20 #include "EditableDenseThreeDimensionalModel.h"
|
Chris@545
|
21 #include "base/ResizeableBitset.h"
|
Chris@545
|
22
|
Chris@545
|
23 class Dense3DModelPeakCache : public DenseThreeDimensionalModel
|
Chris@545
|
24 {
|
Chris@546
|
25 Q_OBJECT
|
Chris@546
|
26
|
Chris@545
|
27 public:
|
Chris@545
|
28 Dense3DModelPeakCache(DenseThreeDimensionalModel *source,
|
Chris@929
|
29 int columnsPerPeak);
|
Chris@545
|
30 ~Dense3DModelPeakCache();
|
Chris@545
|
31
|
Chris@546
|
32 virtual bool isOK() const {
|
Chris@546
|
33 return m_source && m_source->isOK();
|
Chris@546
|
34 }
|
Chris@546
|
35
|
Chris@1040
|
36 virtual sv_samplerate_t getSampleRate() const {
|
Chris@546
|
37 return m_source->getSampleRate();
|
Chris@546
|
38 }
|
Chris@546
|
39
|
Chris@1038
|
40 virtual sv_frame_t getStartFrame() const {
|
Chris@546
|
41 return m_source->getStartFrame();
|
Chris@546
|
42 }
|
Chris@546
|
43
|
Chris@1038
|
44 virtual sv_frame_t getEndFrame() const {
|
Chris@546
|
45 return m_source->getEndFrame();
|
Chris@546
|
46 }
|
Chris@546
|
47
|
Chris@929
|
48 virtual int getResolution() const {
|
Chris@545
|
49 return m_source->getResolution() * m_resolution;
|
Chris@545
|
50 }
|
Chris@545
|
51
|
Chris@929
|
52 virtual int getWidth() const {
|
Chris@545
|
53 return m_source->getWidth() / m_resolution + 1;
|
Chris@545
|
54 }
|
Chris@545
|
55
|
Chris@929
|
56 virtual int getHeight() const {
|
Chris@545
|
57 return m_source->getHeight();
|
Chris@545
|
58 }
|
Chris@545
|
59
|
Chris@545
|
60 virtual float getMinimumLevel() const {
|
Chris@545
|
61 return m_source->getMinimumLevel();
|
Chris@545
|
62 }
|
Chris@545
|
63
|
Chris@545
|
64 virtual float getMaximumLevel() const {
|
Chris@545
|
65 return m_source->getMaximumLevel();
|
Chris@545
|
66 }
|
Chris@545
|
67
|
Chris@929
|
68 virtual bool isColumnAvailable(int column) const;
|
Chris@545
|
69
|
Chris@929
|
70 virtual Column getColumn(int column) const;
|
Chris@545
|
71
|
Chris@929
|
72 virtual float getValueAt(int column, int n) const;
|
Chris@545
|
73
|
Chris@929
|
74 virtual QString getBinName(int n) const {
|
Chris@545
|
75 return m_source->getBinName(n);
|
Chris@545
|
76 }
|
Chris@545
|
77
|
Chris@545
|
78 virtual bool shouldUseLogValueScale() const {
|
Chris@545
|
79 return m_source->shouldUseLogValueScale();
|
Chris@545
|
80 }
|
Chris@545
|
81
|
Chris@545
|
82 QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
|
Chris@545
|
83
|
Chris@545
|
84 virtual int getCompletion() const {
|
Chris@545
|
85 return m_source->getCompletion();
|
Chris@545
|
86 }
|
Chris@545
|
87
|
Chris@545
|
88 protected slots:
|
Chris@545
|
89 void sourceModelChanged();
|
Chris@545
|
90 void sourceModelAboutToBeDeleted();
|
Chris@545
|
91
|
Chris@545
|
92 private:
|
Chris@545
|
93 DenseThreeDimensionalModel *m_source;
|
Chris@545
|
94 mutable EditableDenseThreeDimensionalModel *m_cache;
|
Chris@545
|
95 mutable ResizeableBitset m_coverage;
|
Chris@929
|
96 int m_resolution;
|
Chris@545
|
97
|
Chris@929
|
98 bool haveColumn(int column) const;
|
Chris@929
|
99 void fillColumn(int column) const;
|
Chris@545
|
100 };
|
Chris@545
|
101
|
Chris@545
|
102
|
Chris@545
|
103 #endif
|