File indexing completed on 2024-05-12 04:20:44

0001 /*
0002  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
0003  *
0004  * This file is part of the KGantt library.
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include "kganttlistviewrowcontroller.h"
0010 #include "kganttlistviewrowcontroller_p.h"
0011 
0012 #include <QAbstractProxyModel>
0013 #include <QScrollBar>
0014 
0015 #include <cassert>
0016 
0017 using namespace KGantt;
0018 
0019 
0020 
0021 ListViewRowController::ListViewRowController( QListView* lv, QAbstractProxyModel* proxy )
0022   : _d( new Private(lv,proxy) )
0023 {
0024 }
0025 
0026 ListViewRowController::~ListViewRowController()
0027 {
0028     delete _d; _d = nullptr;
0029 }
0030 
0031 #define d d_func()
0032 
0033 int ListViewRowController::headerHeight() const
0034 {
0035     return d->listview->viewport()->y()-d->listview->frameWidth();
0036 }
0037 
0038 int ListViewRowController::maximumItemHeight() const
0039 {
0040     return d->listview->fontMetrics().height();
0041 }
0042 
0043 int ListViewRowController::totalHeight() const
0044 {
0045     return d->listview->verticalScrollBar()->maximum()+d->listview->viewport()->height();
0046 }
0047 
0048 bool ListViewRowController::isRowVisible( const QModelIndex& _idx ) const
0049 {
0050     const QModelIndex idx = d->proxy->mapToSource( _idx );
0051     assert( idx.isValid() ? ( idx.model() == d->listview->model() ):( true ) );
0052     return d->listview->visualRect(idx).isValid();
0053 }
0054 
0055 bool ListViewRowController::isRowExpanded( const QModelIndex& _idx ) const
0056 {
0057     Q_UNUSED(_idx);
0058 
0059     return false;
0060 }
0061 
0062 Span ListViewRowController::rowGeometry( const QModelIndex& _idx ) const
0063 {
0064     const QModelIndex idx = d->proxy->mapToSource( _idx );
0065     assert( idx.isValid() ? ( idx.model() == d->listview->model() ):( true ) );
0066     QRect r = d->listview->visualRect(idx).translated( QPoint( 0,
0067           static_cast<Private::HackListView*>(d->listview)->verticalOffset() ) );
0068     return Span( r.y(), r.height() );
0069 }
0070 
0071 QModelIndex ListViewRowController::indexAt( int height ) const
0072 {
0073     return d->proxy->mapFromSource( d->listview->indexAt( QPoint( 1,height ) ) );
0074 }
0075 
0076 QModelIndex ListViewRowController::indexAbove( const QModelIndex& _idx ) const
0077 {
0078     const QModelIndex idx = d->proxy->mapToSource( _idx );
0079     return d->proxy->mapFromSource( idx.sibling( idx.row()-1, idx.column()) );
0080 }
0081 
0082 QModelIndex ListViewRowController::indexBelow( const QModelIndex& _idx ) const
0083 {
0084     const QModelIndex idx = d->proxy->mapToSource( _idx );
0085     if ( !idx.isValid() || idx.column()!=0 ) return QModelIndex();
0086     if ( idx.model()->rowCount(idx.parent())<idx.row()+1 ) return QModelIndex();
0087     return d->proxy->mapFromSource( idx.sibling( idx.row()+1, idx.column()) );
0088 }
0089