]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/FancyLineEdit.h
Compile fix for qt versions below 4.6.
[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 Q_SIGNALS:
66     void buttonClicked(Side side);
67     void leftButtonClicked();
68     void rightButtonClicked();
69
70 #if QT_VERSION >= 0x040600
71 public:
72     explicit FancyLineEdit(QWidget *parent = 0);
73     ~FancyLineEdit();
74
75     QPixmap buttonPixmap(Side side) const;
76     void setButtonPixmap(Side side, const QPixmap &pixmap);
77
78     QMenu *buttonMenu(Side side) const;
79     void setButtonMenu(Side side, QMenu *menu);
80
81     void setButtonVisible(Side side, bool visible);
82     bool isButtonVisible(Side side) const;
83
84     void setButtonToolTip(Side side, const QString &);
85     void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy);
86
87     // Set whether tabbing in will trigger the menu.
88     void setMenuTabFocusTrigger(Side side, bool v);
89     bool hasMenuTabFocusTrigger(Side side) const;
90
91     // Set if icon should be hidden when text is empty
92     void setAutoHideButton(Side side, bool h);
93     bool hasAutoHideButton(Side side) const;
94
95 private Q_SLOTS:
96     void checkButtons(const QString &);
97     void iconClicked();
98
99 protected:
100     virtual void resizeEvent(QResizeEvent *e);
101
102 private:
103     void updateMargins();
104         void updateButtonPositions();
105
106     FancyLineEditPrivate *m_d;
107     QString m_oldText;
108 #else
109 public:
110         explicit FancyLineEdit(QWidget *parent = 0) 
111                 : QLineEdit(parent) 
112         {}
113 #endif // QT_VERSION >= 0x040600*/
114 };
115
116 }
117 }
118
119 #endif // FANCYLINEEDIT_H