┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2011-08-03 18:54:10 +0200
committerFrank Reininghaus <[email protected]>2011-08-04 09:52:45 +0200
commit225fd7073e1f8fc35405ad998dd9f382f61b5b4b (patch)
treecaeb678542c4a24789a733ae52231c92e69e973b
parente326199727328bf8e130632361f697e7a350fd9b (diff)
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.
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp7
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp5
-rw-r--r--src/kitemviews/kitemlistview.cpp37
-rw-r--r--src/kitemviews/kitemlistview.h1
4 files changed, 47 insertions, 3 deletions
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<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);
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<QByteArray>& roles);
private slots:
+ void currentChanged(int current, int previous);
void slotAnimationFinished(QGraphicsWidget* widget,
KItemListViewAnimation::AnimationType type);
void slotLayoutTimerFinished();