From 53d5ed96afbfa83c602e1661ef5a9ef53354b97c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 19 Mar 2019 05:31:31 +0100 Subject: [PATCH] Ref T573, elide text messages for labels --- src/blackgui/guiutility.cpp | 39 +++++++++++++++++++++++++++++++++++++ src/blackgui/guiutility.h | 7 +++++++ 2 files changed, 46 insertions(+) diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index 2b78b20fe..a2a1bf4f8 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -645,4 +646,42 @@ namespace BlackGui } return nullptr; } + + void CGuiUtility::setElidedText(QLabel *label, const QString &text, Qt::TextElideMode mode) + { + if (!label) { return; } + + label->setToolTip(text); + if (mode == Qt::ElideNone) + { + label->setText(text); + return; + } + + const QFontMetrics metrics(label->font()); + const int width = qMax(label->width() - 2, 0); + const QString clippedText = metrics.elidedText(text, mode, width); + label->setText(clippedText); + } + + void CGuiUtility::setElidedText(QLabel *label, const QString &shortText, const QString &longText, Qt::TextElideMode mode) + { + if (!label) { return; } + if (shortText.isEmpty()) { CGuiUtility::setElidedText(label, longText, mode); return; } + if (longText.isEmpty()) { CGuiUtility::setElidedText(label, shortText, mode); return; } + + label->setToolTip(longText); + const QFontMetrics metrics(label->font()); + const int width = qMax(label->width() - 2, 0); + const int wl = metrics.width(longText); + if (wl >= width) { label->setText(longText); return; } + if (qRound(wl * 0.85) > wl) + { + const QString clippedText = metrics.elidedText(longText, mode, width); + label->setText(clippedText); + return; + } + const QString clippedText = metrics.elidedText(shortText, mode, width); + label->setText(clippedText); + } } // ns diff --git a/src/blackgui/guiutility.h b/src/blackgui/guiutility.h index 17623067b..aea1b7783 100644 --- a/src/blackgui/guiutility.h +++ b/src/blackgui/guiutility.h @@ -32,6 +32,7 @@ class QMimeData; class QLineEdit; class QTabWidget; class QDialog; +class QLabel; class QGraphicsOpacityEffect; class QAbstractItemModel; @@ -237,6 +238,12 @@ namespace BlackGui //! Find parent dialog if there is any, otherwise null static QDialog *findParentDialog(QWidget *widget); + //! Set elided text + static void setElidedText(QLabel *label, const QString &text, Qt::TextElideMode mode = Qt::ElideMiddle); + + //! Set elided text + static void setElidedText(QLabel *label, const QString &shortText, const QString &longText, Qt::TextElideMode mode = Qt::ElideMiddle); + private: //! No constructor, use static functions only CGuiUtility() {}