Chris@545: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@545: Chris@545: /* Chris@545: Sonic Visualiser Chris@545: An audio file viewer and annotation editor. Chris@545: Centre for Digital Music, Queen Mary, University of London. Chris@545: This file copyright 2009 QMUL. Chris@545: Chris@545: This program is free software; you can redistribute it and/or Chris@545: modify it under the terms of the GNU General Public License as Chris@545: published by the Free Software Foundation; either version 2 of the Chris@545: License, or (at your option) any later version. See the file Chris@545: COPYING included with this distribution for more information. Chris@545: */ Chris@545: Chris@545: #ifndef _DENSE_3D_MODEL_PEAK_CACHE_H_ Chris@545: #define _DENSE_3D_MODEL_PEAK_CACHE_H_ Chris@545: Chris@545: #include "DenseThreeDimensionalModel.h" Chris@545: #include "EditableDenseThreeDimensionalModel.h" Chris@545: #include "base/ResizeableBitset.h" Chris@545: Chris@545: class Dense3DModelPeakCache : public DenseThreeDimensionalModel Chris@545: { Chris@546: Q_OBJECT Chris@546: Chris@545: public: Chris@545: Dense3DModelPeakCache(DenseThreeDimensionalModel *source, Chris@545: size_t columnsPerPeak); Chris@545: ~Dense3DModelPeakCache(); Chris@545: Chris@546: virtual bool isOK() const { Chris@546: return m_source && m_source->isOK(); Chris@546: } Chris@546: Chris@546: virtual size_t getSampleRate() const { Chris@546: return m_source->getSampleRate(); Chris@546: } Chris@546: Chris@546: virtual size_t getStartFrame() const { Chris@546: return m_source->getStartFrame(); Chris@546: } Chris@546: Chris@546: virtual size_t getEndFrame() const { Chris@546: return m_source->getEndFrame(); Chris@546: } Chris@546: Chris@546: virtual Model *clone() const { Chris@546: return new Dense3DModelPeakCache(m_source, m_resolution); Chris@546: } Chris@546: Chris@545: virtual size_t getResolution() const { Chris@545: return m_source->getResolution() * m_resolution; Chris@545: } Chris@545: Chris@545: virtual size_t getWidth() const { Chris@545: return m_source->getWidth() / m_resolution + 1; Chris@545: } Chris@545: Chris@545: virtual size_t getHeight() const { Chris@545: return m_source->getHeight(); Chris@545: } Chris@545: Chris@545: virtual float getMinimumLevel() const { Chris@545: return m_source->getMinimumLevel(); Chris@545: } Chris@545: Chris@545: virtual float getMaximumLevel() const { Chris@545: return m_source->getMaximumLevel(); Chris@545: } Chris@545: Chris@545: virtual bool isColumnAvailable(size_t column) const; Chris@545: Chris@545: virtual Column getColumn(size_t column) const; Chris@545: Chris@545: virtual float getValueAt(size_t column, size_t n) const; Chris@545: Chris@545: virtual QString getBinName(size_t n) const { Chris@545: return m_source->getBinName(n); Chris@545: } Chris@545: Chris@545: virtual bool shouldUseLogValueScale() const { Chris@545: return m_source->shouldUseLogValueScale(); Chris@545: } Chris@545: Chris@545: QString getTypeName() const { return tr("Dense 3-D Peak Cache"); } Chris@545: Chris@545: virtual int getCompletion() const { Chris@545: return m_source->getCompletion(); Chris@545: } Chris@545: Chris@545: protected slots: Chris@545: void sourceModelChanged(); Chris@545: void sourceModelAboutToBeDeleted(); Chris@545: Chris@545: private: Chris@545: DenseThreeDimensionalModel *m_source; Chris@545: mutable EditableDenseThreeDimensionalModel *m_cache; Chris@545: mutable ResizeableBitset m_coverage; Chris@545: size_t m_resolution; Chris@545: Chris@545: bool haveColumn(size_t column) const; Chris@545: void fillColumn(size_t column) const; Chris@545: }; Chris@545: Chris@545: Chris@545: #endif