diff options
Diffstat (limited to 'src/widgets/elidedlabel/elidedlabel.h')
-rw-r--r-- | src/widgets/elidedlabel/elidedlabel.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/widgets/elidedlabel/elidedlabel.h b/src/widgets/elidedlabel/elidedlabel.h new file mode 100644 index 0000000..7dc610a --- /dev/null +++ b/src/widgets/elidedlabel/elidedlabel.h @@ -0,0 +1,49 @@ +#pragma once +#include <QLabel> +#include <QPainter> +#include <QResizeEvent> +#include <QString> +#include <QFont> + +// A label that elides its text when not enough geometry is available to show all of the text. +// Currently only capable of one-line. +class ElidedLabel : public QLabel { + Q_OBJECT + +private: + Qt::TextElideMode m_elide_mode; + QString m_cached_elided_text; + + +public: + ElidedLabel(QWidget* parent = NULL); + ElidedLabel(const QString& txt, QWidget* parent = NULL); + ElidedLabel(const QString& txt, Qt::TextElideMode elideMode = Qt::ElideRight, QWidget* parent = NULL); + +public: + // Set the elide mode used for displaying text. + inline void setElideMode(Qt::TextElideMode elideMode) { + m_elide_mode = elideMode; + updateGeometry(); + } + + // Get the elide mode currently used to display text. + inline Qt::TextElideMode elideMode() const { + return m_elide_mode; + } + + + +public: // QLabel overrides + void setText(const QString&); // note: not virtual so no polymorphism ... + + +protected: // QLabel overrides + virtual void paintEvent(QPaintEvent*) override; + virtual void resizeEvent(QResizeEvent*) override; + +protected: + // Cache the elided text so as to not recompute it every paint event + void cacheElidedText(int w); + +}; |