File indexing completed on 2024-05-12 04:20:32

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 <KChartDiagramObserver.h>
0010 
0011 #include <KChartAbstractDiagram.h>
0012 #include <KChartAttributesModel.h>
0013 #include "KChartMath_p.h"
0014 
0015 #include <QDebug>
0016 
0017 using namespace KChart;
0018 
0019 DiagramObserver::DiagramObserver( AbstractDiagram * diagram, QObject* parent )
0020     : QObject( parent ), m_diagram( diagram )
0021 {
0022     if ( m_diagram ) {
0023         connect( m_diagram, SIGNAL(destroyed(QObject*)), SLOT(slotDestroyed(QObject*)));
0024         connect( m_diagram, SIGNAL(aboutToBeDestroyed()), SLOT(slotAboutToBeDestroyed()));
0025         connect( m_diagram, SIGNAL(modelsChanged()), SLOT(slotModelsChanged()));
0026     }
0027     init();
0028 }
0029 
0030 DiagramObserver::~DiagramObserver()
0031 {
0032 }
0033 
0034 const AbstractDiagram* DiagramObserver::diagram() const
0035 {
0036     return m_diagram;
0037 }
0038 
0039 AbstractDiagram* DiagramObserver::diagram()
0040 {
0041     return m_diagram;
0042 }
0043 
0044 
0045 void DiagramObserver::init()
0046 {
0047     if ( !m_diagram )
0048         return;
0049 
0050     if ( m_model )
0051         disconnect(m_model);
0052 
0053     if ( m_attributesmodel )
0054         disconnect(m_attributesmodel);
0055 
0056     const bool con = connect( m_diagram, SIGNAL(viewportCoordinateSystemChanged()), this, SLOT(slotDataChanged()) );
0057     Q_ASSERT( con );
0058     Q_UNUSED( con )
0059     connect( m_diagram, SIGNAL(dataHidden()), SLOT(slotDataHidden()) );
0060 
0061     if ( m_diagram->model() ) {
0062         connect( m_diagram->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
0063                  SLOT(slotDataChanged(QModelIndex,QModelIndex)));
0064         connect( m_diagram->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
0065                  SLOT(slotDataChanged()));
0066         connect( m_diagram->model(), SIGNAL(columnsInserted(QModelIndex,int,int)),
0067                  SLOT(slotDataChanged()));
0068         connect( m_diagram->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
0069                  SLOT(slotDataChanged()));
0070         connect( m_diagram->model(), SIGNAL(columnsRemoved(QModelIndex,int,int)),
0071                  SLOT(slotDataChanged()));
0072         connect( m_diagram->model(), SIGNAL(modelReset()),
0073                  SLOT(slotDataChanged()));
0074         connect( m_diagram->model(), SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
0075                  SLOT(slotHeaderDataChanged(Qt::Orientation,int,int)));
0076     }
0077 
0078     if ( m_diagram->attributesModel() )
0079         connect( m_diagram->attributesModel(), SIGNAL(attributesChanged(QModelIndex,QModelIndex)),
0080                  SLOT(slotAttributesChanged(QModelIndex,QModelIndex)));
0081     m_model = m_diagram->model();
0082     m_attributesmodel = m_diagram->attributesModel();
0083 }
0084 
0085 
0086 void DiagramObserver::slotDestroyed(QObject*)
0087 {
0088     //qDebug() << this << "emits signal\n"
0089     //        "    Q_EMIT diagramDestroyed(" <<  m_diagram << ")";
0090     AbstractDiagram* diag = m_diagram;
0091     disconnect( m_diagram, nullptr, this, nullptr);
0092     m_diagram = nullptr;
0093     Q_EMIT diagramDestroyed( diag );
0094 }
0095 
0096 void DiagramObserver::slotAboutToBeDestroyed()
0097 {
0098     Q_EMIT diagramAboutToBeDestroyed( m_diagram );
0099 }
0100 
0101 void DiagramObserver::slotModelsChanged()
0102 {
0103     init();
0104     slotDataChanged();
0105     slotAttributesChanged();
0106 }
0107 
0108 void DiagramObserver::slotHeaderDataChanged(Qt::Orientation,int,int)
0109 {
0110     //qDebug() << "DiagramObserver::slotHeaderDataChanged()";
0111     Q_EMIT diagramDataChanged( m_diagram );
0112 }
0113 
0114 void DiagramObserver::slotDataChanged(QModelIndex,QModelIndex)
0115 {
0116     slotDataChanged();
0117 }
0118 
0119 void DiagramObserver::slotDataChanged()
0120 {
0121     //qDebug() << "DiagramObserver::slotDataChanged()";
0122     Q_EMIT diagramDataChanged( m_diagram );
0123 }
0124 
0125 void DiagramObserver::slotDataHidden()
0126 {
0127     //qDebug() << "DiagramObserver::slotDataHidden()";
0128     Q_EMIT diagramDataHidden( m_diagram );
0129 }
0130 
0131 void DiagramObserver::slotAttributesChanged(QModelIndex,QModelIndex)
0132 {
0133     slotAttributesChanged();
0134 }
0135 
0136 void DiagramObserver::slotAttributesChanged()
0137 {
0138     //qDebug() << "DiagramObserver::slotAttributesChanged()";
0139     Q_EMIT diagramAttributesChanged( m_diagram );
0140 }
0141