22#include <QContextMenuEvent>
26#include <QApplication>
28#include <QTextDocument>
31class KSqueezedTextLabelPrivate
35 void _k_copyFullText() {
36 QApplication::clipboard()->setText(fullText);
40 Qt::TextElideMode elideMode;
45 d(new KSqueezedTextLabelPrivate)
47 setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
49 d->elideMode = Qt::ElideMiddle;
55 d(new KSqueezedTextLabelPrivate)
57 setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
58 d->elideMode = Qt::ElideMiddle;
73 QSize sh = QLabel::minimumSizeHint();
81 QFontMetrics fm(fontMetrics());
82 int textWidth = fm.width(d->fullText);
83 if (textWidth > maxWidth) {
86 return QSize(textWidth, QLabel::sizeHint().height());
103 QFontMetrics fm(fontMetrics());
104 int labelWidth = size().width();
105 QStringList squeezedLines;
106 bool squeezed =
false;
107 Q_FOREACH(
const QString& line, d->fullText.split(
'\n')) {
108 int lineWidth = fm.width(line);
109 if (lineWidth > labelWidth) {
111 squeezedLines << fm.elidedText(line, d->elideMode, labelWidth);
113 squeezedLines << line;
118 QLabel::setText(squeezedLines.join(
"\n"));
119 setToolTip(d->fullText);
121 QLabel::setText(d->fullText);
122 setToolTip(QString());
129 QString tmpFull(d->fullText);
130 QLabel::setAlignment(alignment);
131 d->fullText = tmpFull;
161 const bool squeezed = text() != d->fullText;
162 const bool showCustomPopup = squeezed;
163 if (showCustomPopup) {
167 connect(act, SIGNAL(triggered()),
this, SLOT(_k_copyFullText()));
171 menu.exec(ev->globalPos());
173 QLabel::contextMenuEvent(ev);
179#if QT_VERSION >= 0x040700
180 if (QApplication::clipboard()->supportsSelection() &&
181 textInteractionFlags() != Qt::NoTextInteraction &&
182 ev->button() == Qt::LeftButton &&
183 !d->fullText.isEmpty() &&
186 QString txt = selectedText();
187 const QChar ellipsisChar(0x2026);
188 const int dotsPos = txt.indexOf(ellipsisChar);
194 const int start = selectionStart();
195 int charsAfterSelection = text().length() - start - selectedText().length();
198 if (textFormat() == Qt::RichText
199 || (textFormat() == Qt::AutoText && Qt::mightBeRichText(txt))) {
200 txt.replace(QRegExp(
"<[^>]*>"),
"");
202 charsAfterSelection -= d->fullText.length() - txt.length();
204 txt = txt.mid(selectionStart(), txt.length() - start - charsAfterSelection);
206 QApplication::clipboard()->setText(txt, QClipboard::Selection);
210 QLabel::mouseReleaseEvent(ev);
214#include "ksqueezedtextlabel.moc"
Class to encapsulate user-driven action or event.
static QRect desktopGeometry(const QPoint &point)
This function returns the desktop geometry for an application that needs to set the geometry of a wid...
virtual void setAlignment(Qt::Alignment)
Overridden for internal reasons; the API remains unaffected.
void contextMenuEvent(QContextMenuEvent *)
virtual QSize minimumSizeHint() const
void setTextElideMode(Qt::TextElideMode mode)
Sets the text elide mode.
void clear()
Clears the text.
KSqueezedTextLabel(QWidget *parent=0)
Default constructor.
QString fullText() const
Get the full text set via setText.
void resizeEvent(QResizeEvent *)
Called when widget is resized.
virtual ~KSqueezedTextLabel()
void setText(const QString &text)
Sets the text.
void squeezeTextToLabel()
does the dirty work
Qt::TextElideMode textElideMode
void mouseReleaseEvent(QMouseEvent *)
virtual QSize sizeHint() const
QString i18n(const char *text)