Mercurial > hg > svgui
diff layer/SpectrumLayer.h @ 1238:4d0ca1ab4cd0
Some work to make spectrum layers (and slice layers generally) zoomable in the frequency axis. Also fixes a number of view id mixups in SliceLayer which broke offset calculations for the x axis scale.
author | Chris Cannam |
---|---|
date | Tue, 07 Feb 2017 14:55:19 +0000 |
parents | 366ffdf719cd |
children | b7d3bd4ff43b |
line wrap: on
line diff
--- a/layer/SpectrumLayer.h Fri Jan 27 13:19:21 2017 +0000 +++ b/layer/SpectrumLayer.h Tue Feb 07 14:55:19 2017 +0000 @@ -14,8 +14,8 @@ COPYING included with this distribution for more information. */ -#ifndef _SPECTRUM_LAYER_H_ -#define _SPECTRUM_LAYER_H_ +#ifndef SV_SPECTRUM_LAYER_H +#define SV_SPECTRUM_LAYER_H #include "SliceLayer.h" @@ -23,12 +23,15 @@ #include "data/model/DenseTimeValueModel.h" +#include "PianoScale.h" + #include <QColor> #include <QMutex> class FFTModel; -class SpectrumLayer : public SliceLayer +class SpectrumLayer : public SliceLayer, + public PianoScale::HorizontalScaleProvider { Q_OBJECT @@ -64,9 +67,6 @@ virtual void setProperty(const PropertyName &, int value); virtual void setProperties(const QXmlAttributes &); - virtual bool getValueExtents(double &min, double &max, - bool &logarithmic, QString &unit) const; - virtual bool getXScaleValue(const LayerGeometryProvider *v, int x, double &value, QString &unit) const; @@ -96,15 +96,15 @@ virtual void toXml(QTextStream &stream, QString indent = "", QString extraAttributes = "") const; + virtual double getFrequencyForX(const LayerGeometryProvider *, + double x) const override; + virtual double getXForFrequency(const LayerGeometryProvider *, + double freq) const override; + protected slots: void preferenceChanged(PropertyContainer::PropertyName name); protected: - // make this SliceLayer method unavailable to the general public -// virtual void setModel(DenseThreeDimensionalModel *model) { -// SliceLayer::setModel(model); -// } - DenseTimeValueModel *m_originModel; int m_channel; bool m_channelSet; @@ -121,12 +121,6 @@ virtual void getBiasCurve(BiasCurve &) const; BiasCurve m_biasCurve; - virtual double getXForBin(int bin, int totalBins, double w) const; - virtual int getBinForX(double x, int totalBins, double w) const; - - double getFrequencyForX(double x, double w) const; - double getXForFrequency(double freq, double w) const; - int getWindowIncrement() const { if (m_windowHopLevel == 0) return m_windowSize; else if (m_windowHopLevel == 1) return (m_windowSize * 3) / 4;