1 /* This file is (c) 2012 Tvangeste <i.4m.l33t@yandex.ru>
2  * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
3 
4 #ifndef EXTLINEEDIT_H
5 #define EXTLINEEDIT_H
6 
7 #include <QLineEdit>
8 #include <QAbstractButton>
9 
10 class IconButton: public QAbstractButton
11 {
12     Q_OBJECT
13     Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
14     Q_PROPERTY(float opacity READ opacity WRITE setOpacity)
15 
16 public:
17     explicit IconButton(QWidget * parent = 0);
18     void paintEvent(QPaintEvent * event);
19     void animate(bool visible);
20 
setPixmap(const QPixmap & pixmap)21     void setPixmap(const QPixmap & pixmap) { m_pixmap = pixmap; update(); }
pixmap() const22     QPixmap pixmap() const { return m_pixmap; }
23 
setAutoHide(bool autohide)24     void setAutoHide(bool autohide) { m_autohide = autohide; update(); }
isAutoHide() const25     bool isAutoHide() const { return m_autohide; }
26 
opacity()27     float opacity() { return m_opacity; }
setOpacity(float opacity)28     void setOpacity(float opacity) { m_opacity = opacity; update(); }
29 
30 private:
31     QPixmap m_pixmap;
32     bool m_autohide;
33     float m_opacity;
34 };
35 
36 class ExtLineEdit : public QLineEdit
37 {
38     Q_OBJECT
39     Q_ENUMS(Side)
40 
41 public:
42     enum Side { Left = 0, Right = 1 };
43 
44     explicit ExtLineEdit(QWidget * parent = 0);
45     ~ExtLineEdit();
46 
47     QPixmap buttonPixmap(Side side) const;
48     void setButtonPixmap(Side side, const QPixmap &pixmap);
49 
50     void setButtonVisible(Side side, bool visible);
51     bool isButtonVisible(Side side) const;
52 
53     void setButtonToolTip(Side side, const QString &);
54     void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy);
55 
56     void setButtonAutoHide(Side side, bool autohide);
57 
58 signals:
59     void leftButtonClicked();
60     void rightButtonClicked();
61 
62 private slots:
63     void iconClicked();
64     void updateButtons(QString text);
65 
66 protected:
67     virtual void resizeEvent( QResizeEvent * e );
68 
69 private:
70     void updateMargins();
71     void updateButtonPositions();
72     QPixmap pixmaps[2];
73     IconButton * iconButtons[2];
74     bool iconEnabled[2];
75     QString oldText;
76 };
77 
78 #endif // EXTLINEEDIT_H
79