AlbumShaper  1.0a3
Public Slots | Signals | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
ClickableLabel Class Reference

A clickable label. More...

#include <clickableLabel.h>

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

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 More...
 
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 27 of file clickableLabel.h.

Constructor & Destructor Documentation

§ ClickableLabel()

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

Definition at line 28 of file clickableLabel.cpp.

References enabled, invisible, and pressed.

28  : QLabel( parent, name )
29 {
30  setWindowFlags(Qt::WNoAutoErase);
31  enabled = true;
32  invisible = false;
33  pressed = false;
34  setMouseTracking(true);
35 }

Member Function Documentation

§ clicked

void ClickableLabel::clicked ( )
signal

Referenced by mouseReleaseEvent().

§ enterEvent()

void ClickableLabel::enterEvent ( QEvent *  )
protected

Definition at line 123 of file clickableLabel.cpp.

References enabled, pressed, setActive(), and setHighlighted().

124 {
125  if( !enabled ) return;
126 
127  if( pressed )
128  setActive();
129  else
130  setHighlighted();
131 }

§ leaveEvent()

void ClickableLabel::leaveEvent ( QEvent *  )
protected

Definition at line 115 of file clickableLabel.cpp.

References defaultPixmap, enabled, and setPixmap().

116 {
117  if( !enabled ) return;
118 
119  if(!defaultPixmap.isNull())
120  { this->setPixmap( defaultPixmap ); }
121 }
void setPixmap(const QPixmap &p)
QPixmap defaultPixmap

§ mouseMoveEvent()

void ClickableLabel::mouseMoveEvent ( QMouseEvent *  e)
protected

Definition at line 95 of file clickableLabel.cpp.

References defaultPixmap, enabled, height, pressed, setActive(), setHighlighted(), setPixmap(), and width.

96 {
97  if( !enabled ) return;
98 
99  QPoint p = e->pos();
100  if( p.x() < 0 || p.y() < 0 ||
101  p.x() >= width() || p.y() >= height() )
102  {
103  if(!defaultPixmap.isNull())
104  { this->setPixmap( defaultPixmap ); }
105  }
106  else
107  {
108  if( pressed )
109  setActive();
110  else
111  setHighlighted();
112  }
113 }
void setPixmap(const QPixmap &p)
QPixmap defaultPixmap
int width
Definition: blur.cpp:79
int height
Definition: blur.cpp:79

§ mousePressEvent()

void ClickableLabel::mousePressEvent ( QMouseEvent *  )
protected

Definition at line 191 of file clickableLabel.cpp.

References enabled, pressed, and setActive().

192 {
193  if( !enabled ) return;
194 
195  pressed = true;
196  setActive();
197 }

§ mouseReleaseEvent()

void ClickableLabel::mouseReleaseEvent ( QMouseEvent *  e)
protected

Definition at line 199 of file clickableLabel.cpp.

References clicked(), defaultPixmap, enabled, height, invisible, pressed, setPixmap(), and width.

200 {
201  if( !enabled || invisible ) return;
202 
203  pressed = false;
204 
205  //restore pixmap if exists
206  if(!defaultPixmap.isNull())
207  { this->setPixmap( defaultPixmap ); }
208 
209  //if mouse still over button emit clicked signal
210  if(e->pos().x() >= 0 &&
211  e->pos().y() >= 0 &&
212  e->pos().x() < width() &&
213  e->pos().y() < height() )
214  {
215  emit clicked();
216  }
217 }
void setPixmap(const QPixmap &p)
QPixmap defaultPixmap
int width
Definition: blur.cpp:79
int height
Definition: blur.cpp:79

§ paintEvent()

void ClickableLabel::paintEvent ( QPaintEvent *  e)
protected

double buffer to avoid flicker

Definition at line 37 of file clickableLabel.cpp.

References buffer, and invisible.

38 {
39  QPixmap buffer( size() );
40  QPainter bufferPainter( &buffer );
41  bufferPainter.setClipping(false);
42  bufferPainter.fillRect( buffer.rect(), backgroundBrush() );
43 
44  //only paint label if not invisible
45  if( !invisible )
46  { bufferPainter.drawImage( QPoint(0,0), pixmap()->convertToImage() ); }
47 
48  bufferPainter.end();
49  bitBlt( this, e->rect().x(), e->rect().y(),
50  &buffer,
51  e->rect().x(), e->rect().y(),
52  e->rect().width(), e->rect().height() );
53 }
float * buffer
Definition: blur.cpp:80

§ setActive()

void ClickableLabel::setActive ( )
private

Definition at line 133 of file clickableLabel.cpp.

