00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_COLOR_MAP_H
00011 #define QWT_COLOR_MAP_H
00012
00013 #include <qglobal.h>
00014 #include <qcolor.h>
00015 #if QT_VERSION < 0x040000
00016 #include <qvaluevector.h>
00017 #else
00018 #include <qvector.h>
00019 #endif
00020 #include "qwt_array.h"
00021 #include "qwt_double_interval.h"
00022
00023 #if defined(QWT_TEMPLATEDLL)
00024
00025 template class QWT_EXPORT QwtArray<double>;
00026
00027 #endif
00028
00044 class QWT_EXPORT QwtColorMap
00045 {
00046 public:
00057 enum Format
00058 {
00059 RGB,
00060 Indexed
00061 };
00062
00063 QwtColorMap(Format = QwtColorMap::RGB );
00064 virtual ~QwtColorMap();
00065
00066 inline Format format() const;
00067
00069 virtual QwtColorMap *copy() const = 0;
00070
00077 virtual QRgb rgb(
00078 const QwtDoubleInterval &interval, double value) const = 0;
00079
00086 virtual unsigned char colorIndex(
00087 const QwtDoubleInterval &interval, double value) const = 0;
00088
00089 QColor color(const QwtDoubleInterval &, double value) const;
00090 #if QT_VERSION < 0x040000
00091 virtual QValueVector<QRgb> colorTable(const QwtDoubleInterval &) const;
00092 #else
00093 virtual QVector<QRgb> colorTable(const QwtDoubleInterval &) const;
00094 #endif
00095
00096 private:
00097 Format d_format;
00098 };
00099
00100
00111 class QWT_EXPORT QwtLinearColorMap: public QwtColorMap
00112 {
00113 public:
00118 enum Mode
00119 {
00120 FixedColors,
00121 ScaledColors
00122 };
00123
00124 QwtLinearColorMap(QwtColorMap::Format = QwtColorMap::RGB);
00125 QwtLinearColorMap( const QColor &from, const QColor &to,
00126 QwtColorMap::Format = QwtColorMap::RGB);
00127
00128 QwtLinearColorMap(const QwtLinearColorMap &);
00129
00130 virtual ~QwtLinearColorMap();
00131
00132 QwtLinearColorMap &operator=(const QwtLinearColorMap &);
00133
00134 virtual QwtColorMap *copy() const;
00135
00136 void setMode(Mode);
00137 Mode mode() const;
00138
00139 void setColorInterval(const QColor &color1, const QColor &color2);
00140 void addColorStop(double value, const QColor&);
00141 QwtArray<double> colorStops() const;
00142
00143 QColor color1() const;
00144 QColor color2() const;
00145
00146 virtual QRgb rgb(const QwtDoubleInterval &, double value) const;
00147 virtual unsigned char colorIndex(
00148 const QwtDoubleInterval &, double value) const;
00149
00150 class ColorStops;
00151
00152 private:
00153 class PrivateData;
00154 PrivateData *d_data;
00155 };
00156
00160 class QWT_EXPORT QwtAlphaColorMap: public QwtColorMap
00161 {
00162 public:
00163 QwtAlphaColorMap(const QColor & = QColor(Qt::gray));
00164 QwtAlphaColorMap(const QwtAlphaColorMap &);
00165
00166 virtual ~QwtAlphaColorMap();
00167
00168 QwtAlphaColorMap &operator=(const QwtAlphaColorMap &);
00169
00170 virtual QwtColorMap *copy() const;
00171
00172 void setColor(const QColor &);
00173 QColor color() const;
00174
00175 virtual QRgb rgb(const QwtDoubleInterval &, double value) const;
00176
00177 private:
00178 virtual unsigned char colorIndex(
00179 const QwtDoubleInterval &, double value) const;
00180
00181 class PrivateData;
00182 PrivateData *d_data;
00183 };
00184
00185
00198 inline QColor QwtColorMap::color(
00199 const QwtDoubleInterval &interval, double value) const
00200 {
00201 if ( d_format == RGB )
00202 {
00203 return QColor( rgb(interval, value) );
00204 }
00205 else
00206 {
00207 const unsigned int index = colorIndex(interval, value);
00208 return colorTable(interval)[index];
00209 }
00210 }
00211
00216 inline QwtColorMap::Format QwtColorMap::format() const
00217 {
00218 return d_format;
00219 }
00220
00221 #endif