AlbumShaper  1.0a3
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
SubalbumPreviewWidget Class Reference

Displays subalbum icon and name. More...

#include <subalbumPreviewWidget.h>

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

Public Member Functions

 SubalbumPreviewWidget (SubalbumsIconView *parent, Subalbum *salbum)
 Sets subalbum pointer. More...
 
SubalbumgetSubalbum ()
 Returns subalbum pointer. More...
 
void paintFocus (QPainter *p, const QColorGroup &cg)
 
bool acceptDrop (const QMimeSource *e) const
 
int compare (Q3IconViewItem *i) const
 
void setText (const QString &text)
 
void setMousedOver (bool val)
 
void paint (QPainter *p)
 

Static Public Member Functions

static QPixmap * createSubalbumPixmap (QString imageName)
 

Protected Member Functions

void calcRect (const QString &text_=QString::null)
 
void paintItem (QPainter *p, const QColorGroup &cg)
 

Private Member Functions

void dropped (QDropEvent *e, const Q3ValueList< Q3IconDragItem > &lst)
 
QColor blendColors (QColor a, QColor b, double alpha)
 
void initializeItemRect ()
 

Private Attributes

Subalbumsubalbum
 Pointer to subalbum backend object. More...
 
QPixmap * subalbumPreviewImage
 Representative Image for Subalbum. More...
 
QString * subalbumName
 Subalbum's Name. More...
 
SubalbumsIconViewparent
 parent icon view More...
 
bool mousedOver
 is the mouse over the widget More...
 

Detailed Description

Displays subalbum icon and name.

Definition at line 33 of file subalbumPreviewWidget.h.

Constructor & Destructor Documentation

§ SubalbumPreviewWidget()

SubalbumPreviewWidget::SubalbumPreviewWidget ( SubalbumsIconView parent,
Subalbum salbum 
)

Sets subalbum pointer.

Definition at line 37 of file subalbumPreviewWidget.cpp.

References initializeItemRect(), mousedOver, parent, and subalbum.

38  : Q3IconViewItem(parent,
39  clipText( salbum->getName(), 2, parent->getTextWidth()),
40  *salbum->getRepresentativeImage(MEDIUM) )
41 {
42  mousedOver = false;
43  this->parent = parent;
44  subalbum = salbum;
45 
46  //initialize item rectangle
48 }
#define MEDIUM
Definition: album.h:18
Subalbum * subalbum
Pointer to subalbum backend object.
QString clipText(QString string, int lines, int lineWidth)
clip text to fit within numer of lines and max width
Definition: guiTools.cpp:72
QPixmap * getRepresentativeImage(int size)
gets a sized representative image
Definition: subalbum.cpp:87
SubalbumsIconView * parent
parent icon view
bool mousedOver
is the mouse over the widget
QString getName()
Gets the Subalbum Name.
Definition: subalbum.cpp:84

Member Function Documentation

§ acceptDrop()

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

Definition at line 249 of file subalbumPreviewWidget.cpp.

250 {
251  return true;
252 }

§ blendColors()

QColor SubalbumPreviewWidget::blendColors ( QColor  a,
QColor  b,
double  alpha 
)
private

Definition at line 383 of file subalbumPreviewWidget.cpp.

Referenced by paintItem().

384 {
385  double alpha2 = 1-alpha;
386  return QColor( (int)(alpha*a.red() + alpha2*b.red()),
387  (int)(alpha*a.green() + alpha2*b.green()),
388  (int)(alpha*a.blue() + alpha2*b.blue()) );
389 }
long b
Definition: jpegInternal.h:125

§ calcRect()

void SubalbumPreviewWidget::calcRect ( const QString &  text_ = QString::null)
protected

Definition at line 339 of file subalbumPreviewWidget.cpp.

References initializeItemRect().

340 {
341  //setup default dimensions
342  Q3IconViewItem::calcRect( text_ );
343 
344  //update using init method
346 }

§ compare()

int SubalbumPreviewWidget::compare ( Q3IconViewItem i) const

Definition at line 254 of file subalbumPreviewWidget.cpp.

255 {
256  if(pos().y() >= i->pos().y())
257  { return 1; }
258  else
259  { return -1; }
260 }

