annotate layer/Colour3DPlotLayer.h @ 299:5c59c433b358

* Show colour swatch next to layer name in pane (if available) * Fix for incorrect layer name prefix handling (was making some layers appear to have the same model name in cases where the model names differed by the final character only)
author Chris Cannam
date Wed, 05 Sep 2007 15:17:15 +0000
parents cd2492c5fe45
children c0b9eec70639
rev   line source
Chris@58 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@59 4 Sonic Visualiser
Chris@59 5 An audio file viewer and annotation editor.
Chris@59 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@0 8
Chris@59 9 This program is free software; you can redistribute it and/or
Chris@59 10 modify it under the terms of the GNU General Public License as
Chris@59 11 published by the Free Software Foundation; either version 2 of the
Chris@59 12 License, or (at your option) any later version. See the file
Chris@59 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _COLOUR_3D_PLOT_H_
Chris@0 17 #define _COLOUR_3D_PLOT_H_
Chris@0 18
Chris@193 19 #include "SliceableLayer.h"
Chris@0 20
Chris@128 21 #include "data/model/DenseThreeDimensionalModel.h"
Chris@0 22
Chris@0 23 class View;
Chris@0 24 class QPainter;
Chris@0 25 class QImage;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * This is a view that displays dense 3-D data (time, some sort of
Chris@0 29 * binned y-axis range, value) as a colour plot with value mapped to
Chris@0 30 * colour range. Its source is a DenseThreeDimensionalModel.
Chris@0 31 *
Chris@0 32 * This was the original implementation for the spectrogram view, but
Chris@0 33 * it was replaced with a more efficient implementation that derived
Chris@0 34 * the spectrogram itself from a DenseTimeValueModel instead of using
Chris@0 35 * a three-dimensional model. This class is retained in case it
Chris@0 36 * becomes useful, but it will probably need some cleaning up if it's
Chris@0 37 * ever actually used.
Chris@0 38 */
Chris@0 39
Chris@193 40 class Colour3DPlotLayer : public SliceableLayer
Chris@0 41 {
Chris@0 42 Q_OBJECT
Chris@0 43
Chris@0 44 public:
Chris@44 45 Colour3DPlotLayer();
Chris@0 46 ~Colour3DPlotLayer();
Chris@0 47
Chris@156 48 virtual const ZoomConstraint *getZoomConstraint() const {
Chris@156 49 return m_model ? m_model->getZoomConstraint() : 0;
Chris@156 50 }
Chris@0 51 virtual const Model *getModel() const { return m_model; }
Chris@44 52 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@0 53
Chris@44 54 virtual int getVerticalScaleWidth(View *v, QPainter &) const;
Chris@44 55 virtual void paintVerticalScale(View *v, QPainter &paint, QRect rect) const;
Chris@25 56
Chris@44 57 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@25 58
Chris@44 59 virtual bool snapToFeatureFrame(View *v, int &frame,
Chris@28 60 size_t &resolution,
Chris@28 61 SnapType snap) const;
Chris@24 62
Chris@44 63 virtual bool isLayerScrollable(const View *v) const;
Chris@25 64
Chris@287 65 virtual ColourSignificance getLayerColourSignificance() const {
Chris@287 66 return ColourHasMeaningfulValue;
Chris@287 67 }
Chris@183 68
Chris@0 69 void setModel(const DenseThreeDimensionalModel *model);
Chris@0 70
Chris@115 71 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@24 72
Chris@101 73 virtual bool getValueExtents(float &, float &, bool &, QString &) const { return false; }
Chris@0 74
Chris@0 75 virtual PropertyList getProperties() const;
Chris@0 76 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@159 77 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@159 78 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@0 79 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 80 int *min, int *max, int *deflt) const;
Chris@0 81 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@0 82 int value) const;
Chris@0 83 virtual void setProperty(const PropertyName &, int value);
Chris@197 84 virtual void setProperties(const QXmlAttributes &);
Chris@11 85
Chris@197 86 enum ColourScale { LinearScale, LogScale, PlusMinusOneScale };
Chris@159 87
Chris@159 88 void setColourScale(ColourScale);
Chris@159 89 ColourScale getColourScale() const { return m_colourScale; }
Chris@159 90
Chris@197 91 void setColourMap(int map);
Chris@197 92 int getColourMap() const;
Chris@197 93
Chris@197 94 void setNormalizeColumns(bool n);
Chris@197 95 bool getNormalizeColumns() const;
Chris@197 96
Chris@197 97 void setNormalizeVisibleArea(bool n);
Chris@197 98 bool getNormalizeVisibleArea() const;
Chris@197 99
Chris@193 100 virtual const Model *getSliceableModel() const { return m_model; }
Chris@193 101
Chris@197 102 virtual QString toXmlString(QString indent = "",
Chris@197 103 QString extraAttributes = "") const;
Chris@197 104
Chris@0 105 protected slots:
Chris@0 106 void cacheInvalid();
Chris@0 107 void cacheInvalid(size_t startFrame, size_t endFrame);
Chris@0 108
Chris@0 109 protected:
Chris@0 110 const DenseThreeDimensionalModel *m_model; // I do not own this
Chris@0 111
Chris@0 112 mutable QImage *m_cache;
Chris@197 113 mutable size_t m_cacheStart;
Chris@98 114
Chris@159 115 ColourScale m_colourScale;
Chris@197 116 int m_colourMap;
Chris@197 117 bool m_normalizeColumns;
Chris@197 118 bool m_normalizeVisibleArea;
Chris@197 119
Chris@197 120 void getColumn(size_t col, DenseThreeDimensionalModel::Column &) const;
Chris@159 121
Chris@159 122 virtual int getColourScaleWidth(QPainter &) const;
Chris@197 123 virtual void fillCache(size_t firstBin, size_t lastBin) const;
Chris@98 124 virtual void paintDense(View *v, QPainter &paint, QRect rect) const;
Chris@0 125 };
Chris@0 126
Chris@0 127 #endif