AlbumShaper  1.0a3
Public Member Functions | Private Member Functions | Private Attributes
PhotoPreviewWidget Class Reference

Displays photo thumbnail and description. More...

#include <photoPreviewWidget.h>

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

List of all members.

Public Member Functions

 PhotoPreviewWidget (QIconView *parent, Photo *phto)
 Sets subalbum pointer.
PhotogetPhoto ()
 Returns photo pointer.
void updateImage ()
 Update photo thumbnail from background object.
void updateDescription ()
 Update photo description.
void paint (QPainter *p)
void paintItem (QPainter *p, const QColorGroup &cg)
 Repain iconview item.
void paintFocus (QPainter *p, const QColorGroup &cg)
void setText (const QString &text)
void setPixmap (const QPixmap &p, bool redraw)
bool acceptDrop (const QMimeSource *e) const
int compare (QIconViewItem *i) const
void setMousedOver (bool val)
QRect getPhotoInfoRect ()
QPoint getPhotoPos ()

Private Member Functions

void initializeItemRect ()

Private Attributes

Photophto
 Pointer to photo backend object.
int calibratedWidth
bool mousedOver
QRect photoInfoRect
int pixmapXOffset
 offsets used to center pixmap
int pixmapYOffset

Detailed Description

Displays photo thumbnail and description.

Definition at line 32 of file photoPreviewWidget.h.


Constructor & Destructor Documentation

PhotoPreviewWidget::PhotoPreviewWidget ( QIconView parent,
Photo phto 
)

Sets subalbum pointer.

Definition at line 29 of file photoPreviewWidget.cpp.

References calibratedWidth, Photo::getDescription(), initializeItemRect(), mousedOver, PHOTO_TEXT_MARGIN, phto, setText(), and THUMBNAIL_WIDTH.

                                                                       :
                                   QIconViewItem( parent, QString(""), QPixmap(phto->getThumbnailFilename()) )
{
  //initially item not moused over, set photo pointer
  mousedOver = false;
  this->phto = phto;

  //calibrated text width is icon width minus margin + info button size (info button is sized to be a square of height
  //equal to text height, aka fm.height)
  QFontMetrics fm( qApp->font() );
  calibratedWidth = THUMBNAIL_WIDTH - PHOTO_TEXT_MARGIN - fm.height();
  
  //actually set the items text by clipping it using the calibration width we just computed
  setText( phto->getDescription() );

  //update the items rectange which is a function of the text width, icon rect,
  //and margins for displaying selection and mouse over ovals
  initializeItemRect();
}

Member Function Documentation

bool PhotoPreviewWidget::acceptDrop ( const QMimeSource *  e) const

Definition at line 170 of file photoPreviewWidget.cpp.

{
  return true;
}
int PhotoPreviewWidget::compare ( QIconViewItem i) const

Definition at line 175 of file photoPreviewWidget.cpp.

References height.

{
  if( pos().y() > (i->pos().y() + height()) ||
      (
        pos().y() >= i->pos().y() &&
        pos().x() >= i->pos().x()
      ))
  { return 1; }
  else
  { return -1; }
}
Photo * PhotoPreviewWidget::getPhoto ( )
QRect PhotoPreviewWidget::getPhotoInfoRect ( )

Definition at line 224 of file photoPreviewWidget.cpp.

References height, PHOTO_MARGIN, PHOTO_SHADOW, photoInfoRect, and width.

Referenced by PhotosIconView::contentsMouseMoveEvent(), and paintItem().

{
  QRect photoInfoRect;
  QFontMetrics fm( qApp->font() );
  photoInfoRect.setLeft( x() + rect().width() - fm.height() - PHOTO_MARGIN - PHOTO_SHADOW - 1 );
  photoInfoRect.setRight( photoInfoRect.left() + fm.height() );
  photoInfoRect.setTop( y() + rect().height() - fm.height() - PHOTO_MARGIN - PHOTO_SHADOW - 1 );
  photoInfoRect.setBottom( photoInfoRect.top() + fm.height() );
  return photoInfoRect;
}
QPoint PhotoPreviewWidget::getPhotoPos ( )

Definition at line 235 of file photoPreviewWidget.cpp.

References pixmapXOffset, and pixmapYOffset.

Referenced by PhotoDescEdit::PhotoDescEdit().

