AlbumShaper 1.0a3
ClickableLabel Class Reference

A clickable label. More...

#include <clickableLabel.h>

Inheritance diagram for ClickableLabel:
Collaboration diagram for ClickableLabel:

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

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

References enabled, invisible, and pressed.

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.

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

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

◆ leaveEvent()

void ClickableLabel::leaveEvent ( QEvent * )
protected

Definition at line 115 of file clickableLabel.cpp.

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

References defaultPixmap, enabled, and setPixmap().

◆ mouseMoveEvent()

void ClickableLabel::mouseMoveEvent ( QMouseEvent * e)
protected

Definition at line 95 of file clickableLabel.cpp.

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
112 }
113}
int width
Definition blur.cpp:79
int height
Definition blur.cpp:79

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

◆ mousePressEvent()

void ClickableLabel::mousePressEvent ( QMouseEvent * )
protected

Definition at line 191 of file clickableLabel.cpp.

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

References enabled, pressed, and setActive().

◆ mouseReleaseEvent()

void ClickableLabel::mouseReleaseEvent ( QMouseEvent * e)
protected

Definition at line 199 of file clickableLabel.cpp.

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}

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

◆ paintEvent()

void ClickableLabel::paintEvent ( QPaintEvent * e)
protected

double buffer to avoid flicker

Definition at line 37 of file clickableLabel.cpp.

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

References buffer, and invisible.

◆ setActive()

void ClickableLabel::setActive ( )
private

Definition at line 133 of file clickableLabel.cpp.

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

References b, and defaultPixmap.

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

◆ setEnabled

void ClickableLabel::setEnabled ( bool val)
slot

Definition at line 62 of file clickableLabel.cpp.

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}

References defaultPixmap, enabled, and setPixmap().

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

◆ setHighlighted()

void ClickableLabel::setHighlighted ( )
private

Definition at line 162 of file clickableLabel.cpp.

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}

References b, and defaultPixmap.

Referenced by enterEvent(), and mouseMoveEvent().

◆ setInvisible()

void ClickableLabel::setInvisible ( bool val)

Definition at line 219 of file clickableLabel.cpp.

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

References invisible.

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

◆ 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: