aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-12 03:25:00 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-12 03:25:00 +0200
commitc71a08e2b44521590a3f48e6cd6b15394890b48f (patch)
treec7528b48c3a35166a91f0bb92f96acae5d009eee /src
parent0c57280c4eec7ddce569f89cb35de917d8b4d08e (diff)
downloadkristall-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.ui3
-rw-r--r--src/elidelabel.cpp55
-rw-r--r--src/elidelabel.hpp28
-rw-r--r--src/kristall.pro2
-rw-r--r--src/mainwindow.cpp6
-rw-r--r--src/mainwindow.hpp4
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;