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 <KDChartAbstractDiagram.h>
00031 #include <KDChartDiagramObserver.h>
00032 #include <KDChartAttributesModel.h>
00033
00034 #include <KDABLibFakes>
00035
00036 #include <QDebug>
00037
00038 using namespace KDChart;
00039
00040 DiagramObserver::DiagramObserver( AbstractDiagram * diagram, QObject* parent )
00041 : QObject( parent ), m_diagram( diagram )
00042 {
00043 if ( m_diagram ) {
00044 connect( m_diagram, SIGNAL(destroyed(QObject*)), SLOT(slotDestroyed(QObject*)));
00045 connect( m_diagram, SIGNAL(modelsChanged()), SLOT(slotModelsChanged()));
00046 }
00047 init();
00048 }
00049
00050 DiagramObserver::~DiagramObserver()
00051 {
00052 }
00053
00054 const AbstractDiagram* DiagramObserver::diagram() const
00055 {
00056 return m_diagram;
00057 }
00058
00059 AbstractDiagram* DiagramObserver::diagram()
00060 {
00061 return m_diagram;
00062 }
00063
00064
00065 void DiagramObserver::init()
00066 {
00067 if ( !m_diagram )
00068 return;
00069
00070 if ( m_model )
00071 disconnect(m_model);
00072
00073 if ( m_attributesmodel )
00074 disconnect(m_attributesmodel);
00075
00076 connect( m_diagram, SIGNAL(dataHidden()), SLOT(slotDataHidden()) );
00077
00078 if( m_diagram->model() ){
00079 connect( m_diagram->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
00080 SLOT(slotDataChanged(QModelIndex,QModelIndex)));
00081 connect( m_diagram->model(), SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
00082 SLOT(slotHeaderDataChanged(Qt::Orientation,int,int)));
00083 }
00084
00085 if( m_diagram->attributesModel() )
00086 connect( m_diagram->attributesModel(), SIGNAL(attributesChanged(QModelIndex,QModelIndex)),
00087 SLOT(slotAttributesChanged(QModelIndex,QModelIndex)));
00088 m_model = m_diagram->model();
00089 m_attributesmodel = m_diagram->attributesModel();
00090 }
00091
00092
00093 void DiagramObserver::slotDestroyed(QObject*)
00094 {
00095
00096
00097 AbstractDiagram* diag = m_diagram;
00098 disconnect( m_diagram, 0, this, 0);
00099 m_diagram = 0;
00100 emit diagramDestroyed( diag );
00101 }
00102
00103 void DiagramObserver::slotModelsChanged()
00104 {
00105 init();
00106 slotDataChanged();
00107 slotAttributesChanged();
00108 }
00109
00110 void DiagramObserver::slotHeaderDataChanged(Qt::Orientation,int,int)
00111 {
00112
00113 emit diagramDataChanged( m_diagram );
00114 }
00115
00116 void DiagramObserver::slotDataChanged(QModelIndex,QModelIndex)
00117 {
00118 slotDataChanged();
00119 }
00120
00121 void DiagramObserver::slotDataChanged()
00122 {
00123
00124 emit diagramDataChanged( m_diagram );
00125 }
00126
00127 void DiagramObserver::slotDataHidden()
00128 {
00129
00130 emit diagramDataHidden( m_diagram );
00131 }
00132
00133 void DiagramObserver::slotAttributesChanged(QModelIndex,QModelIndex)
00134 {
00135 slotAttributesChanged();
00136 }
00137
00138 void DiagramObserver::slotAttributesChanged()
00139 {
00140
00141 emit diagramAttributesChanged( m_diagram );
00142 }
00143