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

PhotoPreviewWidget Class Reference

#include <photoPreviewWidget.h>

Inheritance diagram for PhotoPreviewWidget:

Inheritance graph
[legend]
Collaboration diagram for PhotoPreviewWidget:

Collaboration graph
[legend]
List of all members.

Detailed Description

Displays photo thumbnail and description.

Definition at line 32 of file photoPreviewWidget.h.

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
 offsets used to center pixmap


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, setText(), and THUMBNAIL_WIDTH.

00029                                                                        :
00030                                    QIconViewItem( parent, QString(""), QPixmap(phto->getThumbnailFilename()) )
00031 {
00032   //initially item not moused over, set photo pointer
00033   mousedOver = false;
00034   this->phto = phto;
00035 
00036   //calibrated text width is icon width minus margin + info button size (info button is sized to be a square of height
00037   //equal to text height, aka fm.height)
00038   QFontMetrics fm( qApp->font() );
00039   calibratedWidth = THUMBNAIL_WIDTH - PHOTO_TEXT_MARGIN - fm.height();
00040   
00041   //actually set the items text by clipping it using the calibration width we just computed
00042   setText( phto->getDescription() );
00043 
00044   //update the items rectange which is a function of the text width, icon rect,
00045   //and margins for displaying selection and mouse over ovals
00046   initializeItemRect();
00047 }
//==============================================


Member Function Documentation

bool PhotoPreviewWidget::acceptDrop const QMimeSource *  e  )  const
 

Definition at line 170 of file photoPreviewWidget.cpp.

00171 {
00172   return true;
00173 }

int PhotoPreviewWidget::compare QIconViewItem i  )  const
 

Definition at line 175 of file photoPreviewWidget.cpp.

References height.

00176 {
00177   if( pos().y() > (i->pos().y() + height()) ||
00178       (
00179         pos().y() >= i->pos().y() &&
00180         pos().x() >= i->pos().x()
00181       ))
00182   { return 1; }
00183   else
00184   { return -1; }
00185 }

Photo * PhotoPreviewWidget::getPhoto  ) 
 

Returns photo pointer.

Definition at line 49 of file photoPreviewWidget.cpp.

Referenced by PhotoDescEdit::disappear(), PhotoDescEdit::PhotoDescEdit(), PhotosIconView::setAlbumImage(), PhotosIconView::setSubalbumImage(), and Subalbum::syncPhotoList().

00050 {
00051   return phto;
00052 }

QRect PhotoPreviewWidget::getPhotoInfoRect  ) 
 

Definition at line 224 of file photoPreviewWidget.cpp.

References height, PHOTO_MARGIN, PHOTO_SHADOW, and width.

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

00225 {
00226   QRect photoInfoRect;
00227   QFontMetrics fm( qApp->font() );
00228   photoInfoRect.setLeft( x() + rect().width() - fm.height() - PHOTO_MARGIN - PHOTO_SHADOW - 1 );
00229   photoInfoRect.setRight( photoInfoRect.left() + fm.height() );
00230   photoInfoRect.setTop( y() + rect().height() - fm.height() - PHOTO_MARGIN - PHOTO_SHADOW - 1 );
00231   photoInfoRect.setBottom( photoInfoRect.top() + fm.height() );
00232   return photoInfoRect;
00233 }

QPoint PhotoPreviewWidget::getPhotoPos  ) 
 

Definition at line 235 of file photoPreviewWidget.cpp.

References pixmapXOffset, and pixmapYOffset.

Referenced by PhotoDescEdit::PhotoDescEdit().

00236 {
00237   //get widget coordiantes of item
00238   int xpos,ypos;
00239   xpos = x() + pixmapRect().x() + pixmapXOffset + 1;
00240   ypos = y() + pixmapRect().y() + pixmapYOffset + 1;
00241   
00242   //shift by scrolled amount
00243   xpos-= iconView()->contentsX();
00244   ypos-= iconView()->contentsY();
00245 
00246   //offset by viewport top left
00247   //(why not iconview topleft? item actually placed in viewport which is placed in iconview. this
00248   //viewport can be offset (and when I wrote this code it was) from the iconview depending on Trolltech's
00249   //scrollview code which can using spacing between the viewport and scrolls widgets. since the viewport
00250   //is a full blown widget, we can figure out it's reall screen coordinates and need not consult the iconview object at all.
00251   QPoint viewportTL = iconView()->viewport()->mapToGlobal( QPoint(0,0) );
00252   xpos+= viewportTL.x();
00253   ypos+= viewportTL.y();
00254 
00255   return QPoint(xpos,ypos);
00256 }

