]> cloud.milkyroute.net Git - dolphin.git/blob - src/klistview_p.h
2980e98d66cd4c8dd87a992dc10a834de2eb13d9
[dolphin.git] / src / klistview_p.h
1 /**
2 * This file is part of the KDE project
3 * Copyright (C) 2007 Rafael Fernández López <ereslibre@gmail.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef KLISTVIEW_P_H
22 #define KLISTVIEW_P_H
23
24 class KSortFilterProxyModel;
25
26 /**
27 * @internal
28 */
29 class KListView::Private
30 {
31 public:
32 Private(KListView *listView);
33 ~Private();
34
35
36 // Methods
37
38 /**
39 * Returns the list of items that intersects with @p rect
40 */
41 const QModelIndexList &intersectionSet(const QRect &rect);
42
43 /**
44 * Gets the item rect in the viewport for @p index
45 */
46 QRect visualRectInViewport(const QModelIndex &index) const;
47
48 /**
49 * Returns the category rect in the viewport for @p category
50 */
51 QRect visualCategoryRectInViewport(const QString &category) const;
52
53 /**
54 * Caches and returns the rect that corresponds to @p index
55 */
56 const QRect &cacheIndex(const QModelIndex &index);
57
58 /**
59 * Caches and returns the rect that corresponds to @p category
60 */
61 const QRect &cacheCategory(const QString &category);
62
63 /**
64 * Returns the rect that corresponds to @p index
65 * @note If the rect is not cached, it becomes cached
66 */
67 const QRect &cachedRectIndex(const QModelIndex &index);
68
69 /**
70 * Returns the rect that corresponds to @p category
71 * @note If the rect is not cached, it becomes cached
72 */
73 const QRect &cachedRectCategory(const QString &category);
74
75 /**
76 * Returns the visual rect (taking in count x and y offsets) for @p index
77 * @note If the rect is not cached, it becomes cached
78 */
79 QRect visualRect(const QModelIndex &index);
80
81 /**
82 * Returns the visual rect (taking in count x and y offsets) for @p category
83 * @note If the rect is not cached, it becomes cached
84 */
85 QRect categoryVisualRect(const QString &category);
86
87 /**
88 * This method will draw a new category with name @p category on the rect
89 * specified by @p option.rect, with painter @p painter
90 */
91 void drawNewCategory(const QString &category,
92 const QStyleOption &option,
93 QPainter *painter);
94
95 /**
96 * This method will update scrollbars ranges. Called when our model changes
97 * or when the view is resized
98 */
99 void updateScrollbars();
100
101 /**
102 * This method will draw dragged items
103 */
104 void drawDraggedItems(QPainter *painter);
105
106
107 // Attributes
108
109 struct ElementInfo
110 {
111 QString category;
112 int relativeOffsetToCategory;
113 };
114
115 // Basic data
116 KListView *listView;
117 KItemCategorizer *itemCategorizer;
118
119 // Behavior data
120 bool mouseButtonPressed;
121 bool isDragging;
122 bool dragLeftViewport;
123 QModelIndex hovered;
124 QPoint initialPressPosition;
125 QPoint mousePosition;
126 QItemSelection lastSelection;
127
128 // Cache data
129 // We cannot merge some of them into structs because it would affect
130 // performance
131 QHash<QModelIndex, struct ElementInfo> elementsInfo; // in source model
132 QHash<QModelIndex, QRect> elementsPosition; // in source model
133 QHash<QModelIndex, QModelIndex> elementDictionary; // mapped indexes
134 QHash<QString, QModelIndexList> categoriesIndexes;
135 QHash<QString, QRect> categoriesPosition;
136 QStringList categories;
137 QModelIndexList intersectedIndexes;
138 QString hoveredCategory;
139
140 // Attributes for speed reasons
141 KSortFilterProxyModel *proxyModel;
142 QModelIndexList sourceModelIndexList; // in source model
143 QModelIndex lastIndex;
144 };
145
146 #endif // KLISTVIEW_P_H