• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kdgantt2

  • sources
  • kde-4.12
  • kdepim
  • kdgantt2
kdgantttreeviewrowcontroller.cpp
Go to the documentation of this file.
1 /****************************************************************************
2  ** Copyright (C) 2001-2006 Klarälvdalens Datakonsult AB. All rights reserved.
3  **
4  ** This file is part of the KD Gantt library.
5  **
6  ** This file may be distributed and/or modified under the terms of the
7  ** GNU General Public License version 2 as published by the Free Software
8  ** Foundation and appearing in the file LICENSE.GPL included in the
9  ** packaging of this file.
10  **
11  ** Licensees holding valid commercial KD Gantt licenses may use this file in
12  ** accordance with the KD Gantt Commercial License Agreement provided with
13  ** the Software.
14  **
15  ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  **
18  ** See http://www.kdab.net/kdgantt for
19  ** information about KD Gantt Commercial License Agreements.
20  **
21  ** Contact info@kdab.net if any conditions of this
22  ** licensing are not clear to you.
23  **
24  **********************************************************************/
25 #include "kdgantttreeviewrowcontroller.h"
26 #include "kdgantttreeviewrowcontroller_p.h"
27 
28 #include <QAbstractProxyModel>
29 #include <QHeaderView>
30 #include <QScrollBar>
31 
32 #include <cassert>
33 
34 using namespace KDGantt;
35 
41 TreeViewRowController::TreeViewRowController( QTreeView* tv,
42  QAbstractProxyModel* proxy )
43  : _d( new Private )
44 {
45  _d->treeview = static_cast<Private::HackTreeView*>(tv);
46  _d->proxy = proxy;
47 }
48 
49 TreeViewRowController::~TreeViewRowController()
50 {
51  delete _d; _d=0;
52 }
53 
54 #define d d_func()
55 
56 int TreeViewRowController::headerHeight() const
57 {
58  //return d->treeview->header()->sizeHint().height();
59  return d->treeview->viewport()->y()-d->treeview->frameWidth();
60 }
61 
62 int TreeViewRowController::maximumItemHeight() const
63 {
64  return d->treeview->fontMetrics().height();
65 }
66 
67 int TreeViewRowController::totalHeight() const
68 {
69  return d->treeview->verticalScrollBar()->maximum()+d->treeview->viewport()->height();
70 }
71 
72 bool TreeViewRowController::isRowVisible( const QModelIndex& _idx ) const
73 {
74  //qDebug() << _idx.model()<<d->proxy << d->treeview->model();
75  const QModelIndex idx = d->proxy->mapToSource( _idx );
76  assert( idx.isValid() ? ( idx.model() == d->treeview->model() ):( true ) );
77  return d->treeview->visualRect(idx).isValid();
78 }
79 
80 bool TreeViewRowController::isRowExpanded( const QModelIndex& _idx ) const
81 {
82  const QModelIndex idx = d->proxy->mapToSource( _idx );
83  assert( idx.isValid() ? ( idx.model() == d->treeview->model() ):( true ) );
84  return d->treeview->isExpanded( idx );
85 }
86 
87 Span TreeViewRowController::rowGeometry( const QModelIndex& _idx ) const
88 {
89  const QModelIndex idx = d->proxy->mapToSource( _idx );
90  assert( idx.isValid() ? ( idx.model() == d->treeview->model() ):( true ) );
91  QRect r = d->treeview->visualRect(idx).translated( QPoint( 0, d->treeview->verticalOffset() ) );
92  return Span( r.y(), r.height() );
93 }
94 
95 QModelIndex TreeViewRowController::indexAt( int height ) const
96 {
97  /* using indexAt( QPoint ) wont work here, since it does hit detection
98  * against the actual item text/icon, so we would return wrong values
99  * for items with no text etc.
100  *
101  * The code below could cache for performance, but currently it doesn't
102  * seem to be the performance bottleneck at all.
103  */
104  if ( !d->treeview->model() ) return QModelIndex();
105  int y = d->treeview->verticalOffset();
106  QModelIndex idx = d->treeview->model()->index( 0, 0, d->treeview->rootIndex() );
107  do {
108  if ( y >= height ) break;
109 #if QT_VERSION >= 0x040300
110  y += d->treeview->rowHeight( idx );
111 #else
112  // Since TreeViewRowController is NOT using uniform row height
113  // we can use this:
114  y += d->treeview->indexRowSizeHint( idx );
115 #endif
116  idx = d->treeview->indexBelow( idx );
117  } while ( idx.isValid() );
118  return d->proxy->mapFromSource( idx );
119 }
120 
121 QModelIndex TreeViewRowController::indexAbove( const QModelIndex& _idx ) const
122 {
123  const QModelIndex idx = d->proxy->mapToSource( _idx );
124  return d->proxy->mapFromSource( d->treeview->indexAbove( idx ) );
125 }
126 
127 QModelIndex TreeViewRowController::indexBelow( const QModelIndex& _idx ) const
128 {
129  const QModelIndex idx = d->proxy->mapToSource( _idx );
130  return d->proxy->mapFromSource( d->treeview->indexBelow( idx ) );
131 }
KDGantt::TreeViewRowController::headerHeight
int headerHeight() const
Definition: kdgantttreeviewrowcontroller.cpp:56
KDGantt::TreeViewRowController::maximumItemHeight
int maximumItemHeight() const
Definition: kdgantttreeviewrowcontroller.cpp:62
KDGantt::TreeViewRowController::indexAt
QModelIndex indexAt(int height) const
Definition: kdgantttreeviewrowcontroller.cpp:95
KDGantt::TreeViewRowController::~TreeViewRowController
virtual ~TreeViewRowController()
Definition: kdgantttreeviewrowcontroller.cpp:49
KDGantt::TreeViewRowController::indexAbove
QModelIndex indexAbove(const QModelIndex &idx) const
Definition: kdgantttreeviewrowcontroller.cpp:121
KDGantt::TreeViewRowController::isRowExpanded
bool isRowExpanded(const QModelIndex &idx) const
Definition: kdgantttreeviewrowcontroller.cpp:80
KDGantt::TreeViewRowController::rowGeometry
Span rowGeometry(const QModelIndex &idx) const
Definition: kdgantttreeviewrowcontroller.cpp:87
KDGantt::Span
A class representing a start point and a length.
Definition: kdganttglobal.h:220
KDGantt::TreeViewRowController::TreeViewRowController
TreeViewRowController(QTreeView *tv, QAbstractProxyModel *proxy)
Definition: kdgantttreeviewrowcontroller.cpp:41
QTreeView
KDGantt::TreeViewRowController::Private::HackTreeView
Definition: kdgantttreeviewrowcontroller_p.h:37
kdgantttreeviewrowcontroller.h
KDGantt::TreeViewRowController::isRowVisible
bool isRowVisible(const QModelIndex &idx) const
Definition: kdgantttreeviewrowcontroller.cpp:72
d
#define d
Definition: kdgantttreeviewrowcontroller.cpp:54
QAbstractProxyModel
kdgantttreeviewrowcontroller_p.h
KDGantt::TreeViewRowController::indexBelow
QModelIndex indexBelow(const QModelIndex &idx) const
Definition: kdgantttreeviewrowcontroller.cpp:127
KDGantt::TreeViewRowController::Private
Definition: kdgantttreeviewrowcontroller_p.h:35
KDGantt::TreeViewRowController::totalHeight
int totalHeight() const
Definition: kdgantttreeviewrowcontroller.cpp:67
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:05 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kdgantt2

Skip menu "kdgantt2"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal