summaryrefslogtreecommitdiff
path: root/libopie/oclickablelabel.cpp
Unidiff
Diffstat (limited to 'libopie/oclickablelabel.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/oclickablelabel.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/libopie/oclickablelabel.cpp b/libopie/oclickablelabel.cpp
new file mode 100644
index 0000000..43a0524
--- a/dev/null
+++ b/libopie/oclickablelabel.cpp
@@ -0,0 +1,88 @@
1#include "oclickablelabel.h"
2#include <stdio.h>
3
4OClickableLabel::OClickableLabel(QWidget* parent,
5 const char* name,
6 WFlags fl) :
7 QLabel(parent,name,fl)
8{
9 textInverted=false;
10 isToggle=false;
11 isDown=false;
12 showState(false);
13 setFrameShadow(Sunken);
14}
15
16void OClickableLabel::setToggleButton(bool t) {
17 isToggle=t;
18}
19
20void OClickableLabel::mousePressEvent( QMouseEvent *e ) {
21 if (isToggle && isDown) {
22 showState(false);
23 } else {
24 showState(true);
25 }
26}
27
28void OClickableLabel::mouseReleaseEvent( QMouseEvent *e ) {
29 if (rect().contains(e->pos()) && isToggle) isDown=!isDown;
30
31 if (isToggle && isDown) {
32 showState(true);
33 } else {
34 showState(false);
35 }
36
37 if (rect().contains(e->pos())) {
38 if (isToggle) {
39 emit toggled(isDown);
40 }
41 emit clicked();
42 }
43}
44
45void OClickableLabel::mouseMoveEvent( QMouseEvent *e ) {
46 if (rect().contains(e->pos())) {
47 if (isToggle && isDown) {
48 showState(false);
49 } else {
50 showState(true);
51 }
52 } else {
53 if (isToggle && isDown) {
54 showState(true);
55 } else {
56 showState(false);
57 }
58 }
59}
60
61void OClickableLabel::showState(bool on) {
62 if (on) {
63 //setFrameShape(Panel);
64 setInverted(true);
65 setBackgroundMode(PaletteHighlight);
66 } else {
67 //setFrameShape(NoFrame);
68 setInverted(false);
69 setBackgroundMode(PaletteBackground);
70 }
71 repaint();
72}
73
74void OClickableLabel::setInverted(bool on) {
75 if ( (!textInverted && on) || (textInverted && !on) ) {
76 QPalette pal=palette();
77 QColor col=pal.color(QPalette::Normal, QColorGroup::Foreground);
78 col.setRgb(255-col.red(),255-col.green(),255-col.blue());
79 pal.setColor(QPalette::Normal, QColorGroup::Foreground, col);
80 setPalette(pal);
81 textInverted=!textInverted;
82 }
83}
84
85void OClickableLabel::setOn(bool on) {
86 isDown=on;
87 showState(isDown);
88}