diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-12 03:25:00 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-12 03:25:00 +0200 |
| commit | c71a08e2b44521590a3f48e6cd6b15394890b48f (patch) | |
| tree | c7528b48c3a35166a91f0bb92f96acae5d009eee /src | |
| parent | 0c57280c4eec7ddce569f89cb35de917d8b4d08e (diff) | |
| download | kristall-c71a08e2b44521590a3f48e6cd6b15394890b48f.tar.gz | |
Fixes two overflow bugs in labels. No weird scaling based on links anymore.
Diffstat (limited to 'src')
| -rw-r--r-- | src/certificateselectiondialog.ui | 3 | ||||
| -rw-r--r-- | src/elidelabel.cpp | 55 | ||||
| -rw-r--r-- | src/elidelabel.hpp | 28 | ||||
| -rw-r--r-- | src/kristall.pro | 2 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 6 | ||||
| -rw-r--r-- | src/mainwindow.hpp | 4 |
6 files changed, 95 insertions, 3 deletions
diff --git a/src/certificateselectiondialog.ui b/src/certificateselectiondialog.ui index 0244001..006f973 100644 --- a/src/certificateselectiondialog.ui +++ b/src/certificateselectiondialog.ui @@ -32,6 +32,9 @@ <property name="text"> <string>TextLabel</string> </property> + <property name="wordWrap"> + <bool>true</bool> + </property> </widget> </item> <item> diff --git a/src/elidelabel.cpp b/src/elidelabel.cpp new file mode 100644 index 0000000..8830f69 --- /dev/null +++ b/src/elidelabel.cpp @@ -0,0 +1,55 @@ +#include "elidelabel.hpp" + +#include <QPainter> + +ElideLabel::ElideLabel(QWidget* parent) + : QLabel(parent) +{ + m_elideMode = Qt::ElideNone; +} + +ElideLabel::ElideLabel(const QString &text, QWidget* parent) : QLabel(text, parent) +{ + m_elideMode = Qt::ElideNone; +} + +ElideLabel::~ElideLabel() +{ +} + +void ElideLabel::setElideMode(Qt::TextElideMode mode) +{ + m_elideMode = mode; +} + +Qt::TextElideMode ElideLabel::elideMode() const +{ + return m_elideMode; +} + +void ElideLabel::paintEvent(QPaintEvent * event) +{ + if (m_elideMode == Qt::ElideNone) + { + QLabel::paintEvent(event); + } + else + { + QFrame::paintEvent(event); + QPainter painter(this); + QRect r = contentsRect(); + painter.drawText(r, alignment(), fontMetrics().elidedText(text(), m_elideMode, r.width())); + } +} + +QSize ElideLabel::minimumSizeHint() const +{ + if (m_elideMode != Qt::ElideNone) + { + const QFontMetrics& fm = fontMetrics(); + QSize size(fm.width("..."), fm.height()); + return size; + } + + return QLabel::minimumSizeHint(); +} diff --git a/src/elidelabel.hpp b/src/elidelabel.hpp new file mode 100644 index 0000000..9eae69d --- /dev/null +++ b/src/elidelabel.hpp @@ -0,0 +1,28 @@ +#ifndef ELIDELABEL_HPP +#define ELIDELABEL_HPP + +#include <QLabel> + +class ElideLabel : public QLabel +{ + Q_OBJECT + Q_PROPERTY(Qt::TextElideMode elideMode READ elideMode WRITE setElideMode) + +public: + ElideLabel(QWidget* parent = 0); + ElideLabel(const QString &text, QWidget* parent = 0); + ~ElideLabel(); + + void setElideMode(Qt::TextElideMode mode); + Qt::TextElideMode elideMode() const; + + QSize minimumSizeHint() const; + +protected: + virtual void paintEvent(QPaintEvent * event); + +private: + Qt::TextElideMode m_elideMode; +}; + +#endif // ELIDELABEL_HPP diff --git a/src/kristall.pro b/src/kristall.pro index 8c98a4b..991a499 100644 --- a/src/kristall.pro +++ b/src/kristall.pro @@ -41,6 +41,7 @@ SOURCES += \ cryptoidentity.cpp \ documentoutlinemodel.cpp \ documentstyle.cpp \ + elidelabel.cpp \ favouritecollection.cpp \ fingerclient.cpp \ geminiclient.cpp \ @@ -67,6 +68,7 @@ HEADERS += \ cryptoidentity.hpp \ documentoutlinemodel.hpp \ documentstyle.hpp \ + elidelabel.hpp \ favouritecollection.hpp \ fingerclient.hpp \ geminiclient.hpp \ diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ec8af9c..1c0dc9e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -13,18 +13,20 @@ #include "ioutil.hpp" #include "kristall.hpp" + MainWindow::MainWindow(QApplication * app, QWidget *parent) : QMainWindow(parent), application(app), ui(new Ui::MainWindow), - url_status(new QLabel(this)), + url_status(new ElideLabel(this)), file_size(new QLabel(this)), file_mime(new QLabel(this)), load_time(new QLabel(this)) { - ui->setupUi(this); + this->url_status->setElideMode(Qt::ElideMiddle); + this->statusBar()->addWidget(this->url_status); this->statusBar()->addPermanentWidget(this->file_mime); this->statusBar()->addPermanentWidget(this->file_size); diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index f125551..174f06a 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -10,6 +10,8 @@ #include "geminirenderer.hpp" #include "protocolsetup.hpp" +#include "elidelabel.hpp" + QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE @@ -96,7 +98,7 @@ public: private: Ui::MainWindow *ui; - QLabel * url_status; + ElideLabel * url_status; QLabel * file_size; QLabel * file_mime; QLabel * load_time; |
