KDChartAbstractProxyModel.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "KDChartAbstractProxyModel.h"
00024
00025 #include <QDebug>
00026
00027 #include <KDABLibFakes>
00028
00029
00030 namespace KDChart {
00031
00034 AbstractProxyModel::AbstractProxyModel(QObject* parent)
00035 : QAbstractProxyModel(parent) {}
00036
00037
00038 struct KDPrivateModelIndex
00039 {
00040 int r, c;
00041 void *p;
00042 const QAbstractItemModel *m;
00043 };
00044
00045 QModelIndex AbstractProxyModel::mapFromSource( const QModelIndex & sourceIndex ) const
00046 {
00047 if ( !sourceIndex.isValid() )
00048 return QModelIndex();
00049
00050
00051 Q_ASSERT( sourceIndex.model() == sourceModel() );
00052
00053
00054
00055 return createIndex( sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer() );
00056 }
00057
00058 QModelIndex AbstractProxyModel::mapToSource( const QModelIndex &proxyIndex ) const
00059 {
00060 if ( !proxyIndex.isValid() )
00061 return QModelIndex();
00062 if( proxyIndex.model() != this )
00063 qDebug() << proxyIndex.model() << this;
00064 Q_ASSERT( proxyIndex.model() == this );
00065
00066
00067 QModelIndex sourceIndex;
00068 KDPrivateModelIndex* hack = reinterpret_cast<KDPrivateModelIndex*>(&sourceIndex);
00069 hack->r = proxyIndex.row();
00070 hack->c = proxyIndex.column();
00071 hack->p = proxyIndex.internalPointer();
00072 hack->m = sourceModel();
00073 Q_ASSERT( sourceIndex.isValid() );
00074 return sourceIndex;
00075 }
00076
00077 QModelIndex AbstractProxyModel::index( int row, int col, const QModelIndex& index ) const
00078 {
00079 Q_ASSERT(sourceModel());
00080 return mapFromSource(sourceModel()->index( row, col, mapToSource(index) ));
00081 }
00082
00083 QModelIndex AbstractProxyModel::parent( const QModelIndex& index ) const
00084 {
00085 Q_ASSERT(sourceModel());
00086 return mapFromSource(sourceModel()->parent( mapToSource(index) ));
00087 }
00088
00089 }