1 /*
2  * This file is part of Licq, an instant messaging client for UNIX.
3  * Copyright (C) 2007-2009 Licq developers
4  *
5  * Licq is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * Licq is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with Licq; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19 
20 #ifndef SKINNABLEBUTTON_H
21 #define SKINNABLEBUTTON_H
22 
23 #include <QPushButton>
24 
25 namespace LicqQtGui
26 {
27 
28 namespace Config
29 {
30 class ButtonSkin;
31 }
32 
33 /**
34  * Extended QPushButton which can be skinned by using images instead of text
35  */
36 class SkinnableButton : public QPushButton
37 {
38   Q_OBJECT
39 
40 public:
41   /**
42    * Constructor, create a skinnable button and apply a skin
43    *
44    * @param skin Button skin to apply
45    * @param defaultText Text to display if skin doesn't contain a caption
46    * @param parent Parent widget
47    */
48   SkinnableButton(const Config::ButtonSkin& skin, const QString& defaultText, QWidget* parent = NULL);
49 
50   /**
51    * Constructor, create a default skinnable button
52    *
53    * @param defaultText Text to display if skin doesn't contain a caption
54    * @param parent Parent widget
55    */
56   SkinnableButton(const QString& defaultText, QWidget* parent = 0);
57 
58   /**
59    * Apply a skin
60    *
61    * @param skin New skin to use
62    */
63   void applySkin(const Config::ButtonSkin& skin);
64 
65   /**
66    * Get the keyboard modifiers active when the button was last pressed
67    *
68    * @return Mask of active keyboard modifiers
69    */
70   Qt::KeyboardModifiers modifiersWhenPressed();
71 
72 private:
73   /**
74    * Mouse button pressed
75    *
76    * @param e Event object
77    */
78   virtual void mousePressEvent(QMouseEvent* e);
79 
80   /**
81    * Cursor has entered button
82    *
83    * @param e Event object
84    */
85   virtual void enterEvent(QEvent* e);
86 
87   /**
88    * Cursor has left button
89    *
90    * @param e Event object
91    */
92   virtual void leaveEvent(QEvent* e);
93 
94   /**
95    * Draw button
96    *
97    * @param e Event object
98    */
99   virtual void paintEvent(QPaintEvent* e);
100 
101 
102   QString myDefaultText;
103   Qt::KeyboardModifiers myPressedModifiers;
104   QPixmap myNormalImage, myHighlightedImage, myPressedImage;
105 };
106 
107 } // namespace LicqQtGui
108 
109 #endif
110