Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

ClickableLabel Class Reference

#include <clickableLabel.h>

Inheritance diagram for ClickableLabel:

[legend]
Collaboration diagram for ClickableLabel:
[legend]
List of all members.

Detailed Description

A clickable label.

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


Constructor & Destructor Documentation

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

Definition at line 22 of file clickableLabel.cpp.

References ClickableLabel(), enabled, invisible, and pressed.

Referenced by ClickableLabel().

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, enterEvent(), pressed, setActive(), and setHighlighted().

Referenced by enterEvent().

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

Referenced by leaveEvent().

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, mouseMoveEvent(), pressed, setActive(), setHighlighted(), setPixmap(), and width.

Referenced by mouseMoveEvent().

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, mousePressEvent(), pressed, and setActive().

Referenced by mousePressEvent().

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, mouseReleaseEvent(), pressed, setPixmap(), and width.

Referenced by mouseReleaseEvent().

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, invisible, and paintEvent().

Referenced by paintEvent().

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

Referenced by EditingInterface::EditingInterface(), EditingInterface::handleSelectionChanged(), setEnabled(), 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, and setInvisible().

Referenced by SaveDialog::nextScreenShot(), SaveDialog::prevScreenShot(), setInvisible(), 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, and setPixmap().

Referenced by EditingInterface::EditingInterface(), GrainEditor::GrainEditor(), HistogramEditor::HistogramEditor(), leaveEvent(), MosaicOptionsDialog::MosaicOptionsDialog(), mouseMoveEvent(), mouseReleaseEvent(), SaveDialog::SaveDialog(), setEnabled(), and setPixmap().

00050 { 00051 defaultPixmap = p; 00052 defaultPixmap.detach(); 00053 QLabel::setPixmap( p ); 00054 }


Member Data Documentation

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().


The documentation for this class was generated from the following files:
Generated on Sun Mar 4 19:43:05 2007 for AlbumShaper by doxygen 1.3.7