{
  //get widget coordiantes of item
  int xpos,ypos;
  xpos = x() + pixmapRect().x() + pixmapXOffset + 1;
  ypos = y() + pixmapRect().y() + pixmapYOffset + 1;
  
  //shift by scrolled amount
  xpos-= iconView()->contentsX();
  ypos-= iconView()->contentsY();

  //offset by viewport top left
  //(why not iconview topleft? item actually placed in viewport which is placed in iconview. this
  //viewport can be offset (and when I wrote this code it was) from the iconview depending on Trolltech's
  //scrollview code which can using spacing between the viewport and scrolls widgets. since the viewport
  //is a full blown widget, we can figure out it's reall screen coordinates and need not consult the iconview object at all.
  QPoint viewportTL = iconView()->viewport()->mapToGlobal( QPoint(0,0) );
  xpos+= viewportTL.x();
  ypos+= viewportTL.y();

  return QPoint(xpos,ypos);
}
void PhotoPreviewWidget::initializeItemRect ( ) [private]

Definition at line 187 of file photoPreviewWidget.cpp.

References PHOTO_MARGIN, PHOTO_SHADOW, PHOTO_TEXT_MARGIN, pixmapXOffset, pixmapYOffset, THUMBNAIL_HEIGHT, and THUMBNAIL_WIDTH.

Referenced by PhotoPreviewWidget().

{
  //set pixmap rect to be offset slightly from top left corner (by photo margin)
  QRect pr = pixmapRect();
  int itemLeft = x();
  int itemTop = y();
  
  pixmapXOffset = (THUMBNAIL_WIDTH - pixmap()->width() ) / 2;  
  pixmapYOffset = (THUMBNAIL_HEIGHT - pixmap()->height() ) / 2;  
  
  pr.setLeft( x() + PHOTO_MARGIN );
  pr.setRight( pr.left() + THUMBNAIL_WIDTH );
  pr.setTop( y() + PHOTO_MARGIN );
  pr.setBottom( pr.top() + THUMBNAIL_HEIGHT );
  setPixmapRect( pr );

  //move text rect to be below new pixmap region.
  //reset height to allow for up to 3 lines of text.
  QFontMetrics fm( qApp->font() );
  QRect tr = QRect();
  tr.setLeft( x() + PHOTO_MARGIN );
  tr.setRight( tr.left() +THUMBNAIL_WIDTH );
  tr.setTop( y() + PHOTO_MARGIN + THUMBNAIL_HEIGHT + PHOTO_TEXT_MARGIN );
  tr.setBottom( tr.top() + 0*fm.leading() + 1*fm.height() );
  setTextRect( tr );

  //set overall item rect
  int itemW = THUMBNAIL_WIDTH + 2*PHOTO_MARGIN + PHOTO_SHADOW;
  int itemH = THUMBNAIL_HEIGHT + PHOTO_TEXT_MARGIN + textRect().height() + 2*PHOTO_MARGIN + PHOTO_SHADOW;
  setItemRect( QRect( itemLeft, itemTop, itemW, itemH ) );
}
void PhotoPreviewWidget::paint ( QPainter *  p)

Definition at line 76 of file photoPreviewWidget.cpp.

References height, PHOTO_MARGIN, PHOTO_TEXT_MARGIN, pixmapXOffset, pixmapYOffset, and width.

Referenced by paintItem().

{
  //create colors
  QColor offWhite( 255, 255, 255 );
  QColor darkBlue(35, 75, 139);
  QColor paperColor;

  //draw offwhite or selected color depending on if photo is selected
  QRect paperRect( x(), y(),
                              2*PHOTO_MARGIN + pixmapRect().width(),
                              2*PHOTO_MARGIN + pixmapRect().height() + PHOTO_TEXT_MARGIN + textRect().height() );
  if(isSelected())
    paperColor = darkBlue;
  else
    paperColor = offWhite;
  p->fillRect(  paperRect, QBrush( paperColor ) );

  //paint pixmap
  p->drawPixmap( x() + pixmapRect().x() + pixmapXOffset + 1,
                                 y() + pixmapRect().y() + pixmapYOffset + 1, 
                                 *pixmap());
  
  //paint text
  int align = AlignLeft | AlignTop | BreakAnywhere;
  if(isSelected())
    p->setPen( white );
  else
    p->setPen( black );
  p->drawText( x() + textRect().x() + 1, y() + textRect().y() + 1, 
                           textRect().width(), textRect().height(),
                           align, text() );
}
void PhotoPreviewWidget::paintFocus ( QPainter *  p,
const QColorGroup &  cg 
)

Definition at line 168 of file photoPreviewWidget.cpp.

{ }
void PhotoPreviewWidget::paintItem ( QPainter *  p,
const QColorGroup &  cg 
)

Repain iconview item.

Definition at line 109 of file photoPreviewWidget.cpp.

References buffer, getPhotoInfoRect(), height, mousedOver, paint(), PHOTO_SHADOW, PHOTO_SHADOW_END_OFFSET, photoInfoRect, Window::shadowB, Window::shadowBL, Window::shadowBR, Window::shadowR, Window::shadowTR, and width.

