File indexing completed on 2024-05-19 04:21:48

0001 /**
0002  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
0003  *
0004  * This file is part of the KD Chart library.
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include "datasetsettings.h"
0010 #include "ui_datasetsettings.h"
0011 
0012 #include <KChartAbstractCoordinatePlane>
0013 #include <KChartChart>
0014 
0015 #include <QColorDialog>
0016 #include <QFileDialog>
0017 
0018 #include <QStyleFactory>
0019 
0020 #include <QImage>
0021 
0022 #include <QObject>
0023 
0024 #include <QDebug>
0025 
0026 #include "gradientdialog.h"
0027 
0028 using namespace KChart;
0029 
0030 class DatasetSettings::Private : public QObject
0031 {
0032     Q_OBJECT
0033 public:
0034     Private( Chart *chart, DatasetSettings *q, QObject *parent );
0035     ~Private() override;
0036 
0037     Ui::DatasetSettings *ui;
0038     int m_dataset;
0039     int m_datasetCount;
0040     KChart::Chart *m_chart;
0041     DatasetSettings *qq;
0042 public Q_SLOTS:
0043     void changeColor();
0044     void changeOutline();
0045 };
0046 
0047 DatasetSettings::Private::Private( Chart *chart, DatasetSettings *q, QObject *parent )
0048     : QObject( parent )
0049     , ui( new Ui::DatasetSettings )
0050     , m_dataset( 0 )
0051     , m_datasetCount( 0 )
0052     , m_chart( chart )
0053     , qq( q )
0054 {
0055 
0056 }
0057 
0058 DatasetSettings::Private::~Private()
0059 {
0060     delete ui;
0061 }
0062 
0063 void DatasetSettings::Private::changeColor()
0064 {
0065     const int index = ui->datasetSelector->currentIndex();
0066     if ( ui->Color->isChecked() )
0067     {
0068         QBrush setBrush = m_chart->coordinatePlane()->diagram()->brush( index );
0069         const QColor color = QColorDialog::getColor( setBrush.color(), qq, tr( "Choose new color" ) );
0070         if ( !color.isValid() )
0071             return;
0072         m_chart->coordinatePlane()->diagram()->setBrush( index, color );
0073         QPalette palette = ui->colorDisplay->palette();
0074         palette.setBrush( QPalette::Button, color );
0075         ui->colorDisplay->setPalette( palette );
0076     }
0077     else if ( ui->textureBtn->isChecked() )
0078     {
0079         //QBrush setBrush = m_chart->coordinatePlane()->diagram()->brush( index );
0080         QImage texture;
0081 
0082         const QString filename = QFileDialog::getOpenFileName( qq, tr( "Choose Texture" ), QString(), tr( "Images (*.png *.xpm *.jpg)" ) );
0083         if ( filename.isEmpty() )
0084             return;
0085         texture = QImage( filename );
0086         m_chart->coordinatePlane()->diagram()->setBrush( index, texture );
0087         QPalette palette = ui->colorDisplay->palette();
0088         palette.setBrush( QPalette::Button, QBrush( texture ) );
0089         ui->colorDisplay->setPalette( palette );
0090     }
0091     else
0092     {
0093         QBrush setBrush = m_chart->coordinatePlane()->diagram()->brush( index );
0094         QGradient grad;
0095         QLinearGradient lGrad;
0096         lGrad.setColorAt( 0, Qt::black );
0097         lGrad.setColorAt( 1, setBrush.color() );
0098         grad = lGrad;
0099 
0100         if ( setBrush.gradient() )
0101             grad = *setBrush.gradient();
0102         const QGradient &color = GradientDialog::getGradient( grad, qq, tr( "Choose new color" ) );
0103         m_chart->coordinatePlane()->diagram()->setBrush( index, color );
0104         QPalette palette = ui->colorDisplay->palette();
0105         palette.setBrush( QPalette::Button, QBrush( color ) );
0106         ui->colorDisplay->setPalette( palette );
0107     }
0108 }
0109 
0110 void DatasetSettings::Private::changeOutline()
0111 {
0112     const int index = ui->datasetSelector->currentIndex();
0113     if ( ui->Color->isChecked() )
0114     {
0115         QPen pen = m_chart->coordinatePlane()->diagram()->pen( index );
0116         const QColor color = QColorDialog::getColor( pen.color(), qq, tr( "Choose new color" ) );
0117         if ( !color.isValid() )
0118             return;
0119         pen.setColor( color );
0120         m_chart->coordinatePlane()->diagram()->setPen( index, pen );
0121         QPalette palette = ui->outlineBtn->palette();
0122         palette.setBrush( QPalette::Button, color );
0123         ui->outlineBtn->setPalette( palette );
0124     }
0125 }
0126 
0127 DatasetSettings::DatasetSettings( Chart *chart, QWidget *parent )
0128     : QWidget( parent )
0129     , d( new Private( chart, this, this ) )
0130 {
0131     d->ui->setupUi(this);
0132 #ifdef Q_OS_LINUX
0133     d->ui->colorDisplay->setStyle( QStyleFactory::create( QStringLiteral( "cleanlooks" ) ) );
0134     d->ui->outlineBtn->setStyle( QStyleFactory::create( QStringLiteral( "cleanlooks" ) ) );
0135 #endif
0136     connect( d->ui->datasetSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChanged(int)) );
0137     connect( d->ui->colorDisplay, SIGNAL(clicked()), d, SLOT(changeColor()) );
0138     connect( d->ui->outlineBtn, SIGNAL(clicked()), d, SLOT(changeOutline()) );
0139 }
0140 
0141 DatasetSettings::~DatasetSettings()
0142 {
0143     delete d;
0144 }
0145 
0146 int DatasetSettings::datasetCount() const
0147 {
0148     return d->m_datasetCount;
0149 }
0150 void DatasetSettings::setDatasetCount( int value )
0151 {
0152     if ( d->m_datasetCount != value )
0153     {
0154         d->m_datasetCount = value;
0155         QStringList list;
0156         for ( int i = 0; i < value; ++i )
0157         {
0158             list << tr( "Dataset %1" ).arg( i );
0159         }
0160         d->ui->datasetSelector->clear();
0161         d->ui->datasetSelector->addItems( list );
0162         Q_EMIT datasetCountChanged();
0163     }
0164 }
0165 
0166 void DatasetSettings::indexChanged( int index )
0167 {
0168     if ( d->m_chart && index >= 0 )
0169     {
0170         const QBrush setBrush = d->m_chart->coordinatePlane()->diagram()->brush( index );
0171         QPalette palette = d->ui->colorDisplay->palette();
0172         if ( setBrush.gradient() )
0173             d->ui->radioButton_2->setChecked( true );
0174         else if ( !setBrush.textureImage().isNull() )
0175             d->ui->textureBtn->setChecked( true );
0176         else
0177             d->ui->Color->setChecked( true );
0178         palette.setBrush( QPalette::Button, setBrush );
0179         d->ui->colorDisplay->setPalette( palette );
0180         const QPen pen = d->m_chart->coordinatePlane()->diagram()->pen( index );
0181         QPalette penPalette = d->ui->outlineBtn->palette();
0182         penPalette.setBrush( QPalette::Button, pen.color() );
0183         d->ui->outlineBtn->setPalette( penPalette );
0184     }
0185 }
0186 
0187 void DatasetSettings::diagramTypeChanged()
0188 {
0189 
0190 }
0191 
0192 #include "datasetsettings.moc"