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