1 /*
2     Copyright © 2014-2019 by The qTox Project Contributors
3 
4     This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6     qTox is libre software: you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation, either version 3 of the License, or
9     (at your option) any later version.
10 
11     qTox is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with qTox.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef CROPPINGLABEL_H
21 #define CROPPINGLABEL_H
22 
23 #include <QLabel>
24 
25 class QLineEdit;
26 
27 class CroppingLabel : public QLabel
28 {
29     Q_OBJECT
30 public:
31     explicit CroppingLabel(QWidget* parent = nullptr);
32 
33 public slots:
34     void editBegin();
35     void setEditable(bool editable);
36     void setElideMode(Qt::TextElideMode elide);
37 
38     QString fullText();
39 
40 public slots:
41     void setText(const QString& text);
42     void setPlaceholderText(const QString& text);
43     void minimizeMaximumWidth();
44 
45 signals:
46     void editFinished(const QString& newText);
47     void editRemoved();
48     void clicked();
49 
50 protected:
51     void paintEvent(QPaintEvent* paintEvent) override;
52     void setElidedText();
53     void hideTextEdit();
54     void showTextEdit();
55     virtual void resizeEvent(QResizeEvent* ev) final override;
56     virtual QSize sizeHint() const final override;
57     virtual QSize minimumSizeHint() const final override;
58     virtual void mouseReleaseEvent(QMouseEvent* e) final override;
59 
60 private slots:
61     void editingFinished();
62 
63 private:
64     QString origText;
65     QLineEdit* textEdit;
66     bool blockPaintEvents;
67     bool editable;
68     Qt::TextElideMode elideMode;
69 };
70 
71 #endif // CROPPINGLABEL_H
72