AlbumShaper  1.0a3
Public Slots | Signals | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
ClickableLabel Class Reference

A clickable label. More...

#include <clickableLabel.h>

Inheritance diagram for ClickableLabel:
Inheritance graph
[legend]
Collaboration diagram for ClickableLabel:
Collaboration graph
[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.

                                                                  : QLabel( parent, name ) 
{
  setWFlags(WRepaintNoErase);
  enabled = true;
  invisible = false;
  pressed = false;
  setMouseTracking(true);
}

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

{
  if( !enabled ) return;
  
  if( pressed )
    setActive();
  else
    setHighlighted();
}
void ClickableLabel::leaveEvent ( QEvent *  ) [protected]

Definition at line 109 of file clickableLabel.cpp.

References defaultPixmap, enabled, and setPixmap().

{
  if( !enabled ) return;

  if(!defaultPixmap.isNull())
  { this->setPixmap( defaultPixmap ); }      
}
void ClickableLabel::mouseMoveEvent ( QMouseEvent *  e) [protected]

Definition at line 89 of file clickableLabel.cpp.

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

{
  if( !enabled ) return;

  QPoint p = e->pos();
  if( p.x() < 0 || p.y() < 0 ||
      p.x() >= width() || p.y() >= height() )
  {
    if(!defaultPixmap.isNull())
    { this->setPixmap( defaultPixmap ); }      
  }
  else
  {  
    if( pressed )
      setActive();
    else
      setHighlighted();
  }  
}
void ClickableLabel::mousePressEvent ( QMouseEvent *  ) [protected]

Definition at line 185 of file clickableLabel.cpp.

References enabled, pressed, and setActive().

{
  if( !enabled ) return;
  
  pressed = true;
  setActive();  
}
void ClickableLabel::mouseReleaseEvent ( QMouseEvent *  e) [protected]

Definition at line 193 of file clickableLabel.cpp.

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

{  
  if( !enabled || invisible ) return;
  
  pressed = false;

  //restore pixmap if exists
  if(!defaultPixmap.isNull())
  { this->setPixmap( defaultPixmap ); }
  
  //if mouse still over button emit clicked signal
  if(e->pos().x() >= 0 &&
     e->pos().y() >= 0 &&
     e->pos().x() < width() &&
     e->pos().y() < height() )
  {    
    emit clicked();
  }
}
void ClickableLabel::paintEvent ( QPaintEvent *  e) [protected]

double buffer to avoid flicker

Definition at line 31 of file clickableLabel.cpp.

References buffer, and invisible.

{
  QPixmap buffer( size() );
  QPainter bufferPainter( &buffer );
  bufferPainter.setClipping(false);
  bufferPainter.fillRect( buffer.rect(), backgroundBrush() );

  //only paint label if not invisible
  if( !invisible ) 
  { bufferPainter.drawImage( QPoint(0,0), pixmap()->convertToImage() ); }
  
  bufferPainter.end();
  bitBlt( this, e->rect().x(), e->rect().y(),
          &buffer, 
          e->rect().x(), e->rect().y(),
          e->rect().width(), e->rect().height() );
}
void ClickableLabel::setActive ( ) [private]

Definition at line 127 of file clickableLabel.cpp.

References b, defaultPixmap, and setPixmap().

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

{
  if( ! defaultPixmap.isNull() )
  {
    //create darkened out version
    QImage newImage = defaultPixmap.convertToImage();
    QImage alpha = newImage.createAlphaMask();
    int x, y;
    for(y=0; y<newImage.height(); y++)
    {
      for(x=0; x<newImage.width(); x++)
      {
        if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
        {
          QRgb rgb = newImage.pixel(x,y);
          int r = (int) (0.5*qRed(rgb));
          int g = (int) (0.5*qGreen(rgb));
          int b = (int) (0.5*qBlue(rgb));
          rgb = qRgb( r, g, b );
          newImage.setPixel( x, y, rgb );
        }
      }
    }
    QPixmap newPixmap;
    newPixmap.convertFromImage( newImage );
    QLabel::setPixmap( newPixmap );
  }  
}
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().

{
  if( val )
    setPixmap( defaultPixmap );
  else if( ! defaultPixmap.isNull() )
  {
    //create over exposed gray version
    QImage newImage = defaultPixmap.convertToImage();
    QImage alpha = newImage.createAlphaMask();
    int x, y;
    for(y=0; y<newImage.height(); y++)
    {
      for(x=0; x<newImage.width(); x++)
      {
        if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
        {
          QRgb rgb = newImage.pixel(x,y);
          int gray = qGray(rgb);
          double alpha = 0.5;
          gray = (int) (alpha*gray+(1-alpha)*255);
          rgb = qRgb( gray, gray, gray );
          newImage.setPixel( x, y, rgb );
        }
      }
    }
    QPixmap newPixmap;
    newPixmap.convertFromImage( newImage );
    QLabel::setPixmap( newPixmap );
  }
  
  enabled = val;
}
void ClickableLabel::setHighlighted ( ) [private]

Definition at line 156 of file clickableLabel.cpp.

References b, defaultPixmap, and setPixmap().

Referenced by enterEvent(), and mouseMoveEvent().

{
  if( ! defaultPixmap.isNull() )
  {
    //create slightly darker version
    QImage newImage = defaultPixmap.convertToImage();
    QImage alpha = newImage.createAlphaMask();
    int x, y;
    for(y=0; y<newImage.height(); y++)
    {
      for(x=0; x<newImage.width(); x++)
      {
        if(alpha.isNull() || qRed(alpha.pixel(x,y)) == 0)
        {
          QRgb rgb = newImage.pixel(x,y);
          int r = (int) (0.8*qRed(rgb));
          int g = (int) (0.8*qGreen(rgb));
          int b = (int) (0.8*qBlue(rgb));
          rgb = qRgba( r, g, b, qAlpha(rgb) );
          newImage.setPixel( x, y, rgb );
        }
      }
    }
    QPixmap newPixmap;
    newPixmap.convertFromImage( newImage );
    QLabel::setPixmap( newPixmap );
  }
}
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().

{
  //avoid repainting when not necessary
  if( invisible != val)
  {
    invisible = val;
    repaint();
  }
}
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: