ClickableLabel Class Reference

A clickable label. More...

#include <clickableLabel.h>

Inheritance diagram for ClickableLabel:
[legend]
Collaboration diagram for ClickableLabel:
[legend]

List of all members.

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

Detailed Description

A clickable label.

Definition at line 23 of file clickableLabel.h.


Constructor & Destructor Documentation

ClickableLabel::ClickableLabel ( QWidget parent = 0,
const char *  name = 0 
)

Definition at line 22 of file clickableLabel.cpp.

References enabled, invisible, and pressed.

00022                                                                   : QLabel( parent, name ) 
00023 {
00024   setWFlags(WRepaintNoErase);
00025   enabled = true;
00026   invisible = false;
00027   pressed = false;
00028   setMouseTracking(true);
00029 }


Member Function Documentation

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, enabled, and setPixmap().

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(), setPixmap(), 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]

Definition at line 185 of file clickableLabel.cpp.

References enabled, pressed, and setActive().

00186 {
00187   if( !enabled ) return;
00188   
00189   pressed = true;
00190   setActive();  
00191 }

void ClickableLabel::mouseReleaseEvent ( QMouseEvent *  e  )  [protected]

Definition at line 193 of file clickableLabel.cpp.

References clicked(), defaultPixmap, enabled, height, invisible, pressed, setPixmap(), 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, defaultPixmap, and setPixmap().

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, defaultPixmap, and setPixmap().

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]

Member Data Documentation

QPixmap ClickableLabel::defaultPixmap [private]
bool ClickableLabel::enabled [private]
bool ClickableLabel::invisible [private]

Definition at line 58 of file clickableLabel.h.

Referenced by ClickableLabel(), mouseReleaseEvent(), paintEvent(), and setInvisible().

bool ClickableLabel::pressed [private]

The documentation for this class was generated from the following files:

Generated by  doxygen 1.6.2