§ createSubalbumPixmap()

QPixmap * SubalbumPreviewWidget::createSubalbumPixmap ( QString  imageName)
static

Definition at line 262 of file subalbumPreviewWidget.cpp.

References calcScaledImageDimensions().

Referenced by Subalbum::setRepresentativeImage(), and Subalbum::Subalbum().

263 {
264  //load image
265  QImage icon(imageName);
266 
267  //if null then bail immediately
268  if( icon.isNull() )
269  return NULL;
270 
271  //----------------------------------------------
272  //resize image based on text properties. Find ideal hight
273  QFontMetrics fm( qApp->font() );
274 
275  //ideal image height is two text lines, 1 pixel inbetween
276  int idealImageHeight = fm.leading() + 2*fm.height();
277 
278  //ideal image width assuming 4:3 aspect ratio
279  int idealImageWidth = (4 * idealImageHeight ) / 3;
280  //----------------------------------------------
281  //resize image to fit within bounding rectangle, pad and center as necessary
282  int actualImageWidth = 0;
283  int actualImageHeight = 0;
284  calcScaledImageDimensions( icon.width(), icon.height(),
285  idealImageWidth, idealImageHeight,
286  actualImageWidth, actualImageHeight );
287 
288  //if off by one pixel fudge it so icon perfectly cenetered
289  if(actualImageHeight == idealImageHeight - 1)
290  {
291  actualImageHeight = idealImageHeight;
292  }
293 
294  QImage scaledIcon= icon.smoothScale( actualImageWidth, actualImageHeight );
295  QImage* paddedScaledIcon = new QImage(idealImageWidth, idealImageHeight, scaledIcon.depth());
296  paddedScaledIcon->setAlphaBuffer(true);
297 
298  //make entire image transparent
299  int x, y;
300  for(x=0; x< idealImageWidth; x++)
301  {
302  for(y=0; y<idealImageHeight; y++)
303  {
304  paddedScaledIcon->setPixel(x,y, qRgba(255, 255, 255,0) );
305  }
306  }
307 
308  //paint image in center of padded region
309  int xDiff = idealImageWidth - actualImageWidth;
310  int yDiff = idealImageHeight - actualImageHeight;
311  int x2 = 0;
312  for(x= xDiff/2; x < (xDiff/2) + actualImageWidth; x++)
313  {
314  int y2 = 0;
315  for(y= yDiff/2; y < (yDiff/2) + actualImageHeight; y++)
316  {
317  paddedScaledIcon->setPixel(x, y, scaledIcon.pixel(x2, y2));
318  y2++;
319  }
320  x2++;
321  }
322 
323  //clip corners if image takes up full width
324  if(xDiff == 0)
325  {
326  paddedScaledIcon->setPixel(0, 0, qRgba(255, 0,0,0) );
327  paddedScaledIcon->setPixel(idealImageWidth-1, 0, qRgba(255, 0,0,0) );
328  paddedScaledIcon->setPixel(0, idealImageHeight-1, qRgba(255, 0,0,0) );
329  paddedScaledIcon->setPixel(idealImageWidth-1, idealImageHeight-1, qRgba(255, 0,0,0) );
330  }
331 
332  QPixmap* padddedScaledPix = new QPixmap( paddedScaledIcon->width(), paddedScaledIcon->height() );
333  padddedScaledPix->convertFromImage( *paddedScaledIcon );
334  delete paddedScaledIcon;
335  return padddedScaledPix;
336  //----------------------------------------------
337 }
void calcScaledImageDimensions(int origWidth, int origHeight, int idealWidth, int idealHeight, int &width, int &height)
Computes scale of image dimensions while respecting aspect ratio, equivalent to a QImage::scaleMin wi...
Definition: imageTools.cpp:39

§ dropped()

void SubalbumPreviewWidget::dropped ( QDropEvent *  e,
const Q3ValueList< Q3IconDragItem > &  lst 
)
private

Definition at line 178 of file subalbumPreviewWidget.cpp.

References Subalbum::addPhoto(), SubalbumWidget::getPhotos(), SubalbumWidget::getSubalbum(), height, parent, Subalbum::photoMoved(), and subalbum.

