00001 #include "oclickablelabel.h" 00002 #include <stdio.h> 00003 00011 OClickableLabel::OClickableLabel(QWidget* parent, 00012 const char* name, 00013 WFlags fl) : 00014 QLabel(parent,name,fl) 00015 { 00016 textInverted=false; 00017 isToggle=false; 00018 isDown=false; 00019 showState(false); 00020 setFrameShadow(Sunken); 00021 } 00022 00028 void OClickableLabel::setToggleButton(bool t) { 00029 isToggle=t; 00030 } 00031 00035 void OClickableLabel::mousePressEvent( QMouseEvent * /*e*/ ) { 00036 if (isToggle && isDown) { 00037 showState(false); 00038 } else { 00039 showState(true); 00040 } 00041 } 00042 00046 void OClickableLabel::mouseReleaseEvent( QMouseEvent *e ) { 00047 if (rect().contains(e->pos()) && isToggle) isDown=!isDown; 00048 00049 if (isToggle && isDown) { 00050 showState(true); 00051 } else { 00052 showState(false); 00053 } 00054 00055 if (rect().contains(e->pos())) { 00056 if (isToggle) { 00057 emit toggled(isDown); 00058 } 00059 emit clicked(); 00060 } 00061 } 00062 00066 void OClickableLabel::mouseMoveEvent( QMouseEvent *e ) { 00067 if (rect().contains(e->pos())) { 00068 if (isToggle && isDown) { 00069 showState(false); 00070 } else { 00071 showState(true); 00072 } 00073 } else { 00074 if (isToggle && isDown) { 00075 showState(true); 00076 } else { 00077 showState(false); 00078 } 00079 } 00080 } 00081 00087 void OClickableLabel::showState(bool on) { 00088 if (on) { 00089 //setFrameShape(Panel); 00090 setInverted(true); 00091 setBackgroundMode(PaletteHighlight); 00092 } else { 00093 //setFrameShape(NoFrame); 00094 setInverted(false); 00095 setBackgroundMode(PaletteBackground); 00096 } 00097 repaint(); 00098 } 00099 00100 void OClickableLabel::setInverted(bool on) { 00101 if ( (!textInverted && on) || (textInverted && !on) ) { 00102 QPalette pal=palette(); 00103 QColor col=pal.color(QPalette::Normal, QColorGroup::Foreground); 00104 col.setRgb(255-col.red(),255-col.green(),255-col.blue()); 00105 pal.setColor(QPalette::Normal, QColorGroup::Foreground, col); 00106 setPalette(pal); 00107 textInverted=!textInverted; 00108 } 00109 } 00110 00114 void OClickableLabel::setOn(bool on) { 00115 isDown=on; 00116 showState(isDown); 00117 }
1.4.2