diff options
| author | Peter Penz <[email protected]> | 2008-03-20 16:58:59 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2008-03-20 16:58:59 +0000 |
| commit | a8ada5e6857d6dec25edf8ef57af9f27a91471c1 (patch) | |
| tree | cd76cdcbae8e02405c9d4fb768d51b04384109d6 /src/dolphiniconsview.cpp | |
| parent | f738a9ff2ba3a71a6015d388c835ffa7c7e0be02 (diff) | |
QListView does not support having a margin for grids. Originally it has been tried to bypass this by overwriting QListView::visualRect(), but this has some side effects (see #155378 and #155575). The clean approach is to return a proper size hint in the file item delegate.
Currently a custom item delegate has been made for Dolphin, but we'll discuss whether it makes sense providing this feature already in KFileItemDelegate...
BUG: 155378
BUG: 155575
CCMAIL: [email protected]
svn path=/trunk/KDE/kdebase/apps/; revision=788095
Diffstat (limited to 'src/dolphiniconsview.cpp')
| -rw-r--r-- | src/dolphiniconsview.cpp | 50 |
1 files changed, 6 insertions, 44 deletions
diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 45fbf25b2..6235fcd87 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -21,6 +21,7 @@ #include "dolphincategorydrawer.h" #include "dolphincontroller.h" +#include "dolphinfileitemdelegate.h" #include "dolphinsettings.h" #include "dolphin_iconsmodesettings.h" #include "dolphin_generalsettings.h" @@ -132,50 +133,6 @@ DolphinIconsView::~DolphinIconsView() m_categoryDrawer = 0; } -QRect DolphinIconsView::visualRect(const QModelIndex& index) const -{ - 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); - } - - KCategorizedSortFilterProxyModel* proxyModel = dynamic_cast<KCategorizedSortFilterProxyModel*>(model()); - if (leftToRightFlow && !proxyModel->isCategorizedModel()) { - // TODO: QListView::visualRect() calculates a wrong position of the items under - // certain circumstances (e. g. if the text is too long). This issue is bypassed - // by the following code (I'll try create a patch for Qt but as Dolphin must also work with - // Qt 4.3.0 this workaround must get applied at least for KDE 4.0). - const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - const int margin = settings->gridSpacing(); - const int gridWidth = gridSize().width(); - const int gridIndex = (itemRect.left() - margin + 1) / gridWidth; - const int centerInc = (maxWidth - itemRect.width()) / 2; - itemRect.moveLeft((gridIndex * gridWidth) + margin + centerInc); - } - - return itemRect; -} - QStyleOptionViewItem DolphinIconsView::viewOptions() const { QStyleOptionViewItem viewOptions = KCategorizedView::viewOptions(); @@ -461,6 +418,11 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount) m_controller->setZoomInPossible(isZoomInPossible()); m_controller->setZoomOutPossible(isZoomOutPossible()); + + DolphinFileItemDelegate* delegate = qobject_cast<DolphinFileItemDelegate*>(itemDelegate()); + if (delegate != 0) { + delegate->setMaximumSize(m_itemSize); + } } int DolphinIconsView::additionalInfoCount() const |
