00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <qpixmap.h>
00013 #include <qimage.h>
00014 #include <qpainter.h>
00015 #include <qcursor.h>
00016 #include <qapplication.h>
00017
00018
00019
00020
00021 #include "subalbumsIconView.h"
00022 #include "subalbumPreviewWidget.h"
00023 #include "layoutWidget.h"
00024 #include "subalbumWidget.h"
00025 #include "photoPreviewWidget.h"
00026
00027
00028 SubalbumsIconView::SubalbumsIconView( QWidget *parent ) : QIconView( parent )
00029 {
00030
00031 setMouseTracking(true);
00032
00033 currentPseudoSelection = NULL;
00034
00035
00036 connect( this, SIGNAL(onItem(QIconViewItem*)),
00037 this, SLOT(repaintGroup(QIconViewItem*)) );
00038
00039
00040 connect( this, SIGNAL(onViewport()),
00041 this, SLOT(clearPseudoSelection()) );
00042
00043
00044 QString calibrationString( qApp->translate("SubalbumPreviewWidget", "Calibration String") );
00045 QFontMetrics fm( qApp->font() );
00046 textWidth = fm.width( calibrationString );
00047 }
00048
00049 void SubalbumsIconView::contentsDropEvent( QDropEvent *e )
00050 {
00051 QIconView::contentsDropEvent( e );
00052
00053
00054 if(e->source() == viewport() )
00055 emit itemHasMoved();
00056 }
00057
00058 void SubalbumsIconView::drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph )
00059 {
00060 if( bufferPixmap.size() != size())
00061 { bufferPixmap.resize( size() ); }
00062 QPainter bufferPainter( &bufferPixmap, viewport() );
00063 int xOffset = clipx - contentsX();
00064 int yOffset = clipy - contentsY();
00065
00066 bufferPainter.translate( -contentsX(), -contentsY() );
00067 QIconView::drawContents( &bufferPainter, clipx, clipy, clipw, cliph );
00068 bitBlt(p->device(), xOffset, yOffset, &bufferPixmap, xOffset, yOffset, clipw, cliph );
00069 }
00070
00071 void SubalbumsIconView::contentsMousePressEvent ( QMouseEvent * e )
00072 {
00073
00074 if( e->button() != Qt::LeftButton ) return;
00075
00076 dragStartPos = e->pos();
00077 QIconView::contentsMousePressEvent( e );
00078 }
00079
00080 QDragObject* SubalbumsIconView::dragObject()
00081 {
00082
00083 if( !currentItem() )
00084 return 0;
00085
00086
00087 QIconDrag *drag = new QIconDrag( viewport() );
00088
00089
00090 QRect r = currentItem()->rect();
00091 QPixmap buffer( r.width(), r.height() );
00092 QPainter painter( &buffer, this );
00093 painter.translate( -r.x(), -r.y() );
00094 ((SubalbumPreviewWidget*)currentItem())->paint( &painter );
00095
00096
00097
00098 QBitmap bit = buffer.createHeuristicMask();
00099 buffer.setMask( bit );
00100
00101
00102 drag->setPixmap( buffer, QPoint( dragStartPos.x() - r.x(), dragStartPos.y() - r.y() ) );
00103
00104
00105
00106 drag->append( QIconDragItem(), QRect(), QRect() );
00107
00108 return drag;
00109 }
00110
00111 void SubalbumsIconView::contentsDragMoveEvent( QDragMoveEvent* e )
00112 {
00113 QIconView::contentsDragMoveEvent( e );
00114 e->accept(true);
00115
00116
00117 if(e->source() == NULL)
00118 return;
00119
00120
00121
00122 if(e->source() == viewport() )
00123 {
00124
00125 }
00126
00127 else if(e->source()->parentWidget() == ((LayoutWidget*)parentWidget()->parentWidget())->getSubalbum()->getPhotos() )
00128 {
00129 SubalbumPreviewWidget* item = (SubalbumPreviewWidget*)findItem( e->pos() );
00130
00131
00132 if(item == currentPseudoSelection)
00133 {
00134 return;
00135 }
00136
00137
00138 if(currentPseudoSelection != NULL)
00139 {
00140 currentPseudoSelection->setMousedOver(false);
00141 repaintItem(currentPseudoSelection);
00142 }
00143
00144
00145 currentPseudoSelection = item;
00146
00147
00148 if(currentPseudoSelection != NULL)
00149 {
00150 currentPseudoSelection->setMousedOver(true);
00151 repaintItem(currentPseudoSelection);
00152 }
00153 }
00154 }
00155
00156 void SubalbumsIconView::repaintGroup( QIconViewItem* pseudoSelection)
00157 {
00158
00159 clearPseudoSelection();
00160
00161
00162 currentPseudoSelection = (SubalbumPreviewWidget*)pseudoSelection;
00163 currentPseudoSelection->setMousedOver(true);
00164 repaintItem(currentPseudoSelection);
00165 }
00166
00167 void SubalbumsIconView::clearPseudoSelection()
00168 {
00169
00170 if(currentPseudoSelection != NULL)
00171 {
00172 currentPseudoSelection->setMousedOver(false);
00173 repaintItem(currentPseudoSelection);
00174 currentPseudoSelection = NULL;
00175 }
00176 }
00177
00178 int SubalbumsIconView::getTextWidth()
00179 { return textWidth; }
00180
00181 QSize SubalbumsIconView::minimumSizeHint() const { return sizeHint(); }
00182
00183 QSize SubalbumsIconView::sizeHint() const
00184 {
00185 QSize s = QIconView::sizeHint();
00186
00187
00188 s.setWidth(0);
00189 QIconViewItem *item;
00190 for( item = firstItem(); item != NULL; item = item->nextItem() )
00191 {
00192 if(item->width() > s.width() )
00193 s.setWidth( item->width() );
00194 }
00195 s.setWidth( s.width() + 2*spacing() + verticalScrollBar()->sizeHint().width() );
00196 return s;
00197 }
00198
00199
00200