Changeset 561 for trunk/src/gui/itemviews/qlistview_p.h
- Timestamp:
- Feb 11, 2010, 11:19:06 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/gui/itemviews/qlistview_p.h (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/vendor/nokia/qt/4.6.1 merged eligible /branches/vendor/nokia/qt/current merged eligible /branches/vendor/trolltech/qt/current 3-149
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
trunk/src/gui/itemviews/qlistview_p.h
r2 r561 2 2 ** 3 3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 ** Contact: Qt Software Information ([email protected]) 4 ** All rights reserved. 5 ** Contact: Nokia Corporation ([email protected]) 5 6 ** 6 7 ** This file is part of the QtGui module of the Qt Toolkit. … … 21 22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 23 ** 23 ** In addition, as a special exception, Nokia gives you certain 24 ** additional rights. These rights are described in the Nokia Qt LGPL 25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this 26 ** package. 24 ** In addition, as a special exception, Nokia gives you certain additional 25 ** rights. These rights are described in the Nokia Qt LGPL Exception 26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 27 27 ** 28 28 ** GNU General Public License Usage … … 34 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 35 ** 36 ** If you are unsure which license is appropriate for your use, please37 ** contact the sales department at qt-sales@nokia.com.36 ** If you 37 ** @nokia.com. 38 38 ** $QT_END_LICENSE$ 39 39 ** … … 68 68 { 69 69 friend class QListViewPrivate; 70 friend class Q StaticListViewBase;71 friend class Q DynamicListViewBase;70 friend class QViewBase; 71 friend class QViewBase; 72 72 public: 73 73 inline QListViewItem() … … 85 85 { return !(*this == other); } 86 86 inline bool isValid() const 87 { return (x > -1) && (y > -1) && (w > 0) && (h > 0) && (indexHint > -1); }87 { return ) && (indexHint > -1); } 88 88 inline void invalidate() 89 89 { x = -1; y = -1; w = 0; h = 0; } … … 121 121 { 122 122 public: 123 inline QCommonListViewBase(QListView *q, QListViewPrivate *d) : dd(d), qq(q) {} 124 123 inline QCommonListViewBase(QListView *q, QListViewPrivate *d) : dd(d), qq(q), batchStartRow(0), batchSavedDeltaSeg(0) {} 124 virtual ~QCommonListViewBase() {} 125 126 //common interface 127 virtual int itemIndex(const QListViewItem &item) const = 0; 128 virtual QListViewItem indexToListViewItem(const QModelIndex &index) const = 0; 129 virtual bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max) = 0; 130 virtual void clear() = 0; 131 virtual void setRowCount(int) = 0; 132 virtual QVector<QModelIndex> intersectingSet(const QRect &area) const = 0; 133 virtual void dataChanged(const QModelIndex &, const QModelIndex &) = 0; 134 135 virtual int horizontalScrollToValue(int index, QListView::ScrollHint hint, 136 bool leftOf, bool rightOf, const QRect &area, const QRect &rect) const; 137 virtual int verticalScrollToValue(int index, QListView::ScrollHint hint, 138 bool above, bool below, const QRect &area, const QRect &rect) const; 139 virtual void scrollContentsBy(int dx, int dy, bool scrollElasticBand); 140 virtual QRect mapToViewport(const QRect &rect) const {return rect;} 141 virtual int horizontalOffset() const; 142 virtual int verticalOffset() const { return verticalScrollBar()->value(); } 143 virtual void updateHorizontalScrollBar(const QSize &step); 144 virtual void updateVerticalScrollBar(const QSize &step); 145 virtual void appendHiddenRow(int row); 146 virtual void removeHiddenRow(int row); 147 virtual void setPositionForIndex(const QPoint &, const QModelIndex &) { } 148 149 #ifndef QT_NO_DRAGANDDROP 150 virtual void paintDragDrop(QPainter *painter) = 0; 151 virtual bool filterDragMoveEvent(QDragMoveEvent *) { return false; } 152 virtual bool filterDragLeaveEvent(QDragLeaveEvent *) { return false; } 153 virtual bool filterDropEvent(QDropEvent *) { return false; } 154 virtual bool filterStartDrag(Qt::DropActions) { return false; } 155 #endif 156 157 158 //other inline members 125 159 inline int spacing() const; 126 160 inline bool isWrapping() const; … … 134 168 inline int column() const; 135 169 136 inline int verticalScrollBarValue() const;137 inline int horizontalScrollBarValue() const;170 inline () const; 171 inline () const; 138 172 inline QListView::ScrollMode verticalScrollMode() const; 139 173 inline QListView::ScrollMode horizontalScrollMode() const; … … 154 188 inline int hiddenCount() const; 155 189 156 inline void clearIntersections() const;157 inline void appendToIntersections(const QModelIndex &idx) const;158 159 190 inline bool isRightToLeft() const; 160 191 161 192 QListViewPrivate *dd; 162 193 QListView *qq; 163 }; 164 165 // ### rename to QListModeViewBase 166 class QStaticListViewBase : public QCommonListViewBase 167 { 168 friend class QListViewPrivate; 194 QSize contentsSize; 195 int batchStartRow; 196 int batchSavedDeltaSeg; 197 }; 198 199 class QListModeViewBase : public QCommonListViewBase 200 { 169 201 public: 170 QStaticListViewBase(QListView *q, QListViewPrivate *d) : QCommonListViewBase(q, d), 171 batchStartRow(0), batchSavedDeltaSeg(0), batchSavedPosition(0) {} 202 QListModeViewBase(QListView *q, QListViewPrivate *d) : QCommonListViewBase(q, d) {} 172 203 173 204 QVector<int> flowPositions; … … 175 206 QVector<int> segmentStartRows; 176 207 QVector<int> segmentExtents; 177 178 QSize contentsSize; 208 QVector<int> scrollValueMap; 179 209 180 210 // used when laying out in batches 181 int batchStartRow;182 int batchSavedDeltaSeg;183 211 int batchSavedPosition; 184 212 213 214 215 185 216 bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max); 186 217 void clear(); 218 void setRowCount(int rowCount) { flowPositions.resize(rowCount); } 219 QVector<QModelIndex> intersectingSet(const QRect &area) const; 220 void dataChanged(const QModelIndex &, const QModelIndex &); 221 222 int horizontalScrollToValue(int index, QListView::ScrollHint hint, 223 bool leftOf, bool rightOf,const QRect &area, const QRect &rect) const; 224 int verticalScrollToValue(int index, QListView::ScrollHint hint, 225 bool above, bool below, const QRect &area, const QRect &rect) const; 226 void scrollContentsBy(int dx, int dy, bool scrollElasticBand); 227 QRect mapToViewport(const QRect &rect) const; 228 int horizontalOffset() const; 229 int verticalOffset() const; 230 void updateHorizontalScrollBar(const QSize &step); 231 void updateVerticalScrollBar(const QSize &step); 232 233 #ifndef QT_NO_DRAGANDDROP 234 void paintDragDrop(QPainter *painter); 235 236 // The next two methods are to be used on LefToRight flow only. 237 // WARNING: Plenty of duplicated code from QAbstractItemView{,Private}. 238 QAbstractItemView::DropIndicatorPosition position(const QPoint &pos, const QRect &rect, const QModelIndex &idx) const; 239 void dragMoveEvent(QDragMoveEvent *e); 240 #endif 241 242 private: 187 243 QPoint initStaticLayout(const QListViewLayoutInfo &info); 188 244 void doStaticLayout(const QListViewLayoutInfo &info); 189 void intersectingStaticSet(const QRect &area) const;190 191 int itemIndex(const QListViewItem &item) const;192 193 int perItemScrollingPageSteps(int length, int bounds, bool wrap) const;194 195 245 int perItemScrollToValue(int index, int value, int height, 196 246 QAbstractItemView::ScrollHint hint, 197 247 Qt::Orientation orientation, bool wrap, int extent) const; 198 199 QRect mapToViewport(const QRect &rect) const; 200 201 QListViewItem indexToListViewItem(const QModelIndex &index) const; 202 203 void scrollContentsBy(int &dx, int &dy); 204 205 int verticalPerItemValue(int itemIndex, int verticalValue, int areaHeight, 206 bool above, bool below, bool wrap, QListView::ScrollHint hint, int itemHeight) const; 207 int horizontalPerItemValue(int itemIndex, int horizontalValue, int areaWidth, 208 bool leftOf, bool rightOf, bool wrap, QListView::ScrollHint hint, int itemWidth) const; 209 210 void clear(); 211 }; 212 213 // ### rename to QIconModeViewBase 214 class QDynamicListViewBase : public QCommonListViewBase 215 { 216 friend class QListViewPrivate; 248 int perItemScrollingPageSteps(int length, int bounds, bool wrap) const; 249 }; 250 251 class QIconModeViewBase : public QCommonListViewBase 252 { 217 253 public: 218 QDynamicListViewBase(QListView *q, QListViewPrivate *d) : QCommonListViewBase(q, d), 219 batchStartRow(0), batchSavedDeltaSeg(0) {} 254 QIconModeViewBase(QListView *q, QListViewPrivate *d) : QCommonListViewBase(q, d), interSectingVector(0) {} 220 255 221 256 QBspTree tree; … … 223 258 QBitArray moved; 224 259 225 QSize contentsSize;226 227 260 QVector<QModelIndex> draggedItems; // indices to the tree.itemVector 228 261 mutable QPoint draggedItemsPos; 229 262 230 263 // used when laying out in batches 231 int batchStartRow; 232 int batchSavedDeltaSeg; 233 264 QVector<QModelIndex> *interSectingVector; //used from within intersectingSet 265 266 //reimplementations 267 int itemIndex(const QListViewItem &item) const; 268 QListViewItem indexToListViewItem(const QModelIndex &index) const; 269 bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max); 270 void clear(); 271 void setRowCount(int rowCount); 272 QVector<QModelIndex> intersectingSet(const QRect &area) const; 273 274 void scrollContentsBy(int dx, int dy, bool scrollElasticBand); 234 275 void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); 235 bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max); 236 276 void appendHiddenRow(int row); 277 void removeHiddenRow(int row); 278 void setPositionForIndex(const QPoint &position, const QModelIndex &index); 279 280 #ifndef QT_NO_DRAGANDDROP 281 void paintDragDrop(QPainter *painter); 282 bool filterDragMoveEvent(QDragMoveEvent *); 283 bool filterDragLeaveEvent(QDragLeaveEvent *); 284 bool filterDropEvent(QDropEvent *e); 285 bool filterStartDrag(Qt::DropActions); 286 #endif 287 288 private: 237 289 void initBspTree(const QSize &contents); 238 290 QPoint initDynamicLayout(const QListViewLayoutInfo &info); 239 291 void doDynamicLayout(const QListViewLayoutInfo &info); 240 void intersectingDynamicSet(const QRect &area) const;241 242 292 static void addLeaf(QVector<int> &leaf, const QRect &area, 243 293 uint visited, QBspTree::Data data); 244 245 void insertItem(int index); 246 void removeItem(int index); 294 QRect itemsRect(const QVector<QModelIndex> &indexes) const; 295 QRect draggedItemsRect() const; 296 QPoint snapToGrid(const QPoint &pos) const; 297 void updateContentsSize(); 298 QPoint draggedItemsDelta() const; 299 void drawItems(QPainter *painter, const QVector<QModelIndex> &indexes) const; 247 300 void moveItem(int index, const QPoint &dest); 248 301 249 int itemIndex(const QListViewItem &item) const;250 251 void createItems(int to);252 void drawItems(QPainter *painter, const QVector<QModelIndex> &indexes) const;253 QRect itemsRect(const QVector<QModelIndex> &indexes) const;254 255 QPoint draggedItemsDelta() const;256 QRect draggedItemsRect() const;257 258 QPoint snapToGrid(const QPoint &pos) const;259 260 void scrollElasticBandBy(int dx, int dy);261 262 QListViewItem indexToListViewItem(const QModelIndex &index) const;263 264 void clear();265 void updateContentsSize();266 302 }; 267 303 … … 278 314 bool doItemsLayout(int num); 279 315 280 inline voidintersectingSet(const QRect &area, bool doLayout = true) const {316 inline intersectingSet(const QRect &area, bool doLayout = true) const { 281 317 if (doLayout) executePostedLayout(); 282 318 QRect a = (q_func()->isRightToLeft() ? flipX(area.normalized()) : area.normalized()); 283 if (viewMode == QListView::ListMode) staticListView->intersectingStaticSet(a); 284 else dynamicListView->intersectingDynamicSet(a); 319 return commonListView->intersectingSet(a); 285 320 } 286 321 287 // ### FIXME: 288 inline void resetBatchStartRow() 289 { if (viewMode == QListView::ListMode) staticListView->batchStartRow = 0; 290 else dynamicListView->batchStartRow = 0; } 291 inline int batchStartRow() const 292 { return (viewMode == QListView::ListMode 293 ? staticListView->batchStartRow : dynamicListView->batchStartRow); } 294 inline QSize contentsSize() const 295 { return (viewMode == QListView::ListMode 296 ? staticListView->contentsSize : dynamicListView->contentsSize); } 297 inline void setContentsSize(int w, int h) 298 { if (viewMode == QListView::ListMode) staticListView->contentsSize = QSize(w, h); 299 else dynamicListView->contentsSize = QSize(w, h); } 322 inline void resetBatchStartRow() { commonListView->batchStartRow = 0; } 323 inline int batchStartRow() const { return commonListView->batchStartRow; } 324 inline QSize contentsSize() const { return commonListView->contentsSize; } 325 inline void setContentsSize(int w, int h) { commonListView->contentsSize = QSize(w, h); } 300 326 301 327 inline int flipX(int x) const … … 308 334 { if (q_func()->isRightToLeft()) return flipX(item.rect()); return item.rect(); } 309 335 310 int itemIndex(const QListViewItem &item) const;311 336 QListViewItem indexToListViewItem(const QModelIndex &index) const; 312 337 inline QModelIndex listViewItemToIndex(const QListViewItem &item) const 313 { return model->index(itemIndex(item), column, root); } 314 315 QRect mapToViewport(const QRect &rect, bool greedy = false) const; 338 { return model->index(commonListView->itemIndex(item), column, root); } 339 340 QRect rectForIndex(const QModelIndex &index) const 341 { 342 if (!isIndexValid(index) || index.parent() != root || index.column() != column || isHidden(index.row())) 343 return QRect(); 344 executePostedLayout(); 345 return viewItemRect(indexToListViewItem(index)); 346 } 347 348 void viewUpdateGeometries() { q_func()->updateGeometries(); } 349 350 351 QRect mapToViewport(const QRect &rect, bool extend = true) const; 316 352 317 353 QModelIndex closestIndex(const QRect &target, const QVector<QModelIndex> &candidates) const; … … 326 362 QItemSelection selection(const QRect &rect) const; 327 363 void selectAll(QItemSelectionModel::SelectionFlags command); 364 365 366 367 328 368 329 369 inline void setGridSize(const QSize &size) { grid = size; } … … 352 392 void scrollElasticBandBy(int dx, int dy); 353 393 354 // ### FIXME: we only need one at a time 355 QDynamicListViewBase *dynamicListView; 356 QStaticListViewBase *staticListView; 394 QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; 395 396 void emitIndexesMoved(const QModelIndexList &indexes) { emit q_func()->indexesMoved(indexes); } 397 398 399 QCommonListViewBase *commonListView; 357 400 358 401 // ### FIXME: see if we can move the members into the dynamic/static classes … … 384 427 QRect layoutBounds; 385 428 386 // used for intersecting set387 mutable QVector<QModelIndex> intersectVector;388 389 429 // timers 390 430 QBasicTimer batchLayoutTimer; … … 415 455 inline int QCommonListViewBase::column() const { return dd->column; } 416 456 417 inline int QCommonListViewBase::verticalScrollBarValue() const { return qq->verticalScrollBar()->value(); }418 inline int QCommonListViewBase::horizontalScrollBarValue() const { return qq->horizontalScrollBar()->value(); }457 inline (); } 458 inline (); } 419 459 inline QListView::ScrollMode QCommonListViewBase::verticalScrollMode() const { return qq->verticalScrollMode(); } 420 460 inline QListView::ScrollMode QCommonListViewBase::horizontalScrollMode() const { return qq->horizontalScrollMode(); } … … 439 479 inline int QCommonListViewBase::hiddenCount() const { return dd->hiddenRows.count(); } 440 480 441 inline void QCommonListViewBase::clearIntersections() const { dd->intersectVector.clear(); }442 inline void QCommonListViewBase::appendToIntersections(const QModelIndex &idx) const { dd->intersectVector.append(idx); }443 444 481 inline bool QCommonListViewBase::isRightToLeft() const { return qq->isRightToLeft(); } 445 482
Note:
See TracChangeset
for help on using the changeset viewer.
