From e65154552769e648bcbe14429123ff9fcd48bd29 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 6 Dec 2007 21:06:45 +0000 Subject: [PATCH] Fixed wrong usage of QStyleOptionViewItem: caching of the file item in the constructor is too early (thanks to Fredrik for the hint!). This fixes 2 issues: * the selection color of the details view now uses the correct selection color * changing the colors of KDE results in updating the colors of all Dolphin views CCMAIL: hein@kde.org CCMAIL: ereslibre@kde.org CCMAIL: mw_triad@users.sourceforge.net svn path=/trunk/KDE/kdebase/apps/; revision=745700 --- src/dolphincolumnwidget.cpp | 30 +++++++++++++++---------- src/dolphincolumnwidget.h | 12 +++++----- src/dolphindetailsview.cpp | 20 ++++++++--------- src/dolphindetailsview.h | 7 +++--- src/dolphiniconsview.cpp | 45 ++++++++++++++++++++++--------------- src/dolphiniconsview.h | 7 +++++- 6 files changed, 71 insertions(+), 50 deletions(-) diff --git a/src/dolphincolumnwidget.cpp b/src/dolphincolumnwidget.cpp index 677215972d..bc692ee1b0 100644 --- a/src/dolphincolumnwidget.cpp +++ b/src/dolphincolumnwidget.cpp @@ -55,7 +55,8 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, m_view(columnView), m_url(url), m_childUrl(), - m_viewOptions(), + m_font(), + m_decorationSize(), m_dirLister(0), m_dolphinModel(0), m_proxyModel(0), @@ -84,17 +85,12 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); Q_ASSERT(settings != 0); - m_viewOptions = QListView::viewOptions(); - - QFont font(settings->fontFamily(), settings->fontSize()); - font.setItalic(settings->italicFont()); - font.setBold(settings->boldFont()); - m_viewOptions.font = font; + m_font = QFont(settings->fontFamily(), settings->fontSize()); + m_font.setItalic(settings->italicFont()); + m_font.setBold(settings->boldFont()); const int iconSize = settings->iconSize(); - m_viewOptions.decorationSize = QSize(iconSize, iconSize); - - m_viewOptions.showDecorationSelected = true; + m_decorationSize = QSize(iconSize, iconSize); KFileItemDelegate* delegate = new KFileItemDelegate(this); setItemDelegate(delegate); @@ -137,7 +133,7 @@ DolphinColumnWidget::~DolphinColumnWidget() void DolphinColumnWidget::setDecorationSize(const QSize& size) { - m_viewOptions.decorationSize = size; + m_decorationSize = size; doItemsLayout(); } @@ -197,6 +193,16 @@ void DolphinColumnWidget::setNameFilter(const QString& nameFilter) m_proxyModel->setFilterRegExp(nameFilter); } + +QStyleOptionViewItem DolphinColumnWidget::viewOptions() const +{ + QStyleOptionViewItem viewOptions = QListView::viewOptions(); + viewOptions.font = m_font; + viewOptions.decorationSize = m_decorationSize; + viewOptions.showDecorationSelected = true; + return viewOptions; +} + void DolphinColumnWidget::startDrag(Qt::DropActions supportedActions) { DragAndDropHelper::startDrag(this, supportedActions); @@ -278,7 +284,7 @@ void DolphinColumnWidget::paintEvent(QPaintEvent* event) // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight); DragAndDropHelper::drawHoverIndication(viewport(), m_dropRect, brush); } } diff --git a/src/dolphincolumnwidget.h b/src/dolphincolumnwidget.h index e8fea3bf59..5cb7e1168d 100644 --- a/src/dolphincolumnwidget.h +++ b/src/dolphincolumnwidget.h @@ -20,7 +20,9 @@ #ifndef DOLPHINCOLUMNWIDGET_H #define DOLPHINCOLUMNWIDGET_H +#include #include +#include #include #include @@ -147,7 +149,10 @@ private: DolphinColumnView* m_view; KUrl m_url; // URL of the directory that is shown KUrl m_childUrl; // URL of the next column that is shown - QStyleOptionViewItem m_viewOptions; + + QFont m_font; + QSize m_decorationSize; + KDirLister* m_dirLister; DolphinModel* m_dolphinModel; DolphinSortFilterProxyModel* m_proxyModel; @@ -184,9 +189,4 @@ inline const KUrl& DolphinColumnWidget::url() const return m_url; } -inline QStyleOptionViewItem DolphinColumnWidget::viewOptions() const -{ - return m_viewOptions; -} - #endif diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index f3d55a8c30..68b288b0b9 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -44,6 +44,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) : QTreeView(parent), m_controller(controller), + m_font(), + m_decorationSize(), m_clearAdditionalInfo(false), m_dragging(false), m_showElasticBand(false), @@ -107,13 +109,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); Q_ASSERT(settings != 0); - m_viewOptions = QTreeView::viewOptions(); - - QFont font(settings->fontFamily(), settings->fontSize()); - font.setItalic(settings->italicFont()); - font.setBold(settings->boldFont()); - m_viewOptions.font = font; - m_viewOptions.showDecorationSelected = true; + m_font = QFont(settings->fontFamily(), settings->fontSize()); // TODO: Remove this check when 4.3.2 is released and KDE requires it... this // check avoids a division by zero happening on versions before 4.3.1. @@ -163,7 +159,11 @@ bool DolphinDetailsView::event(QEvent* event) QStyleOptionViewItem DolphinDetailsView::viewOptions() const { - return m_viewOptions; + QStyleOptionViewItem viewOptions = QTreeView::viewOptions(); + viewOptions.font = m_font; + viewOptions.showDecorationSelected = true; + viewOptions.decorationSize = m_decorationSize; + return viewOptions; } void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event) @@ -301,7 +301,7 @@ void DolphinDetailsView::paintEvent(QPaintEvent* event) // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight); DragAndDropHelper::drawHoverIndication(viewport(), m_dropRect, brush); } } @@ -516,7 +516,7 @@ void DolphinDetailsView::updateDecorationSize() { DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); const int iconSize = settings->iconSize(); - m_viewOptions.decorationSize = QSize(iconSize, iconSize); + m_decorationSize = QSize(iconSize, iconSize); m_controller->setZoomInPossible(isZoomInPossible()); m_controller->setZoomOutPossible(isZoomOutPossible()); diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index 1b21690c0b..cfa5062b78 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -22,8 +22,7 @@ #define DOLPHINDETAILSVIEW_H #include -#include -#include +#include #include class DolphinController; @@ -146,7 +145,9 @@ private: private: DolphinController* m_controller; - QStyleOptionViewItem m_viewOptions; + + QFont m_font; + QSize m_decorationSize; bool m_clearAdditionalInfo; diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 2bb21cb79a..a45b08dcf9 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -38,6 +38,10 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle KCategorizedView(parent), m_controller(controller), m_categoryDrawer(0), + m_font(), + m_decorationSize(), + m_decorationPosition(QStyleOptionViewItem::Top), + m_displayAlignment(Qt::AlignHCenter), m_itemSize(), m_dragging(false), m_dropRect() @@ -84,24 +88,21 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); Q_ASSERT(settings != 0); - m_viewOptions = KCategorizedView::viewOptions(); - m_viewOptions.showDecorationSelected = true; - - QFont font(settings->fontFamily(), settings->fontSize()); - font.setItalic(settings->italicFont()); - font.setBold(settings->boldFont()); - m_viewOptions.font = font; + m_font = QFont(settings->fontFamily(), settings->fontSize()); + m_font.setItalic(settings->italicFont()); + m_font.setBold(settings->boldFont()); setWordWrap(settings->numberOfTextlines() > 1); updateGridSize(view->showPreview(), 0); if (settings->arrangement() == QListView::TopToBottom) { setFlow(QListView::LeftToRight); - m_viewOptions.decorationPosition = QStyleOptionViewItem::Top; + m_decorationPosition = QStyleOptionViewItem::Top; + m_displayAlignment = Qt::AlignHCenter; } else { setFlow(QListView::TopToBottom); - m_viewOptions.decorationPosition = QStyleOptionViewItem::Left; - m_viewOptions.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter; + m_decorationPosition = QStyleOptionViewItem::Left; + m_displayAlignment = Qt::AlignLeft | Qt::AlignVCenter; } m_categoryDrawer = new DolphinCategoryDrawer(); @@ -121,6 +122,7 @@ 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(); @@ -152,7 +154,8 @@ QRect DolphinIconsView::visualRect(const QModelIndex& index) const const int margin = settings->gridSpacing(); const int gridWidth = gridSize().width(); const int gridIndex = (itemRect.left() - margin + 1) / gridWidth; - itemRect.moveLeft(gridIndex * gridWidth + margin); + const int centerInc = (maxWidth - itemRect.width()) / 2; + itemRect.moveLeft((gridIndex * gridWidth) + margin + centerInc); } return itemRect; @@ -160,7 +163,13 @@ QRect DolphinIconsView::visualRect(const QModelIndex& index) const QStyleOptionViewItem DolphinIconsView::viewOptions() const { - return m_viewOptions; + QStyleOptionViewItem viewOptions = KCategorizedView::viewOptions(); + viewOptions.font = m_font; + viewOptions.decorationPosition = m_decorationPosition; + viewOptions.decorationSize = m_decorationSize; + viewOptions.displayAlignment = m_displayAlignment; + viewOptions.showDecorationSelected = true; + return viewOptions; } void DolphinIconsView::contextMenuEvent(QContextMenuEvent* event) @@ -250,7 +259,7 @@ void DolphinIconsView::paintEvent(QPaintEvent* event) // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight); DragAndDropHelper::drawHoverIndication(viewport(), m_dropRect, brush); } } @@ -421,22 +430,22 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount) } Q_ASSERT(additionalInfoCount >= 0); - itemHeight += additionalInfoCount * m_viewOptions.font.pointSize() * 2; + itemHeight += additionalInfoCount * m_font.pointSize() * 2; if (settings->arrangement() == QListView::TopToBottom) { // The decoration width indirectly defines the maximum // width for the text wrapping. To use the maximum item width // for text wrapping, it is used as decoration width. - m_viewOptions.decorationSize = QSize(itemWidth, size); + m_decorationSize = QSize(itemWidth, size); } else { - m_viewOptions.decorationSize = QSize(size, size); + m_decorationSize = QSize(size, size); } + m_itemSize = QSize(itemWidth, itemHeight); + const int spacing = settings->gridSpacing(); setGridSize(QSize(itemWidth + spacing * 2, 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 fbbbce0ecb..06c4178682 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -97,7 +98,11 @@ private: private: DolphinController* m_controller; DolphinCategoryDrawer* m_categoryDrawer; - QStyleOptionViewItem m_viewOptions; + + QFont m_font; + QSize m_decorationSize; + QStyleOptionViewItem::Position m_decorationPosition; + Qt::Alignment m_displayAlignment; QSize m_itemSize;