179 {
180  //if source is not from the application then ignore
181  if(e->source() == NULL)
182  return;
183 
184  //if source of drop event is from this widget when user is attempting to
185  //rearrange subalbums, move currently selected item to
186  //approximately where the cursor is before rearranging items
187  if(e->source()->parentWidget() == parent)
188  {
189  if(e->pos().y() < (y() + (height()/2)))
190  {
191  parent->currentItem()->move(x(), y() - 1);
192  }
193  else
194  {
195  parent->currentItem()->move(x(), y() + (height()/2) + 1);
196  }
197  }
198  //else check to see if user dropped photo(s) on subalbum
199  else
200  {
201  //if the source of the items is the current subalbum icon view and
202  //this is a different subalbum then
203  //move photos from that subalbum to this one
204  if(
205  !isSelected() &&
206  (
207  e->source()->parentWidget() ==
208  ((LayoutWidget*)(parent->parentWidget()->parentWidget()))->getSubalbum()->getPhotos()
209  )
210  )
211  {
212  //iterate over all selected photos, inserting each
213  //into this subalbum, removing from old subalbum,
214  //and deleting old photo widgets
215  SubalbumWidget* oldSubalbumWidget = ((LayoutWidget*)(parent->parentWidget()->parentWidget()))->getSubalbum();
216  Subalbum* oldSubalbum = oldSubalbumWidget->getSubalbum();
217  Q3IconViewItem* current = oldSubalbumWidget->getPhotos()->firstItem();
218  while(current != NULL)
219  {
220  //found a selected photo
221  if(current->isSelected())
222  {
223  //get pointer to photo
224  Photo* photo = ((PhotoPreviewWidget*)current)->getPhoto();
225 
226  //remove photo from that subalbum
227  oldSubalbum->photoMoved(photo);
228 
229  //add photo to this subalbum
230  subalbum->addPhoto(photo);
231 
232  //delete photo widget and rearrange photos
233  Q3IconViewItem* temp = current;
234  current = current->nextItem();
235  delete temp;
236  }
237  else
238  {
239  current = current->nextItem();
240  }
241  } //end while
242 
243  //reannarge photos once all photos have been removed
244  oldSubalbumWidget->getPhotos()->arrangeItemsInGrid();
245  }
246  }
247 }
bool addPhoto(QString fileName, bool replaceDescription=false, Photo *newPhoto=NULL)
Adds a new photo to the Subalbum and appends it to the end, returns TRUE if successful.
Definition: subalbum.cpp:198
A photo consists of a full size image, a smaller slide show image, a very small thumbnail image...
Definition: photo.h:44
Displays photo thumbnail and description.
Displays list of subalbums and a particular subalbum layout.
Definition: layoutWidget.h:39
A subalbum contains photos.
Definition: subalbum.h:48
Subalbum * subalbum
Pointer to subalbum backend object.
SubalbumsIconView * parent
parent icon view
void photoMoved(Photo *val)
Removes a specified photo without deleting the object.
Definition: subalbum.cpp:484
Subalbum * getSubalbum()
returns a pointer to the backend subalbum
Displays subalbum layout.
Q3IconView * getPhotos()
Returns pointer to icon view.
int height
Definition: blur.cpp:79

§ getSubalbum()

Subalbum * SubalbumPreviewWidget::getSubalbum ( )

Returns subalbum pointer.

Definition at line 50 of file subalbumPreviewWidget.cpp.

References subalbum.

Referenced by Album::syncSubalbumList().

51 {
52  return subalbum;
53 }
Subalbum * subalbum
Pointer to subalbum backend object.

§ initializeItemRect()

void SubalbumPreviewWidget::initializeItemRect ( )
private

Definition at line 348 of file subalbumPreviewWidget.cpp.

References SubalbumsIconView::getTextWidth(), and parent.

Referenced by calcRect(), and SubalbumPreviewWidget().

