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)17ElidedLabel::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)25void ElidedLabel::setUrl(const QString &url) 26 { 27 url_ = url; 28 updateText(); 29 } 30 event(QEvent * event)31bool 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 *)44void ElidedLabel::resizeEvent(QResizeEvent *) 45 { 46 updateText(); 47 } 48 updateText()49void 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()70void ElidedLabel::clear() 71 { 72 full_text_.clear(); 73 url_.clear(); 74 setToolTip(""); 75 updateText(); 76 } 77 setText(const QString & text)78void ElidedLabel::setText(const QString &text) 79 { 80 full_text_ = text; 81 updateText(); 82 } 83