From 43b2b591ece9c4485d9c8c03f27a733ddccdac5f Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Wed, 18 Jul 2007 19:52:28 +0000 Subject: [PATCH] Assure that the item size is not exceeded -> the spacing is also respected for texts that cannot be wrapped svn path=/trunk/KDE/kdebase/apps/; revision=689651 --- src/dolphiniconsview.cpp | 39 ++++++++++++++++++++++++++++++++++++++- src/dolphiniconsview.h | 10 +++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 237a319c8..394dae317 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -35,7 +35,9 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controller) : KCategorizedView(parent), m_controller(controller), - m_dragging(false) + m_itemSize(), + m_dragging(false), + m_dropRect() { Q_ASSERT(controller != 0); setViewMode(QListView::IconMode); @@ -93,6 +95,39 @@ DolphinIconsView::~DolphinIconsView() { } +QRect DolphinIconsView::visualRect(const QModelIndex& index) const +{ + if (itemCategorizer() == 0) { + const bool leftToRightFlow = (flow() == QListView::LeftToRight); + + QRect itemRect = KCategorizedView::visualRect(index); + const int maxWidth = m_itemSize.width(); + const int maxHeight = m_itemSize.height(); + + if (itemRect.width() > maxWidth) { + // assure that the maximum item width is not exceeded + if (leftToRightFlow) { + const int left = itemRect.left() + (itemRect.width() - maxWidth) / 2; + itemRect.setLeft(left); + } + itemRect.setWidth(maxWidth); + } + + if (itemRect.height() > maxHeight) { + // assure that the maximum item height is not exceeded + if (!leftToRightFlow) { + const int top = itemRect.top() + (itemRect.height() - maxHeight) / 2; + itemRect.setTop(top); + } + itemRect.setHeight(maxHeight); + } + + return itemRect; + } + + return KCategorizedView::visualRect(index); +} + QStyleOptionViewItem DolphinIconsView::viewOptions() const { return m_viewOptions; @@ -321,6 +356,8 @@ void DolphinIconsView::updateGridSize(bool showPreview, bool showAdditionalInfo) const int spacing = settings->gridSpacing(); setGridSize(QSize(itemWidth + spacing, itemHeight + spacing)); + m_itemSize = QSize(itemWidth, itemHeight); + m_controller->setZoomInPossible(isZoomInPossible()); m_controller->setZoomOutPossible(isZoomOutPossible()); } diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h index ec18400c6..7e5544ec0 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -22,7 +22,10 @@ #include #include -#include + +#include +#include + #include class DolphinController; @@ -41,6 +44,9 @@ public: explicit DolphinIconsView(QWidget* parent, DolphinController* controller); virtual ~DolphinIconsView(); + /** @see QAbstractItemView::visualRect() */ + virtual QRect visualRect(const QModelIndex& index) const; + protected: virtual QStyleOptionViewItem viewOptions() const; virtual void contextMenuEvent(QContextMenuEvent* event); @@ -77,6 +83,8 @@ private: DolphinController* m_controller; QStyleOptionViewItem m_viewOptions; + QSize m_itemSize; + bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 QRect m_dropRect; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 }; -- 2.47.3