From: Frank Reininghaus Date: Wed, 3 Aug 2011 16:54:10 +0000 (+0200) Subject: Underline the current item in KFileItemListView X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/225fd7073e1f8fc35405ad998dd9f382f61b5b4b?ds=inline Underline the current item in KFileItemListView It still looks a bit ugly, but at least we can see the current item now :-) It is only updated by mouse clicks at the moment. --- diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 4abc4d115..91c0cb597 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -127,11 +127,16 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte drawPixmap(painter, m_pixmap); } - painter->setFont(itemListStyleOption.font); + QFont font(itemListStyleOption.font); + if (itemListStyleOption.state & QStyle::State_HasFocus) { + font.setUnderline(true); + } + painter->setFont(font); painter->setPen(itemListStyleOption.palette.text().color()); painter->drawStaticText(m_textPos[Name], m_text[Name]); painter->setPen(m_additionalInfoTextColor); + painter->setFont(itemListStyleOption.font); for (int i = Name + 1; i < TextIdCount; ++i) { painter->drawStaticText(m_textPos[i], m_text[i]); } diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index aab40631e..2d72a96de 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -82,9 +82,14 @@ void KItemListController::setView(KItemListView* view) KItemListView* oldView = m_view; m_view = view; + if (oldView) { + disconnect(m_selectionManager, SIGNAL(currentChanged(int,int)), oldView, SLOT(currentChanged(int,int))); + } + if (m_view) { m_view->setController(this); m_view->setModel(m_model); + connect(m_selectionManager, SIGNAL(currentChanged(int,int)), m_view, SLOT(currentChanged(int,int))); } emit viewChanged(m_view, oldView); diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index d5e2bf875..b89f4d0f5 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -645,6 +645,27 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges, } } +void KItemListView::currentChanged(int current, int previous) +{ + Q_UNUSED(previous); + + QHashIterator it(m_visibleItems); + while (it.hasNext()) { + it.next(); + + KItemListWidget* widget = it.value(); + KItemListStyleOption styleOption = widget->styleOption(); + if (it.key() == current) { + styleOption.state |= QStyle::State_HasFocus; + widget->setStyleOption(styleOption); + } + else if (styleOption.state & QStyle::State_HasFocus) { + styleOption.state &= ~QStyle::State_HasFocus; + widget->setStyleOption(styleOption); + } + } +} + void KItemListView::slotAnimationFinished(QGraphicsWidget* widget, KItemListViewAnimation::AnimationType type) { @@ -899,7 +920,13 @@ KItemListWidget* KItemListView::createWidget(int index) KItemListWidget* widget = m_widgetCreator->create(this); widget->setVisibleRoles(m_visibleRoles); widget->setVisibleRolesSizes(m_visibleRolesSizes); - widget->setStyleOption(m_styleOption); + + KItemListStyleOption option = m_styleOption; + if (index == m_controller->selectionManager()->currentItem()) { + option.state |= QStyle::State_HasFocus; + } + widget->setStyleOption(option); + widget->setIndex(index); widget->setData(m_model->data(index)); m_visibleItems.insert(index, widget); @@ -957,7 +984,13 @@ void KItemListView::setWidgetIndex(KItemListWidget* widget, int index) m_visibleItems.remove(oldIndex); widget->setVisibleRoles(m_visibleRoles); widget->setVisibleRolesSizes(m_visibleRolesSizes); - widget->setStyleOption(m_styleOption); + + KItemListStyleOption option = m_styleOption; + if (index == m_controller->selectionManager()->currentItem()) { + option.state |= QStyle::State_HasFocus; + } + widget->setStyleOption(option); + widget->setIndex(index); widget->setData(m_model->data(index)); m_visibleItems.insert(index, widget); diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index 829736a09..81ad52ac3 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -169,6 +169,7 @@ protected slots: const QSet& roles); private slots: + void currentChanged(int current, int previous); void slotAnimationFinished(QGraphicsWidget* widget, KItemListViewAnimation::AnimationType type); void slotLayoutTimerFinished();