void PhotoPreviewWidget::initializeItemRect  )  [private]
 

Definition at line 187 of file photoPreviewWidget.cpp.

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

Referenced by PhotoPreviewWidget().

00188 {
00189   //set pixmap rect to be offset slightly from top left corner (by photo margin)
00190   QRect pr = pixmapRect();
00191   int itemLeft = x();
00192   int itemTop = y();
00193   
00194   pixmapXOffset = (THUMBNAIL_WIDTH - pixmap()->width() ) / 2;  
00195   pixmapYOffset = (THUMBNAIL_HEIGHT - pixmap()->height() ) / 2;  
00196   
00197   pr.setLeft( x() + PHOTO_MARGIN );
00198   pr.setRight( pr.left() + THUMBNAIL_WIDTH );
00199   pr.setTop( y() + PHOTO_MARGIN );
00200   pr.setBottom( pr.top() + THUMBNAIL_HEIGHT );
00201   setPixmapRect( pr );
00202 
00203   //move text rect to be below new pixmap region.
00204   //reset height to allow for up to 3 lines of text.
00205   QFontMetrics fm( qApp->font() );
00206   QRect tr = QRect();
00207   tr.setLeft( x() + PHOTO_MARGIN );
00208   tr.setRight( tr.left() +THUMBNAIL_WIDTH );
00209   tr.setTop( y() + PHOTO_MARGIN + THUMBNAIL_HEIGHT + PHOTO_TEXT_MARGIN );
00210   tr.setBottom( tr.top() + 0*fm.leading() + 1*fm.height() );
00211   setTextRect( tr );
00212 
00213   //set overall item rect
00214   int itemW = THUMBNAIL_WIDTH + 2*PHOTO_MARGIN + PHOTO_SHADOW;
00215   int itemH = THUMBNAIL_HEIGHT + PHOTO_TEXT_MARGIN + textRect().height() + 2*PHOTO_MARGIN + PHOTO_SHADOW;
00216   setItemRect( QRect( itemLeft, itemTop, itemW, itemH ) );
00217 }

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

00077 {
00078   //create colors
00079   QColor offWhite( 255, 255, 255 );
00080   QColor darkBlue(35, 75, 139);
00081   QColor paperColor;
00082 
00083   //draw offwhite or selected color depending on if photo is selected
00084   QRect paperRect( x(), y(),
00085                               2*PHOTO_MARGIN + pixmapRect().width(),
00086                               2*PHOTO_MARGIN + pixmapRect().height() + PHOTO_TEXT_MARGIN + textRect().height() );
00087   if(isSelected())
00088     paperColor = darkBlue;
00089   else
00090     paperColor = offWhite;
00091   p->fillRect(  paperRect, QBrush( paperColor ) );
00092 
00093   //paint pixmap
00094   p->drawPixmap( x() + pixmapRect().x() + pixmapXOffset + 1,
00095                                  y() + pixmapRect().y() + pixmapYOffset + 1, 
00096                                  *pixmap());
00097   
00098   //paint text
00099   int align = AlignLeft | AlignTop | BreakAnywhere;
00100   if(isSelected())
00101     p->setPen( white );
00102   else
00103     p->setPen( black );
00104   p->drawText( x() + textRect().x() + 1, y() + textRect().y() + 1, 
00105                            textRect().width(), textRect().height(),
00106                            align, text() );
00107 }

void PhotoPreviewWidget::paintFocus QPainter *  p,
const QColorGroup &  cg
 

Definition at line 168 of file photoPreviewWidget.cpp.

00168 { }

void PhotoPreviewWidget::paintItem QPainter *  p,
const QColorGroup &  cg
 

Repain iconview item.

Definition at line 109 of file photoPreviewWidget.cpp.

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

