[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/graphics/digikam
From:       Gilles Caulier <caulier.gilles () gmail ! com>
Date:       2007-04-11 11:47:46
Message-ID: 1176292066.341727.30623.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 652531 by cgilles:

digiKam from trunk : to prepare the future Light Table tool, the thumbbar is now \
resizable. The thumbs content size will be adapted in live to the bar size. Showfoto \
now support this feature.

 M  +42 -20    libs/thumbbar/thumbbar.cpp  
 M  +1 -0      libs/thumbbar/thumbbar.h  
 M  +25 -11    showfoto/showfoto.cpp  


--- trunk/extragear/graphics/digikam/libs/thumbbar/thumbbar.cpp #652530:652531
@@ -5,7 +5,6 @@
  * Description : a bar widget to display image thumbnails
  * 
  * Copyright 2004-2005 by Renchi Raju and Gilles Caulier
- * Copyrigth 2005-2006 by Tom Albers <tomalbers@kde.nl>
  * Copyright 2006-2007 by Gilles Caulier
  * 
  * This program is free software; you can redistribute it
@@ -36,6 +35,7 @@
 
 #include <qdir.h>
 #include <qpixmap.h>
+#include <qimage.h>
 #include <qtimer.h>
 #include <qpainter.h>
 #include <qdict.h>
@@ -58,6 +58,7 @@
 // Local includes.
 
 #include "thumbnailjob.h"
+#include "thumbnailsize.h"
 #include "thumbbar.h"
 #include "thumbbar.moc"
 
@@ -145,15 +146,11 @@
     
     if (d->orientation == Vertical)
     {
-       setHScrollBarMode(QScrollView::AlwaysOff);
-       setFixedWidth(d->tileSize + 2*d->margin
-                     + verticalScrollBar()->sizeHint().width());
+        setHScrollBarMode(QScrollView::AlwaysOff);
     }
     else
     {
-       setVScrollBarMode(QScrollView::AlwaysOff);
-       setFixedHeight(d->tileSize + 2*d->margin
-                      + horizontalScrollBar()->sizeHint().height());
+        setVScrollBarMode(QScrollView::AlwaysOff);
     }
 }
 
@@ -172,6 +169,27 @@
     delete d;
 }
 
+void ThumbBarView::resizeEvent(QResizeEvent* e)
+{
+    if (!e)
+        return;
+
+    QScrollView::resizeEvent(e);
+
+    if (d->orientation == Vertical)
+    {
+       d->tileSize = width() - 2*d->margin
+                     - verticalScrollBar()->sizeHint().width();
+    }
+    else
+    {
+       d->tileSize = height() - 2*d->margin
+                     - horizontalScrollBar()->sizeHint().height();
+    }
+
+    rearrangeItems();
+}
+
 void ThumbBarView::setExifRotate(bool exifRotate)
 {
     d->exifRotate = exifRotate;
@@ -340,7 +358,7 @@
        d->thumbJob = 0;
     }
        
-    d->thumbJob = new ThumbnailJob(item->url(), d->tileSize, true, d->exifRotate);
+    d->thumbJob = new ThumbnailJob(item->url(), ThumbnailSize::Huge, true, \
d->exifRotate);  
     connect(d->thumbJob, SIGNAL(signalThumbnail(const KURL&, const QPixmap&)),
             this, SLOT(slotGotThumbnail(const KURL&, const QPixmap&)));
@@ -400,9 +418,12 @@
                 
                 if (item->d->pixmap)
                 {
-                    int x = (tile.width() -item->d->pixmap->width())/2;
-                    int y = (tile.height()-item->d->pixmap->height())/2;
-                    bitBlt(&tile, x, y, item->d->pixmap);
+                    QPixmap pix; 
+                    pix.convertFromImage(QImage(item->d->pixmap->convertToImage()).
+                                         smoothScale(d->tileSize, d->tileSize, \
QImage::ScaleMin)); +                    int x = (tile.width()  - pix.width())/2;
+                    int y = (tile.height() - pix.height())/2;
+                    bitBlt(&tile, x, y, &pix);
                 }
                 
                 bitBlt(&bgPix, 0, item->d->pos - cy, &tile);
