annotate layer/SliceLayer.h @ 1330:c1f719094c25 zoom

Ensure getFrameForX returns value on zoom blocksize boundary; take advantage of that (this is essentially reverting to the same behaviour as in the default branch, which we should probably have done all along)
author Chris Cannam
date Fri, 21 Sep 2018 11:50:05 +0100
parents 51e6125627fa
children d79e21855aef
rev   line source
Chris@133 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@133 2
Chris@133 3 /*
Chris@133 4 Sonic Visualiser
Chris@133 5 An audio file viewer and annotation editor.
Chris@133 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 QMUL.
Chris@133 8
Chris@133 9 This program is free software; you can redistribute it and/or
Chris@133 10 modify it under the terms of the GNU General Public License as
Chris@133 11 published by the Free Software Foundation; either version 2 of the
Chris@133 12 License, or (at your option) any later version. See the file
Chris@133 13 COPYING included with this distribution for more information.
Chris@133 14 */
Chris@133 15
Chris@1284 16 #ifndef SV_SLICE_LAYER_H
Chris@1284 17 #define SV_SLICE_LAYER_H
Chris@133 18
Chris@287 19 #include "SingleColourLayer.h"
Chris@133 20
Chris@153 21 #include "base/Window.h"
Chris@153 22
Chris@193 23 #include "data/model/DenseThreeDimensionalModel.h"
Chris@133 24
Chris@133 25 #include <QColor>
Chris@133 26
Chris@287 27 class SliceLayer : public SingleColourLayer
Chris@133 28 {
Chris@133 29 Q_OBJECT
Chris@133 30
Chris@133 31 public:
Chris@193 32 SliceLayer();
Chris@193 33 ~SliceLayer();
Chris@133 34
Chris@193 35 virtual const Model *getModel() const { return 0; }
Chris@193 36
Chris@193 37 void setSliceableModel(const Model *model);
Chris@193 38
Chris@916 39 virtual void paint(LayerGeometryProvider *v, QPainter &paint, QRect rect) const;
Chris@133 40
Chris@918 41 virtual QString getFeatureDescription(LayerGeometryProvider *v, QPoint &) const;
Chris@198 42
Chris@918 43 virtual int getVerticalScaleWidth(LayerGeometryProvider *v, bool, QPainter &) const;
Chris@918 44 virtual void paintVerticalScale(LayerGeometryProvider *v, bool, QPainter &paint, QRect rect) const;
Chris@195 45
Chris@287 46 virtual ColourSignificance getLayerColourSignificance() const {
Chris@287 47 return ColourAndBackgroundSignificant;
Chris@287 48 }
Chris@287 49
Chris@1281 50 virtual bool hasLightBackground() const;
Chris@1281 51
Chris@153 52 virtual PropertyList getProperties() const;
Chris@153 53 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@335 54 virtual QString getPropertyIconName(const PropertyName &) const;
Chris@153 55 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@153 56 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@153 57 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 58 int *min, int *max, int *deflt) const;
Chris@153 59 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@1266 60 int value) const;
Chris@167 61 virtual RangeMapper *getNewPropertyRangeMapper(const PropertyName &) const;
Chris@153 62 virtual void setProperty(const PropertyName &, int value);
Chris@133 63 virtual void setProperties(const QXmlAttributes &);
Chris@133 64
Chris@905 65 virtual bool getValueExtents(double &min, double &max,
Chris@133 66 bool &logarithmic, QString &unit) const;
Chris@133 67
Chris@1238 68 virtual bool getDisplayExtents(double &min, double &max) const;
Chris@1238 69 virtual bool setDisplayExtents(double min, double max);
Chris@1238 70
Chris@1238 71 virtual int getVerticalZoomSteps(int &defaultStep) const;
Chris@1238 72 virtual int getCurrentVerticalZoomStep() const;
Chris@1238 73 virtual void setVerticalZoomStep(int);
Chris@1238 74 virtual RangeMapper *getNewVerticalZoomRangeMapper() const;
Chris@1238 75
Chris@217 76 virtual bool hasTimeXAxis() const { return false; }
Chris@217 77
Chris@918 78 virtual bool isLayerScrollable(const LayerGeometryProvider *) const { return false; }
Chris@133 79
Chris@538 80 enum EnergyScale { LinearScale, MeterScale, dBScale, AbsoluteScale };
Chris@153 81
Chris@193 82 enum SamplingMode { NearestSample, SampleMean, SamplePeak };
Chris@153 83
Chris@197 84 enum PlotStyle { PlotLines, PlotSteps, PlotBlocks, PlotFilledBlocks };
Chris@153 85
Chris@193 86 enum BinScale { LinearBins, LogBins, InvertedLogBins };
Chris@153 87
Chris@1281 88 bool usesSolidColour() const { return m_plotStyle == PlotFilledBlocks; }
Chris@1281 89
Chris@197 90 void setFillColourMap(int);
Chris@197 91 int getFillColourMap() const { return m_colourMap; }
Chris@197 92
Chris@153 93 void setEnergyScale(EnergyScale);
Chris@153 94 EnergyScale getEnergyScale() const { return m_energyScale; }
Chris@153 95
Chris@193 96 void setSamplingMode(SamplingMode);
Chris@193 97 SamplingMode getSamplingMode() const { return m_samplingMode; }
Chris@153 98
Chris@193 99 void setPlotStyle(PlotStyle style);
Chris@193 100 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@193 101
Chris@193 102 void setBinScale(BinScale scale);
Chris@193 103 BinScale getBinScale() const { return m_binScale; }
Chris@153 104
Chris@284 105 void setThreshold(float);
Chris@905 106 float getThreshold() const { return m_threshold; }
Chris@284 107
Chris@153 108 void setGain(float gain);
Chris@153 109 float getGain() const;
Chris@153 110
Chris@153 111 void setNormalize(bool n);
Chris@153 112 bool getNormalize() const;
Chris@153 113
Chris@316 114 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 115 QString extraAttributes = "") const;
Chris@153 116
Chris@193 117 public slots:
Chris@193 118 void sliceableModelReplaced(const Model *, const Model *);
Chris@193 119 void modelAboutToBeDeleted(Model *);
Chris@133 120
Chris@133 121 protected:
Chris@1238 122 virtual double getXForBin(const LayerGeometryProvider *, double bin) const;
Chris@1238 123 virtual double getBinForX(const LayerGeometryProvider *, double x) const;
Chris@274 124
Chris@1238 125 virtual double getYForValue(const LayerGeometryProvider *v, double value, double &norm) const;
Chris@1238 126 virtual double getValueForY(const LayerGeometryProvider *v, double y) const;
Chris@198 127
Chris@918 128 virtual QString getFeatureDescriptionAux(LayerGeometryProvider *v, QPoint &,
Chris@805 129 bool includeBinDescription,
Chris@805 130 int &minbin, int &maxbin,
Chris@805 131 int &range) const;
Chris@199 132
Chris@254 133 // This curve may, of course, be flat -- the spectrum uses it for
Chris@254 134 // normalizing the fft results by the fft size (with 1/(fftsize/2)
Chris@254 135 // in each bin).
Chris@254 136 typedef std::vector<float> BiasCurve;
Chris@254 137 virtual void getBiasCurve(BiasCurve &) const { return; }
Chris@254 138
Chris@284 139 virtual float getThresholdDb() const;
Chris@284 140
Chris@287 141 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 142
Chris@193 143 const DenseThreeDimensionalModel *m_sliceableModel;
Chris@197 144 int m_colourMap;
Chris@193 145 EnergyScale m_energyScale;
Chris@193 146 SamplingMode m_samplingMode;
Chris@193 147 PlotStyle m_plotStyle;
Chris@193 148 BinScale m_binScale;
Chris@193 149 bool m_normalize;
Chris@284 150 float m_threshold;
Chris@284 151 float m_initialThreshold;
Chris@193 152 float m_gain;
Chris@1238 153 int m_minbin;
Chris@1238 154 int m_maxbin;
Chris@195 155 mutable std::vector<int> m_scalePoints;
Chris@1284 156 mutable int m_scalePaintHeight;
Chris@1238 157 mutable std::map<int, int> m_xorigins; // LayerGeometryProvider id -> x
Chris@1238 158 mutable std::map<int, int> m_yorigins; // LayerGeometryProvider id -> y
Chris@1238 159 mutable std::map<int, int> m_heights; // LayerGeometryProvider id -> h
Chris@906 160 mutable sv_frame_t m_currentf0;
Chris@906 161 mutable sv_frame_t m_currentf1;
Chris@198 162 mutable std::vector<float> m_values;
Chris@133 163 };
Chris@133 164
Chris@133 165 #endif