diff layer/SpectrumLayer.h @ 153:aaa3a53dbb10

* Some work on SpectrumLayer properties etc
author Chris Cannam
date Wed, 27 Sep 2006 14:56:31 +0000
parents 9e6b3e239b9d
children 53b9c7656798
line wrap: on
line diff
--- a/layer/SpectrumLayer.h	Mon Sep 25 12:05:41 2006 +0000
+++ b/layer/SpectrumLayer.h	Wed Sep 27 14:56:31 2006 +0000
@@ -19,6 +19,8 @@
 
 #include "Layer.h"
 
+#include "base/Window.h"
+
 #include "data/model/DenseTimeValueModel.h"
 
 #include <QColor>
@@ -37,6 +39,15 @@
     virtual const Model *getModel() const { return m_model; }
     virtual void paint(View *v, QPainter &paint, QRect rect) const;
 
+    virtual PropertyList getProperties() const;
+    virtual QString getPropertyLabel(const PropertyName &) const;
+    virtual PropertyType getPropertyType(const PropertyName &) const;
+    virtual QString getPropertyGroupName(const PropertyName &) const;
+    virtual int getPropertyRangeAndValue(const PropertyName &,
+					   int *min, int *max) const;
+    virtual QString getPropertyValueLabel(const PropertyName &,
+					  int value) const;
+    virtual void setProperty(const PropertyName &, int value);
     virtual void setProperties(const QXmlAttributes &);
 
     virtual bool getValueExtents(float &min, float &max,
@@ -44,12 +55,64 @@
 
     virtual bool isLayerScrollable(const View *v) const { return false; }
 
-    virtual QString getPropertyLabel(const PropertyName &) const { return ""; }
+    enum ChannelMode { SeparateChannels, MixChannels, OverlayChannels };
+
+    void setChannelMode(ChannelMode);
+    ChannelMode getChannelCount() const { return m_channelMode; }
+
+    void setChannel(int);
+    int getChannel() const { return m_channel; }
+
+    enum EnergyScale { LinearScale, MeterScale, dBScale };
+
+    void setBaseColour(QColor);
+    QColor getBaseColour() const { return m_colour; }
+
+    void setEnergyScale(EnergyScale);
+    EnergyScale getEnergyScale() const { return m_energyScale; }
+
+    void setWindowSize(size_t);
+    size_t getWindowSize() const { return m_windowSize; }
+    
+    void setWindowHopLevel(size_t level);
+    size_t getWindowHopLevel() const { return m_windowHopLevel; }
+
+    void setWindowType(WindowType type);
+    WindowType getWindowType() const { return m_windowType; }
+
+    void setGain(float gain);
+    float getGain() const;
+
+    void setNormalize(bool n);
+    bool getNormalize() const;
+
+    virtual QString toXmlString(QString indent = "",
+				QString extraAttributes = "") const;
+
+protected slots:
+    void preferenceChanged(PropertyContainer::PropertyName name);
 
 protected:
-    DenseTimeValueModel *m_model;
-    FFTModel *m_fft;
-    QColor m_colour;
+    DenseTimeValueModel    *m_model;
+    std::vector<FFTModel *> m_fft;
+    ChannelMode             m_channelMode;
+    int                     m_channel;
+    bool                    m_channelSet;
+    QColor                  m_colour;
+    EnergyScale             m_energyScale;
+    bool                    m_normalize;
+    float                   m_gain;
+    size_t                  m_windowSize;
+    WindowType              m_windowType;
+    size_t                  m_windowHopLevel;
+
+    void setupFFTs();
+
+    size_t getWindowIncrement() const {
+        if (m_windowHopLevel == 0) return m_windowSize;
+        else if (m_windowHopLevel == 1) return (m_windowSize * 3) / 4;
+        else return m_windowSize / (1 << (m_windowHopLevel - 1));
+    }
 };
 
 #endif