00001 #include "KDChartAbstractProxyModel.h"
00002
00003 #include <QDebug>
00004
00005 #include <KDABLibFakes>
00006
00007
00008 namespace KDChart {
00009
00012 AbstractProxyModel::AbstractProxyModel(QObject* parent)
00013 : QAbstractProxyModel(parent) {}
00014
00015
00016 struct KDPrivateModelIndex
00017 {
00018 int r, c;
00019 void *p;
00020 const QAbstractItemModel *m;
00021 };
00022
00023 QModelIndex AbstractProxyModel::mapFromSource( const QModelIndex & sourceIndex ) const
00024 {
00025 if ( !sourceIndex.isValid() )
00026 return QModelIndex();
00027
00028
00029 Q_ASSERT( sourceIndex.model() == sourceModel() );
00030
00031
00032
00033 return createIndex( sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer() );
00034 }
00035
00036 QModelIndex AbstractProxyModel::mapToSource( const QModelIndex &proxyIndex ) const
00037 {
00038 if ( !proxyIndex.isValid() )
00039 return QModelIndex();
00040 Q_ASSERT( proxyIndex.model() == this );
00041
00042
00043 QModelIndex sourceIndex;
00044 KDPrivateModelIndex* hack = reinterpret_cast<KDPrivateModelIndex*>(&sourceIndex);
00045 hack->r = proxyIndex.row();
00046 hack->c = proxyIndex.column();
00047 hack->p = proxyIndex.internalPointer();
00048 hack->m = sourceModel();
00049 Q_ASSERT( sourceIndex.isValid() );
00050 return sourceIndex;
00051 }
00052
00053 QModelIndex AbstractProxyModel::index( int row, int col, const QModelIndex& index ) const
00054 {
00055 Q_ASSERT(sourceModel());
00056 return mapFromSource(sourceModel()->index( row, col, mapToSource(index) ));
00057 }
00058
00059 QModelIndex AbstractProxyModel::parent( const QModelIndex& index ) const
00060 {
00061 Q_ASSERT(sourceModel());
00062 return mapFromSource(sourceModel()->parent( mapToSource(index) ));
00063 }
00064
00065 }