#include <clickableLabel.h>
Inheritance diagram for ClickableLabel:
Definition at line 23 of file clickableLabel.h.
Public Slots | |
void | setEnabled (bool val) |
void | setPixmap (const QPixmap &p) |
Signals | |
void | clicked () |
Public Member Functions | |
ClickableLabel (QWidget *parent=0, const char *name=0) | |
void | setInvisible (bool val) |
Protected Member Functions | |
void | paintEvent (QPaintEvent *e) |
double buffer to avoid flicker | |
void | enterEvent (QEvent *) |
void | leaveEvent (QEvent *) |
void | mouseMoveEvent (QMouseEvent *e) |
void | mousePressEvent (QMouseEvent *) |
void | mouseReleaseEvent (QMouseEvent *e) |
Private Member Functions | |
void | setActive () |
void | setHighlighted () |
Private Attributes | |
QPixmap | defaultPixmap |
bool | enabled |
bool | invisible |
bool | pressed |
ClickableLabel::ClickableLabel | ( | QWidget * | parent = 0 , |
|
const char * | name = 0 | |||
) |
void ClickableLabel::clicked | ( | ) | [signal] |
Referenced by mouseReleaseEvent().
void ClickableLabel::enterEvent | ( | QEvent * | ) | [protected] |
Definition at line 117 of file clickableLabel.cpp.
References enabled, pressed, setActive(), and setHighlighted().
00118 { 00119 if( !enabled ) return; 00120 00121 if( pressed ) 00122 setActive(); 00123 else 00124 setHighlighted(); 00125 }
void ClickableLabel::leaveEvent | ( | QEvent * | ) | [protected] |
Definition at line 109 of file clickableLabel.cpp.
References defaultPixmap, and enabled.
00110 { 00111 if( !enabled ) return; 00112 00113 if(!defaultPixmap.isNull()) 00114 { this->setPixmap( defaultPixmap ); } 00115 }
void ClickableLabel::mouseMoveEvent | ( | QMouseEvent * | e | ) | [protected] |
Definition at line 89 of file clickableLabel.cpp.
References defaultPixmap, enabled, height, pressed, setActive(), setHighlighted(), and width.
00090 { 00091 if( !enabled ) return; 00092 00093 QPoint p = e->pos(); 00094 if( p.x() < 0 || p.y() < 0 || 00095 p.x() >= width() || p.y() >= height() ) 00096 { 00097 if(!defaultPixmap.isNull()) 00098 { this->setPixmap( defaultPixmap ); } 00099 } 00100 else 00101 { 00102 if( pressed ) 00103 setActive(); 00104 else 00105 setHighlighted(); 00106 } 00107 }
void ClickableLabel::mousePressEvent | ( | QMouseEvent * | ) | [protected] |
void ClickableLabel::mouseReleaseEvent | ( | QMouseEvent * | e | ) | [protected] |
Definition at line 193 of file clickableLabel.cpp.
References clicked(), defaultPixmap, enabled, height, invisible, pressed, and width.
00194 { 00195 if( !enabled || invisible ) return; 00196 00197 pressed = false; 00198 00199 //restore pixmap if exists 00200 if(!defaultPixmap.isNull()) 00201 { this->setPixmap( defaultPixmap ); } 00202 00203 //if mouse still over button emit clicked signal 00204 if(e->pos().x() >= 0 && 00205 e->pos().y() >= 0 && 00206 e->pos().x() < width() && 00207 e->pos().y() < height() ) 00208 { 00209 emit clicked(); 00210 } 00211 }
void ClickableLabel::paintEvent | ( | QPaintEvent * | e | ) | [protected] |
double buffer to avoid flicker
Definition at line 31 of file clickableLabel.cpp.
References buffer, and invisible.
00032 { 00033 QPixmap buffer( size() ); 00034 QPainter bufferPainter( &buffer ); 00035 bufferPainter.setClipping(false); 00036 bufferPainter.fillRect( buffer.rect(), backgroundBrush() ); 00037 00038 //only paint label if not invisible 00039 if( !invisible ) 00040 { bufferPainter.drawImage( QPoint(0,0), pixmap()->convertToImage() ); } 00041 00042 bufferPainter.end(); 00043 bitBlt( this, e->rect().x(), e->rect().y(), 00044 &buffer, 00045 e->rect().x(), e->rect().y(), 00046 e->rect().width(), e->rect().height() ); 00047 }
void ClickableLabel::setActive | ( | ) | [private] |
Definition at line 127 of file clickableLabel.cpp.
References b, and defaultPixmap.
Referenced by enterEvent(), mouseMoveEvent(), and mousePressEvent().
00128 { 00129 if( ! defaultPixmap.isNull() ) 00130 { 00131 //create darkened out version 00132 QImage newImage = defaultPixmap.convertToImage(); 00133 QImage alpha = newImage.createAlphaMask(); 00134 int x, y; 00135 for(y=0; y<newImage.height(); y++) 00136 { 00137 for(x=0; x<newImage.width(); x++) 00138 { 00139 if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0) 00140 { 00141 QRgb rgb = newImage.pixel(x,y); 00142 int r = (int) (0.5*qRed(rgb)); 00143 int g = (int) (0.5*qGreen(rgb)); 00144 int b = (int) (0.5*qBlue(rgb)); 00145 rgb = qRgb( r, g, b ); 00146 newImage.setPixel( x, y, rgb ); 00147 } 00148 } 00149 } 00150 QPixmap newPixmap; 00151 newPixmap.convertFromImage( newImage ); 00152 QLabel::setPixmap( newPixmap ); 00153 } 00154 }
void ClickableLabel::setEnabled | ( | bool | val | ) | [slot] |
Definition at line 56 of file clickableLabel.cpp.
References defaultPixmap, enabled, and setPixmap().
Referenced by EditingInterface::EditingInterface(), EditingInterface::handleSelectionChanged(), EditingInterface::setPhoto(), and MosaicOptionsDialog::updateImagesFromOptions().
00057 { 00058 if( val ) 00059 setPixmap( defaultPixmap ); 00060 else if( ! defaultPixmap.isNull() ) 00061 { 00062 //create over exposed gray version 00063 QImage newImage = defaultPixmap.convertToImage(); 00064 QImage alpha = newImage.createAlphaMask(); 00065 int x, y; 00066 for(y=0; y<newImage.height(); y++) 00067 { 00068 for(x=0; x<newImage.width(); x++) 00069 { 00070 if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0) 00071 { 00072 QRgb rgb = newImage.pixel(x,y); 00073 int gray = qGray(rgb); 00074 double alpha = 0.5; 00075 gray = (int) (alpha*gray+(1-alpha)*255); 00076 rgb = qRgb( gray, gray, gray ); 00077 newImage.setPixel( x, y, rgb ); 00078 } 00079 } 00080 } 00081 QPixmap newPixmap; 00082 newPixmap.convertFromImage( newImage ); 00083 QLabel::setPixmap( newPixmap ); 00084 } 00085 00086 enabled = val; 00087 }
void ClickableLabel::setHighlighted | ( | ) | [private] |
Definition at line 156 of file clickableLabel.cpp.
References b, and defaultPixmap.
Referenced by enterEvent(), and mouseMoveEvent().
00157 { 00158 if( ! defaultPixmap.isNull() ) 00159 { 00160 //create slightly darker version 00161 QImage newImage = defaultPixmap.convertToImage(); 00162 QImage alpha = newImage.createAlphaMask(); 00163 int x, y; 00164 for(y=0; y<newImage.height(); y++) 00165 { 00166 for(x=0; x<newImage.width(); x++) 00167 { 00168 if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0) 00169 { 00170 QRgb rgb = newImage.pixel(x,y); 00171 int r = (int) (0.8*qRed(rgb)); 00172 int g = (int) (0.8*qGreen(rgb)); 00173 int b = (int) (0.8*qBlue(rgb)); 00174 rgb = qRgba( r, g, b, qAlpha(rgb) ); 00175 newImage.setPixel( x, y, rgb ); 00176 } 00177 } 00178 } 00179 QPixmap newPixmap; 00180 newPixmap.convertFromImage( newImage ); 00181 QLabel::setPixmap( newPixmap ); 00182 } 00183 }
void ClickableLabel::setInvisible | ( | bool | val | ) |
Definition at line 213 of file clickableLabel.cpp.
References invisible.
Referenced by SaveDialog::nextScreenShot(), SaveDialog::prevScreenShot(), EditingInterface::setPhoto(), EditingInterface::showNextPrevFirstLastPhoto(), and SaveDialog::updatePreview().
00214 { 00215 //avoid repainting when not necessary 00216 if( invisible != val) 00217 { 00218 invisible = val; 00219 repaint(); 00220 } 00221 }
void ClickableLabel::setPixmap | ( | const QPixmap & | p | ) | [slot] |
Definition at line 49 of file clickableLabel.cpp.
References defaultPixmap.
Referenced by EditingInterface::EditingInterface(), GrainEditor::GrainEditor(), HistogramEditor::HistogramEditor(), MosaicOptionsDialog::MosaicOptionsDialog(), SaveDialog::SaveDialog(), and setEnabled().
00050 { 00051 defaultPixmap = p; 00052 defaultPixmap.detach(); 00053 QLabel::setPixmap( p ); 00054 }
QPixmap ClickableLabel::defaultPixmap [private] |
Definition at line 56 of file clickableLabel.h.
Referenced by leaveEvent(), mouseMoveEvent(), mouseReleaseEvent(), setActive(), setEnabled(), setHighlighted(), and setPixmap().
bool ClickableLabel::enabled [private] |
Definition at line 57 of file clickableLabel.h.
Referenced by ClickableLabel(), enterEvent(), leaveEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), and setEnabled().
bool ClickableLabel::invisible [private] |
Definition at line 58 of file clickableLabel.h.
Referenced by ClickableLabel(), mouseReleaseEvent(), paintEvent(), and setInvisible().
bool ClickableLabel::pressed [private] |
Definition at line 59 of file clickableLabel.h.
Referenced by ClickableLabel(), enterEvent(), mouseMoveEvent(), mousePressEvent(), and mouseReleaseEvent().