]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/FancyLineEdit.h
Set svn:eol-style.
[lyx.git] / src / frontends / qt4 / FancyLineEdit.h
1 /**
2  * \file fancylineedit.h
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Nokia Corporation (qt-info@nokia.com)
7  *
8  * Full author contact details are available in file CREDITS.
9  *
10  */
11
12 // Code taken from the Qt Creator project and customized a little
13
14 #ifndef FANCYLINEEDIT_H
15 #define FANCYLINEEDIT_H
16
17 #include <QtGui/QLineEdit>
18 #include <QtGui/QAbstractButton>
19
20 namespace lyx {
21 namespace frontend {
22
23 class FancyLineEditPrivate;
24
25 class IconButton: public QAbstractButton
26 {
27         Q_OBJECT
28         Q_PROPERTY(float iconOpacity READ iconOpacity WRITE setIconOpacity)
29         Q_PROPERTY(bool autoHide READ hasAutoHide WRITE setAutoHide)
30         Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
31 public:
32     explicit IconButton(QWidget *parent = 0);
33     void paintEvent(QPaintEvent *event);
34     void setPixmap(const QPixmap &pixmap) { m_pixmap = pixmap; update(); }
35     QPixmap pixmap() const { return m_pixmap; }
36     float iconOpacity() { return m_iconOpacity; }
37     void setIconOpacity(float value) { m_iconOpacity = value; update(); }
38     void animateShow(bool visible);
39
40     void setAutoHide(bool hide) { m_autoHide = hide; }
41     bool hasAutoHide() const { return m_autoHide; }
42 private:
43     float m_iconOpacity;
44     bool m_autoHide;
45     QPixmap m_pixmap;
46 };
47
48
49 /* A line edit with an embedded pixmap on one side that is connected to
50  * a menu. Additionally, it can display a grayed hintText (like "Type Here to")
51  * when not focused and empty. When connecting to the changed signals and
52  * querying text, one has to be aware that the text is set to that hint
53  * text if isShowingHintText() returns true (that is, does not contain
54  * valid user input).
55  */
56 class FancyLineEdit : public QLineEdit
57 {
58         Q_DISABLE_COPY(FancyLineEdit)
59         Q_OBJECT
60         Q_ENUMS(Side)
61
62 public:
63     enum Side {Left = 0, Right = 1};
64
65     explicit FancyLineEdit(QWidget *parent = 0);
66     ~FancyLineEdit();
67
68     QPixmap buttonPixmap(Side side) const;
69     void setButtonPixmap(Side side, const QPixmap &pixmap);
70
71     QMenu *buttonMenu(Side side) const;
72     void setButtonMenu(Side side, QMenu *menu);
73
74     void setButtonVisible(Side side, bool visible);
75     bool isButtonVisible(Side side) const;
76
77     void setButtonToolTip(Side side, const QString &);
78     void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy);
79
80     // Set whether tabbing in will trigger the menu.
81     void setMenuTabFocusTrigger(Side side, bool v);
82     bool hasMenuTabFocusTrigger(Side side) const;
83
84     // Set if icon should be hidden when text is empty
85     void setAutoHideButton(Side side, bool h);
86     bool hasAutoHideButton(Side side) const;
87
88 Q_SIGNALS:
89         void buttonClicked(Side side);
90     void leftButtonClicked();
91     void rightButtonClicked();
92
93 private Q_SLOTS:
94     void checkButtons(const QString &);
95     void iconClicked();
96
97 protected:
98     virtual void resizeEvent(QResizeEvent *e);
99
100 private:
101     void updateMargins();
102         void updateButtonPositions();
103
104     FancyLineEditPrivate *m_d;
105     QString m_oldText;
106 };
107
108 }
109 }
110
111 #endif // FANCYLINEEDIT_H