Ref T573, elide text messages for labels

This commit is contained in:
Klaus Basan
2019-03-19 05:31:31 +01:00
committed by Mat Sutcliffe
parent 57ae224c41
commit 53d5ed96af
2 changed files with 46 additions and 0 deletions

View File

@@ -31,6 +31,7 @@
#include <QTabWidget>
#include <QThreadStorage>
#include <QWidget>
#include <QLabel>
#include <QTimer>
#include <Qt>
#include <QPointer>
@@ -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

View File

@@ -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() {}