annotate layer/SliceLayer.h @ 349:369a197737c7

* Various fixes to object lifetime management, particularly in the spectrum layer and for notification of main model deletion. The main purpose of this is to improve the behaviour of the spectrum, but I think it may also help with #1840922 Various crashes in Layer Summary window.
author Chris Cannam
date Wed, 23 Jan 2008 15:43:27 +0000
parents 2f83b6e3b8ca
children 3bf74851d93e
rev   line source
Chris@133 1
Chris@133 2 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@133 3
Chris@133 4 /*
Chris@133 5 Sonic Visualiser
Chris@133 6 An audio file viewer and annotation editor.
Chris@133 7 Centre for Digital Music, Queen Mary, University of London.
Chris@182 8 This file copyright 2006 QMUL.
Chris@133 9
Chris@133 10 This program is free software; you can redistribute it and/or
Chris@133 11 modify it under the terms of the GNU General Public License as
Chris@133 12 published by the Free Software Foundation; either version 2 of the
Chris@133 13 License, or (at your option) any later version. See the file
Chris@133 14 COPYING included with this distribution for more information.
Chris@133 15 */
Chris@133 16
Chris@193 17 #ifndef _SLICE_LAYER_H_
Chris@193 18 #define _SLICE_LAYER_H_
Chris@133 19
Chris@287 20 #include "SingleColourLayer.h"
Chris@133 21
Chris@153 22 #include "base/Window.h"
Chris@153 23
Chris@193 24 #include "data/model/DenseThreeDimensionalModel.h"
Chris@133 25
Chris@133 26 #include <QColor>
Chris@133 27
Chris@287 28 class SliceLayer : public SingleColourLayer
Chris@133 29 {
Chris@133 30 Q_OBJECT
Chris@133 31
Chris@133 32 public:
Chris@193 33 SliceLayer();
Chris@193 34 ~SliceLayer();
Chris@133 35
Chris@193 36 // virtual void setModel(const Model *model);
Chris@193 37 // virtual const Model *getModel() const { return m_model; }
Chris@193 38 virtual const Model *getModel() const { return 0; }
Chris@193 39
Chris@193 40 void setSliceableModel(const Model *model);
Chris@193 41
Chris@133 42 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@133 43
Chris@198 44 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@198 45
Chris@195 46 virtual int getVerticalScaleWidth(View *v, QPainter &) const;
Chris@195 47 virtual void paintVerticalScale(View *v, QPainter &paint, QRect rect) const;
Chris@195 48
Chris@287 49 virtual ColourSignificance getLayerColourSignificance() const {
Chris@287 50 return ColourAndBackgroundSignificant;
Chris@287 51 }
Chris@287 52
Chris@153 53 virtual PropertyList getProperties() const;
Chris@153 54 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@335 55 virtual QString getPropertyIconName(const PropertyName &) const;
Chris@153 56 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@153 57 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@153 58 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 59 int *min, int *max, int *deflt) const;
Chris@153 60 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@153 61 int value) const;
Chris@167 62 virtual RangeMapper *getNewPropertyRangeMapper(const PropertyName &) const;
Chris@153 63 virtual void setProperty(const PropertyName &, int value);
Chris@133 64 virtual void setProperties(const QXmlAttributes &);
Chris@133 65
Chris@133 66 virtual bool getValueExtents(float &min, float &max,
Chris@133 67 bool &logarithmic, QString &unit) const;
Chris@133 68
Chris@217 69 virtual bool hasTimeXAxis() const { return false; }
Chris@217 70
Chris@248 71 virtual bool isLayerScrollable(const View *) const { return false; }
Chris@133 72
Chris@193 73 enum EnergyScale { LinearScale, MeterScale, dBScale };
Chris@153 74
Chris@193 75 enum SamplingMode { NearestSample, SampleMean, SamplePeak };
Chris@153 76
Chris@197 77 enum PlotStyle { PlotLines, PlotSteps, PlotBlocks, PlotFilledBlocks };
Chris@153 78
Chris@193 79 enum BinScale { LinearBins, LogBins, InvertedLogBins };
Chris@153 80
Chris@197 81 void setFillColourMap(int);
Chris@197 82 int getFillColourMap() const { return m_colourMap; }
Chris@197 83
Chris@153 84 void setEnergyScale(EnergyScale);
Chris@153 85 EnergyScale getEnergyScale() const { return m_energyScale; }
Chris@153 86
Chris@193 87 void setSamplingMode(SamplingMode);
Chris@193 88 SamplingMode getSamplingMode() const { return m_samplingMode; }
Chris@153 89
Chris@193 90 void setPlotStyle(PlotStyle style);
Chris@193 91 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@193 92
Chris@193 93 void setBinScale(BinScale scale);
Chris@193 94 BinScale getBinScale() const { return m_binScale; }
Chris@153 95
Chris@284 96 void setThreshold(float);
Chris@284 97 int getThreshold() const { return m_threshold; }
Chris@284 98
Chris@153 99 void setGain(float gain);
Chris@153 100 float getGain() const;
Chris@153 101
Chris@153 102 void setNormalize(bool n);
Chris@153 103 bool getNormalize() const;
Chris@153 104
Chris@316 105 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 106 QString extraAttributes = "") const;
Chris@153 107
Chris@193 108 public slots:
Chris@193 109 void sliceableModelReplaced(const Model *, const Model *);
Chris@193 110 void modelAboutToBeDeleted(Model *);
Chris@133 111
Chris@133 112 protected:
Chris@265 113 virtual float getXForBin(int bin, int totalBins, float w) const;
Chris@265 114 virtual int getBinForX(float x, int totalBins, float w) const;
Chris@274 115
Chris@274 116 virtual float getYForValue(float value, const View *v, float &norm) const;
Chris@274 117 virtual float getValueForY(float y, const View *v) const;
Chris@198 118
Chris@199 119 virtual QString getFeatureDescription(View *v, QPoint &,
Chris@199 120 bool includeBinDescription,
Chris@199 121 int &minbin, int &maxbin,
Chris@199 122 int &range) const;
Chris@199 123
Chris@254 124 // This curve may, of course, be flat -- the spectrum uses it for
Chris@254 125 // normalizing the fft results by the fft size (with 1/(fftsize/2)
Chris@254 126 // in each bin).
Chris@254 127 typedef std::vector<float> BiasCurve;
Chris@254 128 virtual void getBiasCurve(BiasCurve &) const { return; }
Chris@254 129
Chris@284 130 virtual float getThresholdDb() const;
Chris@284 131
Chris@287 132 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 133
Chris@193 134 const DenseThreeDimensionalModel *m_sliceableModel;
Chris@197 135 int m_colourMap;
Chris@193 136 EnergyScale m_energyScale;
Chris@193 137 SamplingMode m_samplingMode;
Chris@193 138 PlotStyle m_plotStyle;
Chris@193 139 BinScale m_binScale;
Chris@193 140 bool m_normalize;
Chris@284 141 float m_threshold;
Chris@284 142 float m_initialThreshold;
Chris@193 143 float m_gain;
Chris@195 144 mutable std::vector<int> m_scalePoints;
Chris@267 145 mutable std::map<const View *, int> m_xorigins;
Chris@274 146 mutable std::map<const View *, int> m_yorigins;
Chris@274 147 mutable std::map<const View *, int> m_heights;
Chris@198 148 mutable size_t m_currentf0;
Chris@198 149 mutable size_t m_currentf1;
Chris@198 150 mutable std::vector<float> m_values;
Chris@133 151 };
Chris@133 152
Chris@133 153 #endif