00110 {
00111   //resize old static buffer to new needed size, fill with widget background color
00112   static QPixmap buffer;
00113   QRect r = rect();
00114   QSize newSize = r.size().expandedTo(buffer.size() );
00115   buffer.resize(newSize);
00116   buffer.fill( white );
00117 
00118   //construct painter for buffer
00119   QPainter bufferPainter(&buffer, this);
00120   bufferPainter.translate( -r.x(), -r.y() );
00121  
00122    //paint item
00123   paint(&bufferPainter);
00124 
00125   //paint edit button
00126   if(mousedOver)
00127   {
00128     QRect photoInfoRect = getPhotoInfoRect();
00129     bufferPainter.drawPixmap( photoInfoRect, * (((Window*) qApp->mainWidget())->photoInfo) );
00130   }
00131 
00132   //paint shadows
00133   QPixmap* shadowBL, *shadowB, *shadowBR, *shadowR, *shadowTR;
00134   Window* window = (Window*) qApp->mainWidget();
00135   shadowBL = window->shadowBL;
00136   shadowB = window->shadowB;
00137   shadowBR = window->shadowBR;
00138   shadowR = window->shadowR;
00139   shadowTR = window->shadowTR;
00140 
00141   QRect shadowRect;
00142   shadowRect.setLeft( x() + PHOTO_SHADOW_END_OFFSET );
00143   shadowRect.setRight( shadowRect.left() + PHOTO_SHADOW );
00144   shadowRect.setTop( y() + rect().height() - PHOTO_SHADOW );
00145   shadowRect.setBottom( shadowRect.top() + PHOTO_SHADOW );
00146   bufferPainter.drawPixmap( shadowRect, *shadowBL );
00147 
00148   shadowRect.setLeft( shadowRect.right() + 1 );
00149   shadowRect.setRight( x() +  rect().width() - PHOTO_SHADOW - 1 );
00150   bufferPainter.drawPixmap( shadowRect, *shadowB );
00151 
00152   shadowRect.setLeft( shadowRect.right() + 1 );
00153   shadowRect.setRight( shadowRect.left() + PHOTO_SHADOW );
00154   bufferPainter.drawPixmap( shadowRect, *shadowBR );
00155 
00156   shadowRect.setBottom( shadowRect.top() - 1 );
00157   shadowRect.setTop( y() +PHOTO_SHADOW_END_OFFSET + PHOTO_SHADOW );
00158   bufferPainter.drawPixmap( shadowRect, *shadowR );
00159 
00160   shadowRect.setBottom( shadowRect.top() - 1 );
00161   shadowRect.setTop( y() +PHOTO_SHADOW_END_OFFSET );
00162   bufferPainter.drawPixmap( shadowRect, *shadowTR );
00163   
00164   //draw buffer to screen
00165   p->drawPixmap( x(), y(), buffer );
00166 }

void PhotoPreviewWidget::setMousedOver bool  val  ) 
 

Definition at line 219 of file photoPreviewWidget.cpp.

References mousedOver.

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

00220 { 
00221   mousedOver = val;   
00222 }

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 PhotosIconView::dragObject(), PhotosIconView::drawBackground(), and updateImage().

00060 {
00061   pixmapXOffset = (THUMBNAIL_WIDTH - p.width() ) / 2;  
00062   pixmapYOffset = (THUMBNAIL_HEIGHT - p.height() ) / 2;  
00063   QIconViewItem::setPixmap( p, redraw );
00064 }

void PhotoPreviewWidget::setText const QString &  text  ) 
 

Definition at line 71 of file photoPreviewWidget.cpp.

References calibratedWidth, and clipText().

Referenced by PhotoDescEdit::disappear(), PhotoPreviewWidget(), and updateDescription().

00072 {
00073   QIconViewItem::setText( clipText(text, 1, calibratedWidth), false );
00074 }

void PhotoPreviewWidget::updateDescription  ) 
 

Update photo description.

Definition at line 66 of file photoPreviewWidget.cpp.

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

00067 {
00068   setText( phto->getDescription() );
00069 }

void PhotoPreviewWidget::updateImage  ) 
 

Update photo thumbnail from background object.

Definition at line 54 of file photoPreviewWidget.cpp.

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

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


Member Data Documentation

int PhotoPreviewWidget::calibratedWidth [private]
 

Definition at line 76 of file photoPreviewWidget.h.

Referenced by PhotoPreviewWidget(), and setText().

bool PhotoPreviewWidget::mousedOver [private]
 

Definition at line 78 of file photoPreviewWidget.h.

Referenced by PhotoPreviewWidget(), and setMousedOver().

QRect PhotoPreviewWidget::photoInfoRect [private]
 

Definition at line 80 of file photoPreviewWidget.h.

Referenced by paintItem().

Photo* PhotoPreviewWidget::phto [private]
 

Pointer to photo backend object.

Definition at line 74 of file photoPreviewWidget.h.

Referenced by updateDescription(), and updateImage().

int PhotoPreviewWidget::pixmapXOffset [private]
 

offsets used to center pixmap

Definition at line 83 of file photoPreviewWidget.h.

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

int PhotoPreviewWidget::pixmapYOffset [private]
 

offsets used to center pixmap

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:
Generated on Sat Apr 2 05:45:06 2005 for AlbumShaper by  doxygen 1.3.9.1