00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_COLOR_MAP_H
00011 #define QWT_COLOR_MAP_H
00012
00013 #include "qwt_global.h"
00014 #include "qwt_interval.h"
00015 #include <qcolor.h>
00016 #include <qvector.h>
00017
00033 class QWT_EXPORT QwtColorMap
00034 {
00035 public:
00046 enum Format
00047 {
00048 RGB,
00049 Indexed
00050 };
00051
00052 QwtColorMap( Format = QwtColorMap::RGB );
00053 virtual ~QwtColorMap();
00054
00055 Format format() const;
00056
00063 virtual QRgb rgb( const QwtInterval &interval,
00064 double value ) const = 0;
00065
00072 virtual unsigned char colorIndex(
00073 const QwtInterval &interval, double value ) const = 0;
00074
00075 QColor color( const QwtInterval &, double value ) const;
00076 virtual QVector<QRgb> colorTable( const QwtInterval & ) const;
00077
00078 private:
00079 Format d_format;
00080 };
00081
00092 class QWT_EXPORT QwtLinearColorMap: public QwtColorMap
00093 {
00094 public:
00099 enum Mode
00100 {
00101 FixedColors,
00102 ScaledColors
00103 };
00104
00105 QwtLinearColorMap( QwtColorMap::Format = QwtColorMap::RGB );
00106 QwtLinearColorMap( const QColor &from, const QColor &to,
00107 QwtColorMap::Format = QwtColorMap::RGB );
00108
00109 virtual ~QwtLinearColorMap();
00110
00111 void setMode( Mode );
00112 Mode mode() const;
00113
00114 void setColorInterval( const QColor &color1, const QColor &color2 );
00115 void addColorStop( double value, const QColor& );
00116 QVector<double> colorStops() const;
00117
00118 QColor color1() const;
00119 QColor color2() const;
00120
00121 virtual QRgb rgb( const QwtInterval &, double value ) const;
00122 virtual unsigned char colorIndex(
00123 const QwtInterval &, double value ) const;
00124
00125 class ColorStops;
00126
00127 private:
00128
00129 QwtLinearColorMap( const QwtLinearColorMap & );
00130 QwtLinearColorMap &operator=( const QwtLinearColorMap & );
00131
00132 class PrivateData;
00133 PrivateData *d_data;
00134 };
00135
00139 class QWT_EXPORT QwtAlphaColorMap: public QwtColorMap
00140 {
00141 public:
00142 QwtAlphaColorMap( const QColor & = QColor( Qt::gray ) );
00143 virtual ~QwtAlphaColorMap();
00144
00145 void setColor( const QColor & );
00146 QColor color() const;
00147
00148 virtual QRgb rgb( const QwtInterval &, double value ) const;
00149
00150 private:
00151 QwtAlphaColorMap( const QwtAlphaColorMap & );
00152 QwtAlphaColorMap &operator=( const QwtAlphaColorMap & );
00153
00154 virtual unsigned char colorIndex(
00155 const QwtInterval &, double value ) const;
00156
00157 class PrivateData;
00158 PrivateData *d_data;
00159 };
00160
00161
00174 inline QColor QwtColorMap::color(
00175 const QwtInterval &interval, double value ) const
00176 {
00177 if ( d_format == RGB )
00178 {
00179 return QColor( rgb( interval, value ) );
00180 }
00181 else
00182 {
00183 const unsigned int index = colorIndex( interval, value );
00184 return colorTable( interval )[index];
00185 }
00186 }
00187
00192 inline QwtColorMap::Format QwtColorMap::format() const
00193 {
00194 return d_format;
00195 }
00196
00197 #endif