]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Underline the current item in KFileItemListView
authorFrank Reininghaus <frank78ac@googlemail.com>
Wed, 3 Aug 2011 16:54:10 +0000 (18:54 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Thu, 4 Aug 2011 07:52:45 +0000 (09:52 +0200)
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.

src/kitemviews/kfileitemlistwidget.cpp
src/kitemviews/kitemlistcontroller.cpp
src/kitemviews/kitemlistview.cpp
src/kitemviews/kitemlistview.h

index 4abc4d11587139481adffd25b8951a98c541e78c..91c0cb597eeb4a21459609375a4c9e28b71fb2f9 100644 (file)
@@ -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]);
     }
index aab40631e248342f664e541be09cceced5d51267..2d72a96de19867ef5c4d5afba6cb2c89fe6b1f7f 100644 (file)
@@ -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);
index d5e2bf87583fa81af77e8fe22040cc1a7dd39709..b89f4d0f558af40a55c8a56327a6a2e7d56ea7d6 100644 (file)
@@ -645,6 +645,27 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
     }
 }
 
+void KItemListView::currentChanged(int current, int previous)
+{
+    Q_UNUSED(previous);
+
+    QHashIterator<int, KItemListWidget*> 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);
index 829736a09c11e4c093cfde9f3cd523a97e84634c..81ad52ac3cf5b3f2d342c1ac40725c4b85ded36a 100644 (file)
@@ -169,6 +169,7 @@ protected slots:
                                   const QSet<QByteArray>& roles);
 
 private slots:
+    void currentChanged(int current, int previous);
     void slotAnimationFinished(QGraphicsWidget* widget,
                                KItemListViewAnimation::AnimationType type);
     void slotLayoutTimerFinished();