@@ -424,9 +445,12 @@
                 
                 if (item->d->pixmap)
                 {
-                    int x = (tile.width() -item->d->pixmap->width())/2;
-                    int y = (tile.height()-item->d->pixmap->height())/2;
-                    bitBlt(&tile, x, y, item->d->pixmap);
+                    QPixmap pix; 
+                    pix.convertFromImage(QImage(item->d->pixmap->convertToImage()).
+                                         smoothScale(d->tileSize, d->tileSize, \
QImage::ScaleMin)); +                    int x = (tile.width() - pix.width())/2;
+                    int y = (tile.height()- pix.height())/2;
+                    bitBlt(&tile, x, y, &pix);
                 }
                 
                 bitBlt(&bgPix, item->d->pos - cx, 0, &tile);
@@ -597,7 +621,7 @@
            d->thumbJob = 0;
         }
 
-        d->thumbJob = new ThumbnailJob(urlList, d->tileSize, true, d->exifRotate);
+        d->thumbJob = new ThumbnailJob(urlList, ThumbnailSize::Huge, true, \
d->exifRotate);  
         connect(d->thumbJob, SIGNAL(signalThumbnail(const KURL&, const QPixmap&)),
                 this, SLOT(slotGotThumbnail(const KURL&, const QPixmap&)));
@@ -645,7 +669,7 @@
 
 void ThumbBarView::slotFailedThumbnail(const KURL& url)
 {
-    KIO::PreviewJob* job = KIO::filePreview(url, d->tileSize, 0, 0, 70, true, \
false); +    KIO::PreviewJob* job = KIO::filePreview(url, ThumbnailSize::Huge, 0, 0, \
70, true, false);  
     connect(job, SIGNAL(gotPreview(const KFileItem *, const QPixmap &)),
             this, SLOT(slotGotPreview(const KFileItem *, const QPixmap &)));
@@ -654,8 +678,7 @@
             this, SLOT(slotFailedPreview(const KFileItem *)));
 }
 
