From 2bdce34fe1e6613d2747ab798bccb4fa7de8ca3e Mon Sep 17 00:00:00 2001 From: Emmanuel Pescosta Date: Sat, 24 Aug 2013 21:00:26 +0200 Subject: Adjust the size and position of the selection toggle on icon resize (when changing the zoomlevel). BUG: 310412 REVIEW: 112250 FIXED-IN: 4.11.1 --- src/kitemviews/kitemlistwidget.cpp | 6 +++ .../private/kitemlistselectiontoggle.cpp | 43 ++++++++++++++++------ src/kitemviews/private/kitemlistselectiontoggle.h | 2 + 3 files changed, 40 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 6a7111ad7..85cd70c43 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -451,6 +451,12 @@ void KItemListWidget::resizeEvent(QGraphicsSceneResizeEvent* event) { QGraphicsWidget::resizeEvent(event); clearHoverCache(); + + if (m_selectionToggle) { + const QRectF& toggleRect = selectionToggleRect(); + m_selectionToggle->setPos(toggleRect.topLeft()); + m_selectionToggle->resize(toggleRect.size()); + } } qreal KItemListWidget::hoverOpacity() const diff --git a/src/kitemviews/private/kitemlistselectiontoggle.cpp b/src/kitemviews/private/kitemlistselectiontoggle.cpp index 66da6a727..6bbf3c2ec 100644 --- a/src/kitemviews/private/kitemlistselectiontoggle.cpp +++ b/src/kitemviews/private/kitemlistselectiontoggle.cpp @@ -79,28 +79,49 @@ void KItemListSelectionToggle::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) m_pixmap = QPixmap(); } +void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent* event) +{ + QGraphicsWidget::resizeEvent(event); + + if (!m_pixmap.isNull()) { + const int pixmapSize = m_pixmap.size().width(); // Pixmap width is always equal pixmap height + + if (pixmapSize != iconSize()) { + // If the required icon size is different from the actual pixmap size, + // overwrite the m_pixmap with an empty pixmap and reload the new + // icon on next re-painting. + m_pixmap = QPixmap(); + } + } +} + void KItemListSelectionToggle::updatePixmap() { const char* icon = m_checked ? "list-remove" : "list-add"; + m_pixmap = KIconLoader::global()->loadIcon(QLatin1String(icon), KIconLoader::NoGroup, iconSize()); + + if (m_hovered) { + KIconLoader::global()->iconEffect()->apply(m_pixmap, KIconLoader::Desktop, KIconLoader::ActiveState); + } +} + +int KItemListSelectionToggle::iconSize() const +{ + const int iconSize = qMin(size().width(), size().height()); - int iconSize = qMin(size().width(), size().height()); if (iconSize < KIconLoader::SizeSmallMedium) { - iconSize = KIconLoader::SizeSmall; + return KIconLoader::SizeSmall; } else if (iconSize < KIconLoader::SizeMedium) { - iconSize = KIconLoader::SizeSmallMedium; + return KIconLoader::SizeSmallMedium; } else if (iconSize < KIconLoader::SizeLarge) { - iconSize = KIconLoader::SizeMedium; + return KIconLoader::SizeMedium; } else if (iconSize < KIconLoader::SizeHuge) { - iconSize = KIconLoader::SizeLarge; + return KIconLoader::SizeLarge; } else if (iconSize < KIconLoader::SizeEnormous) { - iconSize = KIconLoader::SizeHuge; + return KIconLoader::SizeHuge; } - m_pixmap = KIconLoader::global()->loadIcon(QLatin1String(icon), KIconLoader::NoGroup, iconSize); - - if (m_hovered) { - KIconLoader::global()->iconEffect()->apply(m_pixmap, KIconLoader::Desktop, KIconLoader::ActiveState); - } + return iconSize; } #include "kitemlistselectiontoggle.moc" diff --git a/src/kitemviews/private/kitemlistselectiontoggle.h b/src/kitemviews/private/kitemlistselectiontoggle.h index a8050d811..ba29293f6 100644 --- a/src/kitemviews/private/kitemlistselectiontoggle.h +++ b/src/kitemviews/private/kitemlistselectiontoggle.h @@ -46,9 +46,11 @@ public: protected: virtual void hoverEnterEvent(QGraphicsSceneHoverEvent* event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent* event); + virtual void resizeEvent(QGraphicsSceneResizeEvent* event); private: void updatePixmap(); + int iconSize() const; private: bool m_checked; -- cgit v1.3 From f830e1179ceb7bb31e449215294e5f0ffa3ed6ec Mon Sep 17 00:00:00 2001 From: Frank Reininghaus Date: Sun, 25 Aug 2013 16:24:20 +0200 Subject: Fix filename trucation issues in Icons View with maximum number of lines When the name of a file is too long to be shown inside the maximum number of lines, the last line is elided. However, there were several problems before this commit: (a) "lastTextLine", which contains the text to be elided, was not assigned the complete remaining text, but only the part that would be put into the last line if there were more lines following. This may be less than what would fit into the line because we try to not break the text at random points. (b) QFontMetrics::elidedText() was not given the width that is available for the last line (that would be maxWidth), but only the width that would be occupied by the text if there were more lines following (line.naturalTextWidth()). (c) The variable "nameWidth", which is required to calculate the QRectF that is reserved for the name, was not updated correctly. The result is that the text was sometimes trucated too early (especially if there would be a line break early in the text if we had more lines available), that there may be insufficient space to show the "...", and that the hover/selection rectangle might be too narrow. BUG: 304558 BUG: 321882 FIXED-IN: 4.11.1 REVIEW: 112265 --- src/kitemviews/kstandarditemlistwidget.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index 483517ecc..bc0503663 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -1030,12 +1030,15 @@ void KStandardItemListWidget::updateIconsLayoutTextCache() const int textLength = line.textStart() + line.textLength(); if (textLength < nameText.length()) { // Elide the last line of the text - QString lastTextLine = nameText.mid(line.textStart(), line.textLength()); + QString lastTextLine = nameText.mid(line.textStart()); lastTextLine = m_customizedFontMetrics.elidedText(lastTextLine, Qt::ElideRight, - line.naturalTextWidth() - 1); + maxWidth); const QString elidedText = nameText.left(line.textStart()) + lastTextLine; nameTextInfo->staticText.setText(elidedText); + + const qreal lastLineWidth = m_customizedFontMetrics.boundingRect(lastTextLine).width(); + nameWidth = qMax(nameWidth, lastLineWidth); } break; } -- cgit v1.3 From 092c820023466f5291ba7d52f55a8e7b9939a502 Mon Sep 17 00:00:00 2001 From: Christoph Feck Date: Sun, 25 Aug 2013 17:40:49 +0200 Subject: Move cursor to begin/end of selection before canceling it Makes Left/Right keys consistent with QLineEdit behavior. BUG: 323946 FIXED-IN: 4.11.1 REVIEW: 112256 --- src/kitemviews/private/kitemlistroleeditor.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') diff --git a/src/kitemviews/private/kitemlistroleeditor.cpp b/src/kitemviews/private/kitemlistroleeditor.cpp index 9f20afea2..0a48f1ba0 100644 --- a/src/kitemviews/private/kitemlistroleeditor.cpp +++ b/src/kitemviews/private/kitemlistroleeditor.cpp @@ -93,6 +93,22 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) emitRoleEditingFinished(); event->accept(); return; + case Qt::Key_Left: + case Qt::Key_Right: { + QTextCursor cursor = textCursor(); + if (event->modifiers() == Qt::NoModifier && cursor.hasSelection()) { + if (event->key() == Qt::Key_Left) { + cursor.setPosition(cursor.selectionStart()); + } else { + cursor.setPosition(cursor.selectionEnd()); + } + cursor.clearSelection(); + setTextCursor(cursor); + event->accept(); + return; + } + break; + } default: break; } -- cgit v1.3