]> cloud.milkyroute.net Git - dolphin.git/blob - src/klistview_p.h
b590b23078969cfd00cbd6d412e490035e6a81e0
[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 in the painting operation
103 */
104 void drawDraggedItems(QPainter *painter);
105
106 /**
107 * This method will determine which rect needs to be updated because of a
108 * dragging operation
109 */
110 void drawDraggedItems();
111
112
113 // Attributes
114
115 struct ElementInfo
116 {
117 QString category;
118 int relativeOffsetToCategory;
119 };
120
121 // Basic data
122 KListView *listView;
123 KItemCategorizer *itemCategorizer;
124
125 // Behavior data
126 bool mouseButtonPressed;
127 bool isDragging;
128 bool dragLeftViewport;
129 QModelIndex hovered;
130 QString hoveredCategory;
131 QPoint initialPressPosition;
132 QPoint mousePosition;
133 QItemSelection lastSelection;
134
135 // Cache data
136 // We cannot merge some of them into structs because it would affect
137 // performance
138 QHash<QModelIndex, struct ElementInfo> elementsInfo; // in source model
139 QHash<QModelIndex, QRect> elementsPosition; // in source model
140 QHash<QModelIndex, QModelIndex> elementDictionary; // mapped indexes
141 QHash<QString, QModelIndexList> categoriesIndexes;
142 QHash<QString, QRect> categoriesPosition;
143 QStringList categories;
144 QModelIndexList intersectedIndexes;
145 QRect lastDraggedItemsRect;
146 QRect lastSelectionRect;
147
148 // Attributes for speed reasons
149 KSortFilterProxyModel *proxyModel;
150 QModelIndexList sourceModelIndexList; // in source model
151 QModelIndex lastIndex;
152 };
153
154 #endif // KLISTVIEW_P_H