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 "kdganttlistviewrowcontroller.h"
00024 #include "kdganttlistviewrowcontroller_p.h"
00025
00026 #include <QAbstractProxyModel>
00027 #include <QScrollBar>
00028
00029 #include <cassert>
00030
00031 using namespace KDGantt;
00032
00040 ListViewRowController::ListViewRowController( QListView* lv, QAbstractProxyModel* proxy )
00041 : _d( new Private(lv,proxy) )
00042 {
00043 }
00044
00045 ListViewRowController::~ListViewRowController()
00046 {
00047 delete _d; _d = 0;
00048 }
00049
00050 #define d d_func()
00051
00052 int ListViewRowController::headerHeight() const
00053 {
00054 return d->listview->viewport()->y()-d->listview->frameWidth();
00055 }
00056
00057 int ListViewRowController::maximumItemHeight() const
00058 {
00059 return d->listview->fontMetrics().height();
00060 }
00061
00062 int ListViewRowController::totalHeight() const
00063 {
00064 return d->listview->verticalScrollBar()->maximum()+d->listview->viewport()->height();
00065 }
00066
00067 bool ListViewRowController::isRowVisible( const QModelIndex& _idx ) const
00068 {
00069 const QModelIndex idx = d->proxy->mapToSource( _idx );
00070 assert( idx.isValid() ? ( idx.model() == d->listview->model() ):( true ) );
00071 return d->listview->visualRect(idx).isValid();
00072 }
00073
00074 bool ListViewRowController::isRowExpanded( const QModelIndex& _idx ) const
00075 {
00076 Q_UNUSED(_idx);
00077
00078 return false;
00079 }
00080
00081 Span ListViewRowController::rowGeometry( const QModelIndex& _idx ) const
00082 {
00083 const QModelIndex idx = d->proxy->mapToSource( _idx );
00084 assert( idx.isValid() ? ( idx.model() == d->listview->model() ):( true ) );
00085 QRect r = d->listview->visualRect(idx).translated( QPoint( 0,
00086 static_cast<Private::HackListView*>(d->listview)->verticalOffset() ) );
00087 return Span( r.y(), r.height() );
00088 }
00089
00090 QModelIndex ListViewRowController::indexAt( int height ) const
00091 {
00092 return d->proxy->mapFromSource( d->listview->indexAt( QPoint( 1,height ) ) );
00093 }
00094
00095 QModelIndex ListViewRowController::indexAbove( const QModelIndex& _idx ) const
00096 {
00097 const QModelIndex idx = d->proxy->mapToSource( _idx );
00098 return d->proxy->mapFromSource( idx.sibling( idx.row()-1, idx.column()) );
00099 }
00100
00101 QModelIndex ListViewRowController::indexBelow( const QModelIndex& _idx ) const
00102 {
00103 const QModelIndex idx = d->proxy->mapToSource( _idx );
00104 if( !idx.isValid() || idx.column()!=0 ) return QModelIndex();
00105 if( idx.model()->rowCount(idx.parent())<idx.row()+1 ) return QModelIndex();
00106 return d->proxy->mapFromSource( idx.sibling( idx.row()+1, idx.column()) );
00107 }
00108