349 {
350  //reset pixmap rect
351  QRect pr = pixmapRect();
352  int prWidth = pr.width();
353  int prHeight = pr.height();
354  pr.setTopLeft( QPoint(3,3) );
355  pr.setBottomRight( QPoint(pr.left()+prWidth, pr.top()+prHeight) );
356  setPixmapRect( pr );
357 
358  //reset text rect
359  int textWidth = parent->getTextWidth();
360  QRect tr = textRect();
361  tr.setTop( pixmapRect().top() );
362  tr.setBottom( pixmapRect().bottom() );
363  tr.setLeft( pixmapRect().right() + 2 );
364  tr.setRight( tr.left() + textWidth );
365  setTextRect( tr );
366 
367  //reset item rect using pixmap and text rect dimensions
368  int itemW = 3 + pixmapRect().width() + (tr.left() - pr.right()) + textRect().width() + 3;
369  int itemH = 3 + pixmapRect().height() + 3;
370  setItemRect( QRect( pixmapRect().left() - 3, pixmapRect().top() - 3, itemW, itemH ) );
371 }
SubalbumsIconView * parent
parent icon view

§ paint()

void SubalbumPreviewWidget::paint ( QPainter *  p)

Definition at line 57 of file subalbumPreviewWidget.cpp.

References paintItem().

58 {
59  paintItem( p, QColorGroup() );
60 }
void paintItem(QPainter *p, const QColorGroup &cg)

§ paintFocus()

void SubalbumPreviewWidget::paintFocus ( QPainter *  p,
const QColorGroup &  cg 
)

Definition at line 55 of file subalbumPreviewWidget.cpp.

55 { }

§ paintItem()

void SubalbumPreviewWidget::paintItem ( QPainter *  p,
const QColorGroup &  cg 
)
protected

Definition at line 62 of file subalbumPreviewWidget.cpp.

References blendColors(), buffer, height, mousedOver, and width.

Referenced by paint().

63 {
64  QColor lightLightBlue( 152, 180, 226 );
65  QColor darkLightBlue(193, 210, 238);
66  QColor darkBlue(35, 75, 139);
67  QColor background = darkLightBlue;
68 
69  //resize old static buffer to new needed size, fill with widget background color
70  static QPixmap buffer;
71  QRect r = rect();
72  QSize newSize = r.size().expandedTo(buffer.size() );
73  buffer.resize(newSize);
74  buffer.fill( background );
75 
76  //construct painter for buffer
77  QPainter bufferPainter(&buffer);
78  bufferPainter.translate( -r.x(), -r.y() );
79 
80  //turn off clipping to make painting operations faster
81  bufferPainter.setClipping(false);
82 
83  //paint mouse over or actual selection color
84  bool paintRect = false;
85  QColor paintColor;
86  if(isSelected()) { paintColor = darkBlue; paintRect = true; }
87  else if(mousedOver) { paintColor = lightLightBlue; paintRect = true; }
88 
89  if(paintRect)
90  {
91  //first paint alpha blended edges
92 
93  //-------------------------
94  //top and bottom edges
95  QRect r2 = r;
96  r2.setLeft( r.left() + 4);
97  r2.setRight( r.right() - 4);
98  r2.setTop( r.top() );
99  r2.setBottom( r.bottom() );
100  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.40 ) );
101 
102  r2.setLeft( r2.left() + 1);
103  r2.setRight( r2.right() - 1);
104  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.67 ) );
105  //-------------------------
106  //inner top and bottom edges
107  r2.setLeft( r2.left() - 3);
108  r2.setRight( r2.right() + 3);
109  r2.setTop( r2.top() + 1 );
110  r2.setBottom( r2.bottom() - 1);
111  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.40 ) );
112 
113  r2.setLeft( r2.left() + 1);
114  r2.setRight( r2.right() - 1);
115  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.67 ) );
116  //-------------------------
117  //left and right inner edges
118  r2.setLeft( r2.left() - 2);
119  r2.setRight( r2.right() + 2);
120  r2.setTop( r2.top() + 1 );
121  r2.setBottom( r2.bottom() - 1);
122  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.40) );
123 
124  r2.setTop( r2.top() + 1);
125  r2.setBottom( r2.bottom() - 1);
126  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.67) );
127  //-------------------------
128  // middle region
129  r2.setLeft( r2.left() - 1 );
130  r2.setRight( r2.right() + 1 );
131  r2.setTop( r2.top() + 1);
132  r2.setBottom( r2.bottom() - 1);
133  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.40) );
134 
135  r2.setTop( r2.top() + 1);
136  r2.setBottom( r2.bottom() - 1);
137  bufferPainter.fillRect( r2, blendColors( paintColor, background, 0.67) );
138  //-------------------------
139  //second paint inner selection
140  r2 = r;
141  r2.setLeft( r.left() + 1);
142  r2.setRight( r.right() - 1);
143  r2.setTop( r.top() + 4 );
144  r2.setBottom( r.bottom() - 4);
145  bufferPainter.fillRect( r2, paintColor );
146 
147  r2.setLeft( r2.left() + 1);
148  r2.setRight( r2.right() - 1);
149  r2.setTop( r2.top() - 2 );
150  r2.setBottom( r2.bottom() + 2 );
151  bufferPainter.fillRect( r2, paintColor );
152 
153  r2.setLeft( r2.left() + 2);
154  r2.setRight( r2.right() - 2);
155  r2.setTop( r2.top() - 1 );
156  r2.setBottom( r2.bottom() + 1 );
157  bufferPainter.fillRect( r2, paintColor );
158  }
159 
160  //paint pixmap
161  bufferPainter.drawPixmap( x()+4 , y() + 4, *pixmap());
162 
163  //paint text
164  int align = Qt::AlignLeft | Qt::AlignTop | Qt::TextWrapAnywhere;
165  if(isSelected())
166  bufferPainter.setPen( Qt::white );
167  else
168  bufferPainter.setPen( Qt::black );
169  bufferPainter.drawText( x() + 4 + pixmapRect().width(),
170  y() + 4,
171  textRect().width(), textRect().height(),
172  align, text() );
173 
174  //draw buffer to screen
175  p->drawPixmap( x(), y(), buffer );
176 }
int width
Definition: blur.cpp:79
QColor blendColors(QColor a, QColor b, double alpha)
float * buffer
Definition: blur.cpp:80
bool mousedOver
is the mouse over the widget
int height
Definition: blur.cpp:79

