LeechCraft  0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
elidinglabel.cpp
Go to the documentation of this file.
1 /**********************************************************************
2  * LeechCraft - modular cross-platform feature rich internet client.
3  * Copyright (C) 2006-2014 Georg Rudoy
4  *
5  * Distributed under the Boost Software License, Version 1.0.
6  * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7  **********************************************************************/
8 
9 #include "elidinglabel.h"
10 
11 #include <QEvent>
12 
13 namespace LC::Util
14 {
15  ElidingLabel::ElidingLabel (QWidget *parent)
16  : QLabel { parent }
17  {
18  setTextFormat (Qt::PlainText);
19  }
20 
21  void ElidingLabel::SetFullText (const QString& text)
22  {
23  if (FullText_ == text)
24  return;
25 
26  FullText_ = text;
27  UpdateElide ();
28  }
29 
30  QString ElidingLabel::GetFullText () const
31  {
32  return FullText_;
33  }
34 
35  void ElidingLabel::SetElideMode (Qt::TextElideMode mode)
36  {
37  if (ElideMode_ == mode)
38  return;
39 
40  ElideMode_ = mode;
41  UpdateElide ();
42  }
43 
44  Qt::TextElideMode ElidingLabel::GetElideMode () const
45  {
46  return ElideMode_;
47  }
48 
49  QSize ElidingLabel::sizeHint () const
50  {
51  const auto& cm = contentsMargins ();
52 
53  auto result = QLabel::sizeHint ();
54  const auto textWidth = fontMetrics ().horizontalAdvance (FullText_) + 1;
55  result.setWidth (std::max (result.width (), textWidth + cm.left () + cm.right ()));
56  return result;
57  }
58 
59  void ElidingLabel::changeEvent (QEvent *ev)
60  {
61  QLabel::changeEvent (ev);
62  switch (ev->type ())
63  {
64  case QEvent::FontChange:
65  case QEvent::StyleChange:
66  case QEvent::ApplicationFontChange:
67  case QEvent::LayoutDirectionChange:
68  UpdateElide ();
69  break;
70  default:
71  break;
72  }
73  }
74 
75  void ElidingLabel::resizeEvent (QResizeEvent *ev)
76  {
77  QLabel::resizeEvent (ev);
78  UpdateElide ();
79  }
80 
81  void ElidingLabel::UpdateElide ()
82  {
83  const auto& fm = fontMetrics ();
84 
85  const auto& elided = fm.elidedText (FullText_, ElideMode_, contentsRect ().width ());
86  setText (elided);
87  }
88 }
constexpr detail::AggregateType< detail::AggregateFunction::Max, Ptr > max
Definition: oral.h:1110
QString GetFullText() const
QSize sizeHint() const override
void SetElideMode(Qt::TextElideMode)
void changeEvent(QEvent *) override
void SetFullText(const QString &)
ElidingLabel(QWidget *=nullptr)
Qt::TextElideMode GetElideMode() const
void resizeEvent(QResizeEvent *) override