diff options
author | 2021-04-05 02:11:25 +0530 | |
---|---|---|
committer | 2021-04-05 02:11:25 +0530 | |
commit | 9ea334d08f42f3c362e86499dc3c0ed658bb428c (patch) | |
tree | 85eb15c519bcff8a5e3c4f8406f068b7c412b789 /src/elidedlabel.h | |
parent | e79b447b31ad9ab1ed42fd232f8789fad38d780b (diff) | |
download | whatsie-9ea334d08f42f3c362e86499dc3c0ed658bb428c.tar.gz whatsie-9ea334d08f42f3c362e86499dc3c0ed658bb428c.zip |
src init
Diffstat (limited to 'src/elidedlabel.h')
-rw-r--r-- | src/elidedlabel.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/elidedlabel.h b/src/elidedlabel.h new file mode 100644 index 0000000..1ce5210 --- /dev/null +++ b/src/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, Qt::WindowFlags f = 0); + ElidedLabel(const QString& txt, QWidget* parent = NULL, Qt::WindowFlags f = 0); + ElidedLabel(const QString& txt, Qt::TextElideMode elideMode = Qt::ElideRight, QWidget* parent = NULL, Qt::WindowFlags f = 0); + +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); + +}; |