References b, and defaultPixmap.

Referenced by enterEvent(), mouseMoveEvent(), and mousePressEvent().

134 {
135  if( ! defaultPixmap.isNull() )
136  {
137  //create darkened out version
138  QImage newImage = defaultPixmap.convertToImage();
139  QImage alpha = newImage.createAlphaMask();
140  int x, y;
141  for(y=0; y<newImage.height(); y++)
142  {
143  for(x=0; x<newImage.width(); x++)
144  {
145  if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
146  {
147  QRgb rgb = newImage.pixel(x,y);
148  int r = (int) (0.5*qRed(rgb));
149  int g = (int) (0.5*qGreen(rgb));
150  int b = (int) (0.5*qBlue(rgb));
151  rgb = qRgb( r, g, b );
152  newImage.setPixel( x, y, rgb );
153  }
154  }
155  }
156  QPixmap newPixmap;
157  newPixmap.convertFromImage( newImage );
158  QLabel::setPixmap( newPixmap );
159  }
160 }
long b
Definition: jpegInternal.h:125
QPixmap defaultPixmap

§ setEnabled

void ClickableLabel::setEnabled ( bool  val)
slot

Definition at line 62 of file clickableLabel.cpp.

References defaultPixmap, enabled, and setPixmap().

Referenced by EditingInterface::EditingInterface(), EditingInterface::handleSelectionChanged(), EditingInterface::setPhoto(), and MosaicOptionsDialog::updateImagesFromOptions().

63 {
64  if( val )
66  else if( ! defaultPixmap.isNull() )
67  {
68  //create over exposed gray version
69  QImage newImage = defaultPixmap.convertToImage();
70  QImage alpha = newImage.createAlphaMask();
71  int x, y;
72  for(y=0; y<newImage.height(); y++)
73  {
74  for(x=0; x<newImage.width(); x++)
75  {
76  if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
77  {
78  QRgb rgb = newImage.pixel(x,y);
79  int gray = qGray(rgb);
80  double alpha = 0.5;
81  gray = (int) (alpha*gray+(1-alpha)*255);
82  rgb = qRgb( gray, gray, gray );
83  newImage.setPixel( x, y, rgb );
84  }
85  }
86  }
87  QPixmap newPixmap;
88  newPixmap.convertFromImage( newImage );
89  QLabel::setPixmap( newPixmap );
90  }
91 
92  enabled = val;
93 }
void setPixmap(const QPixmap &p)
QPixmap defaultPixmap

§ setHighlighted()

void ClickableLabel::setHighlighted ( )
private

Definition at line 162 of file clickableLabel.cpp.

References b, and defaultPixmap.

Referenced by enterEvent(), and mouseMoveEvent().

163 {
164  if( ! defaultPixmap.isNull() )
165  {
166  //create slightly darker version
167  QImage newImage = defaultPixmap.convertToImage();
168  QImage alpha = newImage.createAlphaMask();
169  int x, y;
170  for(y=0; y<newImage.height(); y++)
171  {
172  for(x=0; x<newImage.width(); x++)
173  {
174  if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
175  {
176  QRgb rgb = newImage.pixel(x,y);
177  int r = (int) (0.8*qRed(rgb));
178  int g = (int) (0.8*qGreen(rgb));
179  int b = (int) (0.8*qBlue(rgb));
180  rgb = qRgba( r, g, b, qAlpha(rgb) );
181  newImage.setPixel( x, y, rgb );
182  }
183  }
184  }
185  QPixmap newPixmap;
186  newPixmap.convertFromImage( newImage );
187  QLabel::setPixmap( newPixmap );
188  }
189 }
long b
Definition: jpegInternal.h:125
QPixmap defaultPixmap

§ setInvisible()

void ClickableLabel::setInvisible ( bool  val)

Definition at line 219 of file clickableLabel.cpp.

References invisible.

Referenced by SaveDialog::nextScreenShot(), SaveDialog::prevScreenShot(), EditingInterface::setPhoto(), EditingInterface::showNextPrevFirstLastPhoto(), and SaveDialog::updatePreview().

220 {
221  //avoid repainting when not necessary
222  if( invisible != val)
223  {
224  invisible = val;
225  repaint();
226  }
227 }

§ setPixmap

void ClickableLabel::setPixmap ( const QPixmap &  p)
slot

Member Data Documentation

§ defaultPixmap

QPixmap ClickableLabel::defaultPixmap
private

§ enabled

bool ClickableLabel::enabled
private

§ invisible

bool ClickableLabel::invisible
private

Definition at line 62 of file clickableLabel.h.

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

§ pressed

bool ClickableLabel::pressed
private

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