{
  //resize old static buffer to new needed size, fill with widget background color
  static QPixmap buffer;
  QRect r = rect();
  QSize newSize = r.size().expandedTo(buffer.size() );
  buffer.resize(newSize);
  buffer.fill( white );

  //construct painter for buffer
  QPainter bufferPainter(&buffer, this);
  bufferPainter.translate( -r.x(), -r.y() );
 
   //paint item
  paint(&bufferPainter);

  //paint edit button
  if(mousedOver)
  {
    QRect photoInfoRect = getPhotoInfoRect();
    bufferPainter.drawPixmap( photoInfoRect, * (((Window*) qApp->mainWidget())->photoInfo) );
  }

  //paint shadows
  QPixmap* shadowBL, *shadowB, *shadowBR, *shadowR, *shadowTR;
  Window* window = (Window*) qApp->mainWidget();
  shadowBL = window->shadowBL;
  shadowB = window->shadowB;
  shadowBR = window->shadowBR;
  shadowR = window->shadowR;
  shadowTR = window->shadowTR;

  QRect shadowRect;
  shadowRect.setLeft( x() + PHOTO_SHADOW_END_OFFSET );
  shadowRect.setRight( shadowRect.left() + PHOTO_SHADOW );
  shadowRect.setTop( y() + rect().height() - PHOTO_SHADOW );
  shadowRect.setBottom( shadowRect.top() + PHOTO_SHADOW );
  bufferPainter.drawPixmap( shadowRect, *shadowBL );

  shadowRect.setLeft( shadowRect.right() + 1 );
  shadowRect.setRight( x() +  rect().width() - PHOTO_SHADOW - 1 );
  bufferPainter.drawPixmap( shadowRect, *shadowB );

  shadowRect.setLeft( shadowRect.right() + 1 );
  shadowRect.setRight( shadowRect.left() + PHOTO_SHADOW );
  bufferPainter.drawPixmap( shadowRect, *shadowBR );

  shadowRect.setBottom( shadowRect.top() - 1 );
  shadowRect.setTop( y() +PHOTO_SHADOW_END_OFFSET + PHOTO_SHADOW );
  bufferPainter.drawPixmap( shadowRect, *shadowR );

  shadowRect.setBottom( shadowRect.top() - 1 );
  shadowRect.setTop( y() +PHOTO_SHADOW_END_OFFSET );
  bufferPainter.drawPixmap( shadowRect, *shadowTR );
  
  //draw buffer to screen
  p->drawPixmap( x(), y(), buffer );
}
void PhotoPreviewWidget::setMousedOver ( bool  val)

Definition at line 219 of file photoPreviewWidget.cpp.

References mousedOver.

Referenced by PhotosIconView::clearPseudoSelection(), and PhotosIconView::repaintGroup().

{ 
  mousedOver = val;   
}
void PhotoPreviewWidget::setPixmap ( const QPixmap &  p,
bool  redraw 
)

Definition at line 59 of file photoPreviewWidget.cpp.

References pixmapXOffset, pixmapYOffset, THUMBNAIL_HEIGHT, and THUMBNAIL_WIDTH.

Referenced by updateImage().

{
  pixmapXOffset = (THUMBNAIL_WIDTH - p.width() ) / 2;  
  pixmapYOffset = (THUMBNAIL_HEIGHT - p.height() ) / 2;  
  QIconViewItem::setPixmap( p, redraw );
}
void PhotoPreviewWidget::setText ( const QString &  text)
void PhotoPreviewWidget::updateDescription ( )

Update photo description.

Definition at line 66 of file photoPreviewWidget.cpp.

References Photo::getDescription(), phto, and setText().

void PhotoPreviewWidget::updateImage ( )

Update photo thumbnail from background object.

Definition at line 54 of file photoPreviewWidget.cpp.

References Photo::getThumbnailFilename(), phto, and setPixmap().

{
  setPixmap( QPixmap(phto->getThumbnailFilename()), false);
}

Member Data Documentation

Definition at line 76 of file photoPreviewWidget.h.

Referenced by PhotoPreviewWidget(), and setText().

Definition at line 78 of file photoPreviewWidget.h.

Referenced by paintItem(), PhotoPreviewWidget(), and setMousedOver().

Definition at line 80 of file photoPreviewWidget.h.

Referenced by getPhotoInfoRect(), and paintItem().

Pointer to photo backend object.

Definition at line 74 of file photoPreviewWidget.h.

Referenced by getPhoto(), PhotoPreviewWidget(), updateDescription(), and updateImage().

offsets used to center pixmap

Definition at line 83 of file photoPreviewWidget.h.

Referenced by getPhotoPos(), initializeItemRect(), paint(), and setPixmap().

Definition at line 83 of file photoPreviewWidget.h.

Referenced by getPhotoPos(), initializeItemRect(), paint(), and setPixmap().


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