-void ThumbBarView::slotGotPreview(const KFileItem *fileItem,
-                                  const QPixmap& pix)
+void ThumbBarView::slotGotPreview(const KFileItem *fileItem, const QPixmap& pix)
 {
     ThumbBarItem* item = d->itemDict.find(fileItem->url().url());
     if (!item)
@@ -678,8 +701,7 @@
         return;
 
     KIconLoader* iconLoader = KApplication::kApplication()->iconLoader();
-    QPixmap pix = iconLoader->loadIcon("image", KIcon::NoGroup,
-                                       d->tileSize);
+    QPixmap pix = iconLoader->loadIcon("image", KIcon::NoGroup, \
ThumbnailSize::Huge);  
     if (item->d->pixmap)
     {
--- trunk/extragear/graphics/digikam/libs/thumbbar/thumbbar.h #652530:652531
@@ -84,6 +84,7 @@
         
 protected:
 
+    void resizeEvent(QResizeEvent* e);
     void viewportPaintEvent(QPaintEvent* e);
     void contentsMousePressEvent(QMouseEvent* e);
 
--- trunk/extragear/graphics/digikam/showfoto/showfoto.cpp #652530:652531
@@ -118,6 +118,7 @@
         rightSidebar            = 0;
         splash                  = 0;
         itemsNb                 = 0;
+        vSplitter               = 0;
         deleteItem2Trash        = true;
         fullScreenHideThumbBar  = true;
         validIccPath            = true;
@@ -129,6 +130,8 @@
     
     int                              itemsNb;
 
+    QSplitter                       *vSplitter;
+
     KURL                             lastOpenedDirectory;
     
     KToggleAction                   *showBarAction;
@@ -365,6 +368,7 @@
     {
         QHBoxLayout *hlay = new QHBoxLayout(widget);
         m_splitter        = new QSplitter(widget);
+        d->thumbBar       = new Digikam::ThumbBarView(m_splitter, \
Digikam::ThumbBarView::Vertical);  m_canvas          = new \
Digikam::Canvas(m_splitter);  m_canvas->setSizePolicy(rightSzPolicy);
 
@@ -372,7 +376,6 @@
         
         d->rightSidebar    = new Digikam::ImagePropertiesSideBar(widget, "ShowFoto \
                Sidebar Right", m_splitter, 
                                                                  \
                Digikam::Sidebar::Right);
-        d->thumbBar        = new Digikam::ThumbBarView(widget, \
Digikam::ThumbBarView::Vertical);  
         hlay->addWidget(d->thumbBar);
         hlay->addWidget(m_splitter);
@@ -380,21 +383,24 @@
     }
     else                                                     // Horizontal thumbbar \
layout  {
-        m_splitter        = new QSplitter(widget);
-        QWidget* widget2  = new QWidget(m_splitter);
-        QVBoxLayout *vlay = new QVBoxLayout(widget2);
-        m_canvas          = new Digikam::Canvas(widget2);
+        m_splitter           = new QSplitter(Qt::Horizontal, widget);
+        QWidget* widget2     = new QWidget(m_splitter);
+        QVBoxLayout *vlay    = new QVBoxLayout(widget2);
+        d->vSplitter         = new QSplitter(Qt::Vertical, widget2);
+        m_canvas             = new Digikam::Canvas(d->vSplitter);
+        d->thumbBar          = new Digikam::ThumbBarView(d->vSplitter, \
Digikam::ThumbBarView::Horizontal); +
         m_canvas->setSizePolicy(rightSzPolicy);
+        d->vSplitter->setFrameStyle( QFrame::NoFrame );
+        d->vSplitter->setFrameShadow( QFrame::Plain );
+        d->vSplitter->setFrameShape( QFrame::NoFrame );
+        d->vSplitter->setOpaqueResize(false);
 
-        d->thumbBar       = new Digikam::ThumbBarView(widget2, \
Digikam::ThumbBarView::Horizontal); +        vlay->addWidget(d->vSplitter);
 
-        vlay->addWidget(m_canvas);
-        vlay->addWidget(d->thumbBar);
-                
         QHBoxLayout *hlay = new QHBoxLayout(widget);
         d->rightSidebar   = new Digikam::ImagePropertiesSideBar(widget, "ShowFoto \
                Sidebar Right", m_splitter, 
                                                                 \
                Digikam::Sidebar::Right);
-
         hlay->addWidget(m_splitter);
         hlay->addWidget(d->rightSidebar);        
     }        
@@ -458,7 +464,13 @@
         d->showBarAction->activate();
 
     d->lastOpenedDirectory.setPath( config->readEntry("Last Opened Directory",
-                                    KGlobalSettings::documentPath()) );    
+                                    KGlobalSettings::documentPath()) );
+
+    QSizePolicy szPolicy(QSizePolicy::Preferred, QSizePolicy::Expanding, 2, 1);
+    if(config->hasKey("Vertical Splitter Sizes") && d->vSplitter)
+        d->vSplitter->setSizes(config->readIntListEntry("Vertical Splitter Sizes"));
+    else 
+        m_canvas->setSizePolicy(szPolicy);    
 }
 
 void ShowFoto::saveSettings()
@@ -470,6 +482,8 @@
     
     config->writeEntry("Last Opened Directory", d->lastOpenedDirectory.path() );
     config->writeEntry("Show Thumbnails", !d->showBarAction->isChecked());
+    if (d->vSplitter)
+        config->writeEntry("Vertical Splitter Sizes", d->vSplitter->sizes());
 
     config->sync();    
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic