00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "KDChartPalette.h"
00031 #include <QBrush>
00032 #include <QVector>
00033
00034 #include <KDABLibFakes>
00035
00036 using namespace KDChart;
00037
00038 namespace {
00039
00040 static Palette makeDefaultPalette() {
00041 Palette p;
00042
00043 p.addBrush( Qt::red );
00044 p.addBrush( Qt::green );
00045 p.addBrush( Qt::blue );
00046 p.addBrush( Qt::cyan );
00047 p.addBrush( Qt::magenta );
00048 p.addBrush( Qt::yellow );
00049 p.addBrush( Qt::darkRed );
00050 p.addBrush( Qt::darkGreen );
00051 p.addBrush( Qt::darkBlue );
00052 p.addBrush( Qt::darkCyan );
00053 p.addBrush( Qt::darkMagenta );
00054 p.addBrush( Qt::darkYellow );
00055
00056 return p;
00057 }
00058
00059 static Palette makeSubduedPalette() {
00060 Palette p;
00061
00062 p.addBrush( QColor( 0xe0,0x7f,0x70 ) );
00063 p.addBrush( QColor( 0xe2,0xa5,0x6f ) );
00064 p.addBrush( QColor( 0xe0,0xc9,0x70 ) );
00065 p.addBrush( QColor( 0xd1,0xe0,0x70 ) );
00066 p.addBrush( QColor( 0xac,0xe0,0x70 ) );
00067 p.addBrush( QColor( 0x86,0xe0,0x70 ) );
00068 p.addBrush( QColor( 0x70,0xe0,0x7f ) );
00069 p.addBrush( QColor( 0x70,0xe0,0xa4 ) );
00070 p.addBrush( QColor( 0x70,0xe0,0xc9 ) );
00071 p.addBrush( QColor( 0x70,0xd1,0xe0 ) );
00072 p.addBrush( QColor( 0x70,0xac,0xe0 ) );
00073 p.addBrush( QColor( 0x70,0x86,0xe0 ) );
00074 p.addBrush( QColor( 0x7f,0x70,0xe0 ) );
00075 p.addBrush( QColor( 0xa4,0x70,0xe0 ) );
00076 p.addBrush( QColor( 0xc9,0x70,0xe0 ) );
00077 p.addBrush( QColor( 0xe0,0x70,0xd1 ) );
00078 p.addBrush( QColor( 0xe0,0x70,0xac ) );
00079 p.addBrush( QColor( 0xe0,0x70,0x86 ) );
00080
00081 return p;
00082 }
00083
00084 static Palette makeRainbowPalette() {
00085 Palette p;
00086
00087 p.addBrush( QColor(255, 0,196) );
00088 p.addBrush( QColor(255, 0, 96) );
00089 p.addBrush( QColor(255, 128,64) );
00090 p.addBrush( Qt::yellow );
00091 p.addBrush( Qt::green );
00092 p.addBrush( Qt::cyan );
00093 p.addBrush( QColor( 96, 96,255) );
00094 p.addBrush( QColor(160, 0,255) );
00095 for( int i = 8 ; i < 16 ; ++i )
00096 p.addBrush( p.getBrush(i-8).color().light(), i );
00097
00098 return p;
00099 }
00100
00101 }
00102
00103 #define d d_func()
00104
00105 class Palette::Private
00106 {
00107 public:
00108 explicit Private() {}
00109 ~Private() {}
00110
00111 QVector<QBrush> brushes;
00112 };
00113
00114 const Palette& Palette::defaultPalette()
00115 {
00116 static const Palette palette = makeDefaultPalette();
00117 return palette;
00118 }
00119
00120 const Palette& Palette::subduedPalette()
00121 {
00122 static const Palette palette = makeSubduedPalette();
00123 return palette;
00124 }
00125
00126 const Palette& Palette::rainbowPalette()
00127 {
00128 static const Palette palette = makeRainbowPalette();
00129 return palette;
00130 }
00131
00132 Palette::Palette( QObject *parent )
00133 : QObject( parent ), _d( new Private )
00134 {
00135
00136 }
00137
00138 Palette::~Palette()
00139 {
00140 delete _d; _d = 0;
00141 }
00142
00143
00144
00145 Palette::Palette( const Palette& r )
00146 : QObject(), _d( new Private( *r.d ) )
00147 {
00148 }
00149
00150 Palette& Palette::operator=( const Palette& r )
00151 {
00152 Palette copy( r );
00153 copy.swap( *this );
00154
00155
00156 return *this;
00157 }
00158
00159 bool Palette::isValid() const
00160 {
00161 return d->brushes.size() >= 1;
00162 }
00163
00164 int Palette::size() const
00165 {
00166 return d->brushes.size();
00167 }
00168
00169 void Palette::addBrush( const QBrush& brush, int position )
00170 {
00171 if ( position < 0 || position >= size() ) {
00172 d->brushes.append( brush );
00173 } else {
00174 d->brushes.insert( position, brush );
00175 }
00176 emit changed();
00177 }
00178
00179 QBrush Palette::getBrush( int position ) const
00180 {
00181 if ( !isValid() ) return QBrush();
00182 return d->brushes.at( position % size() );
00183 }
00184
00185 void Palette::removeBrush( int position )
00186 {
00187 if ( position < 0 || position >= size() ) return;
00188 d->brushes.remove( position );
00189 emit changed();
00190 }
00191