§ setMousedOver()

void SubalbumPreviewWidget::setMousedOver ( bool  val)

Definition at line 378 of file subalbumPreviewWidget.cpp.

References mousedOver.

Referenced by SubalbumsIconView::clearPseudoSelection(), SubalbumsIconView::contentsDragMoveEvent(), and SubalbumsIconView::repaintGroup().

379 {
380  mousedOver = val;
381 }
bool mousedOver
is the mouse over the widget

§ setText()

void SubalbumPreviewWidget::setText ( const QString &  text)

Definition at line 373 of file subalbumPreviewWidget.cpp.

References clipText(), SubalbumsIconView::getTextWidth(), and parent.

374 {
375  Q3IconViewItem::setText( clipText(text, 2, parent->getTextWidth()), false );
376 }
QString clipText(QString string, int lines, int lineWidth)
clip text to fit within numer of lines and max width
Definition: guiTools.cpp:72
SubalbumsIconView * parent
parent icon view

Member Data Documentation

§ mousedOver

bool SubalbumPreviewWidget::mousedOver
private

is the mouse over the widget

Definition at line 78 of file subalbumPreviewWidget.h.

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

§ parent

SubalbumsIconView* SubalbumPreviewWidget::parent
private

parent icon view

Definition at line 75 of file subalbumPreviewWidget.h.

Referenced by dropped(), initializeItemRect(), setText(), and SubalbumPreviewWidget().

§ subalbum

Subalbum* SubalbumPreviewWidget::subalbum
private

Pointer to subalbum backend object.

Definition at line 66 of file subalbumPreviewWidget.h.

Referenced by dropped(), getSubalbum(), and SubalbumPreviewWidget().

§ subalbumName

QString* SubalbumPreviewWidget::subalbumName
private

Subalbum's Name.

Definition at line 72 of file subalbumPreviewWidget.h.

§ subalbumPreviewImage

QPixmap* SubalbumPreviewWidget::subalbumPreviewImage
private

Representative Image for Subalbum.

Definition at line 69 of file subalbumPreviewWidget.h.


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