2 * \file fancylineedit.h
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Nokia Corporation (qt-info@nokia.com)
8 * Full author contact details are available in file CREDITS.
12 // Code taken from the Qt Creator project and customized a little
14 #ifndef FANCYLINEEDIT_H
15 #define FANCYLINEEDIT_H
17 #include <QtGui/QLineEdit>
18 #include <QtGui/QAbstractButton>
23 class FancyLineEditPrivate;
25 class IconButton: public QAbstractButton
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)
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);
40 void setAutoHide(bool hide) { m_autoHide = hide; }
41 bool hasAutoHide() const { return m_autoHide; }
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
56 class FancyLineEdit : public QLineEdit
58 Q_DISABLE_COPY(FancyLineEdit)
63 enum Side {Left = 0, Right = 1};
65 explicit FancyLineEdit(QWidget *parent = 0);
68 QPixmap buttonPixmap(Side side) const;
69 void setButtonPixmap(Side side, const QPixmap &pixmap);
71 QMenu *buttonMenu(Side side) const;
72 void setButtonMenu(Side side, QMenu *menu);
74 void setButtonVisible(Side side, bool visible);
75 bool isButtonVisible(Side side) const;
77 void setButtonToolTip(Side side, const QString &);
78 void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy);
80 // Set whether tabbing in will trigger the menu.
81 void setMenuTabFocusTrigger(Side side, bool v);
82 bool hasMenuTabFocusTrigger(Side side) const;
84 // Set if icon should be hidden when text is empty
85 void setAutoHideButton(Side side, bool h);
86 bool hasAutoHideButton(Side side) const;
89 void buttonClicked(Side side);
90 void leftButtonClicked();
91 void rightButtonClicked();
94 void checkButtons(const QString &);
98 virtual void resizeEvent(QResizeEvent *e);
101 void updateMargins();
102 void updateButtonPositions();
104 FancyLineEditPrivate *m_d;
111 #endif // FANCYLINEEDIT_H