1 /* elided_label.cpp
2  *
3  * Wireshark - Network traffic analyzer
4  * By Gerald Combs <gerald@wireshark.org>
5  * Copyright 1998 Gerald Combs
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  */
9 
10 #include <ui/qt/widgets/elided_label.h>
11 
12 #include <ui/qt/utils/color_utils.h>
13 
14 #include <QFontMetrics>
15 #include <QResizeEvent>
16 
ElidedLabel(QWidget * parent)17 ElidedLabel::ElidedLabel(QWidget *parent) :
18     QLabel(parent),
19     small_text_(false)
20 {
21     QFontMetrics fm(font());
22     setMinimumWidth(fm.height() * 5); // em-widths
23 }
24 
setUrl(const QString & url)25 void ElidedLabel::setUrl(const QString &url)
26 {
27     url_ = url;
28     updateText();
29 }
30 
event(QEvent * event)31 bool ElidedLabel::event(QEvent *event)
32 {
33     switch (event->type()) {
34     case QEvent::ApplicationPaletteChange:
35         updateText();
36         break;
37     default:
38         break;
39 
40     }
41     return QLabel::event(event);
42 }
43 
resizeEvent(QResizeEvent *)44 void ElidedLabel::resizeEvent(QResizeEvent *)
45 {
46     updateText();
47 }
48 
updateText()49 void ElidedLabel::updateText()
50 {
51     // XXX We should probably move text drawing to PaintEvent to match
52     // LabelStack.
53     int fudged_width = small_text_ ? width() * 1.2 : width();
54     QString elided_text = fontMetrics().elidedText(full_text_, Qt::ElideMiddle, fudged_width);
55     QString label_text = small_text_ ? "<small><i>" : "<i>";
56 
57     if (url_.length() > 0) {
58         label_text.prepend(ColorUtils::themeLinkStyle());
59         label_text.append(QString("<a href=\"%1\">%2</a>")
60                 .arg(url_)
61                 .arg(elided_text)
62                 );
63     } else {
64         label_text += elided_text;
65     }
66     label_text += small_text_ ? "</i></small> " : "</i> ";
67     QLabel::setText(label_text);
68 }
69 
clear()70 void ElidedLabel::clear()
71 {
72     full_text_.clear();
73     url_.clear();
74     setToolTip("");
75     updateText();
76 }
77 
setText(const QString & text)78 void ElidedLabel::setText(const QString &text)
79 {
80     full_text_ = text;
81     updateText();
82 }
83