[Digikam-devel] extragear/graphics/digikam

Gilles Caulier caulier.gilles at kdemail.net
Tue Feb 13 11:52:58 GMT 2007


SVN commit 633158 by cgilles:

digikam from trunk: native Slideshow Tool : add capability to print more informations on bottom of pictures.

There is a new option to print image comment. Comments from database is displayed under digiKam. With Showfoto, Exif Comments is displayed.

The implementation is ready to handle all photograph informations (Apperture, Focal, Exposure, Date, etc : the same info than photograph properties from right sidebar in fact...).

CCMAIL: digikam-devel at kde.org

 M  +20 -11    digikam/digikamview.cpp  
 M  +5 -2      digikam/digikamview.h  
 M  +11 -0     showfoto/showfoto.cpp  
 M  +4 -3      utilities/imageeditor/editor/editorwindow.cpp  
 M  +24 -0     utilities/imageeditor/editor/imagewindow.cpp  
 M  +12 -4     utilities/setup/setupslideshow.cpp  
 M  +17 -3     utilities/slideshow/slideshow.cpp  
 M  +17 -18    utilities/slideshow/slideshowsettings.h  


--- trunk/extragear/graphics/digikam/digikam/digikamview.cpp #633157:633158
@@ -919,7 +919,7 @@
     d->parent->toggledToPreviewMode(t);
 }
 
-void DigikamView::slideShow(const KURL::List &urlList)
+void DigikamView::slideShow(ImageInfoList &infoList)
 {
     KConfig* config = kapp->config();
     config->setGroup("ImageViewer Settings");
@@ -927,11 +927,20 @@
 
     SlideShowSettings settings;
     settings.exifRotate = AlbumSettings::instance()->getExifRotate();
-    settings.fileList   = urlList;
-    settings.delay      = config->readNumEntry("SlideShowDelay", 5) * 1000;
-    settings.printName  = config->readBoolEntry("SlideShowPrintName", true);
-    settings.loop       = config->readBoolEntry("SlideShowLoop", false);
 
+    for (ImageInfo *info = infoList.first(); info; info = infoList.next())
+    {
+        settings.fileList.append(info->kurl());
+        SlidePictureInfo pictInfo;
+        pictInfo.comment = info->caption();
+        settings.pictInfoMap.insert(info->kurl(), pictInfo);
+    }
+
+    settings.delay        = config->readNumEntry("SlideShowDelay", 5) * 1000;
+    settings.printName    = config->readBoolEntry("SlideShowPrintName", true);
+    settings.printComment = config->readBoolEntry("SlideShowPrintComment", false);
+    settings.loop         = config->readBoolEntry("SlideShowLoop", false);
+
     SlideShow *slide = new SlideShow(settings);
     if (startWithCurrent)
         slide->setCurrent(dynamic_cast<AlbumIconItem*>(d->iconView->currentItem())->imageInfo()->kurl());
@@ -941,29 +950,29 @@
 
 void DigikamView::slotSlideShowAll()
 {
-    KURL::List urlList;
+    ImageInfoList infoList;
     AlbumIconItem* item = dynamic_cast<AlbumIconItem*>(d->iconView->firstItem());
     while (item) 
     {
-        urlList.append(item->imageInfo()->kurl());
+        infoList.append(item->imageInfo());
         item = dynamic_cast<AlbumIconItem*>(item->nextItem());
     }
 
-    slideShow(urlList);
+    slideShow(infoList);
 }
 
 void DigikamView::slotSlideShowSelection()
 {
-    KURL::List urlList;
+    ImageInfoList infoList;
     AlbumIconItem* item = dynamic_cast<AlbumIconItem*>(d->iconView->firstItem());
     while (item) 
     {
         if (item->isSelected())
-            urlList.append(item->imageInfo()->kurl());
+            infoList.append(item->imageInfo());
         item = dynamic_cast<AlbumIconItem*>(item->nextItem());
     }
 
-    slideShow(urlList);
+    slideShow(infoList);
 }
 
 void DigikamView::slotImageEdit()
--- trunk/extragear/graphics/digikam/digikam/digikamview.h #633157:633158
@@ -29,6 +29,10 @@
 #include <qstringlist.h>
 #include <qmap.h>
 
+// Local includes.
+
+#include "imageinfo.h"
+
 class KURL;
 
 namespace KIO
@@ -42,7 +46,6 @@
 class AlbumSettings;
 class Album;
 class DigikamViewPriv;
-class ImageInfo;
 
 class DigikamView : public QHBox
 {
@@ -134,7 +137,7 @@
     void saveViewState();
     void changeAlbumFromHistory(Album *album, QWidget *widget);
     void imageEdit(AlbumIconItem* iconItem=0);
-    void slideShow(const KURL::List &urlList);
+    void slideShow(ImageInfoList &infoList);
 
 private slots:
 
--- trunk/extragear/graphics/digikam/showfoto/showfoto.cpp #633157:633158
@@ -74,6 +74,7 @@
 // Local includes.
 
 #include "ddebug.h"
+#include "dmetadata.h"
 #include "rawfiles.h"
 #include "canvas.h"
 #include "thumbbar.h"
@@ -1098,6 +1099,16 @@
     settings.exifRotate = config->readBoolEntry("EXIF Rotate", true);
     settings.fileList   = d->thumbBar->itemsURLs();
 
+    Digikam::DMetadata meta;
+
+    for (KURL::List::Iterator it = settings.fileList.begin() ; it != settings.fileList.end() ; ++it)
+    {
+        Digikam::SlidePictureInfo pictInfo;
+        meta.load((*it).path());
+        pictInfo.comment = meta.getImageComment();
+        settings.pictInfoMap.insert(*it, pictInfo);
+    }
+
     Digikam::SlideShow *slide = new Digikam::SlideShow(settings);
     if (startWithCurrent)
         slide->setCurrent(d->currentItem->url());
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.cpp #633157:633158
@@ -979,9 +979,10 @@
     bool startWithCurrent = config->readBoolEntry("SlideShowStartCurrent", false);
 
     SlideShowSettings settings;
-    settings.delay      = config->readNumEntry("SlideShowDelay", 5) * 1000;
-    settings.printName  = config->readBoolEntry("SlideShowPrintName", true);
-    settings.loop       = config->readBoolEntry("SlideShowLoop", false);
+    settings.delay        = config->readNumEntry("SlideShowDelay", 5) * 1000;
+    settings.printName    = config->readBoolEntry("SlideShowPrintName", true);
+    settings.printComment = config->readBoolEntry("SlideShowPrintComment", false);
+    settings.loop         = config->readBoolEntry("SlideShowLoop", false);
     slideShow(startWithCurrent, settings);
 }
 
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #633157:633158
@@ -1005,6 +1005,30 @@
 
 void ImageWindow::slideShow(bool startWithCurrent, SlideShowSettings& settings)
 {
+    if (!d->imageInfoList.isEmpty())
+    {
+        // We have started image editor from Album GUI. we get picture comments from database.
+        for (ImageInfo *info = d->imageInfoList.first(); info; info = d->imageInfoList.next())
+        {
+            SlidePictureInfo pictInfo;
+            pictInfo.comment = info->caption();
+            settings.pictInfoMap.insert(info->kurl(), pictInfo);
+        }
+    }
+    else
+    {
+        // We have started image editor from Camera GUI. we get picture comments from metadata.
+        DMetadata meta;
+
+        for (KURL::List::Iterator it = d->urlList.begin() ; it != d->urlList.end() ; ++it)
+        {
+            SlidePictureInfo pictInfo;
+            meta.load((*it).path());
+            pictInfo.comment = meta.getImageComment();
+            settings.pictInfoMap.insert(*it, pictInfo);
+        }
+    }
+
     settings.exifRotate = AlbumSettings::instance()->getExifRotate();
     settings.fileList   = d->urlList;
 
--- trunk/extragear/graphics/digikam/utilities/setup/setupslideshow.cpp #633157:633158
@@ -51,11 +51,13 @@
         startWithCurrent = 0;
         loopMode         = 0;
         printName        = 0;
+        printComment     = 0;
     }
 
     QCheckBox    *startWithCurrent;
     QCheckBox    *loopMode;
     QCheckBox    *printName;
+    QCheckBox    *printComment;
     
     KIntNumInput *delayInput;
 };    
@@ -80,11 +82,15 @@
     
     d->printName = new QCheckBox(i18n("Print image file name"), parent);
     QWhatsThis::add( d->printName, i18n("<p>Print image file name on bottom of screen."));
+
+    d->printComment = new QCheckBox(i18n("Print image comment"), parent);
+    QWhatsThis::add( d->printName, i18n("<p>Print image comment on bottom of screen."));
     
-    layout->addWidget( d->delayInput );
-    layout->addWidget( d->startWithCurrent );
-    layout->addWidget( d->loopMode );
-    layout->addWidget( d->printName );
+    layout->addWidget(d->delayInput);
+    layout->addWidget(d->startWithCurrent);
+    layout->addWidget(d->loopMode);
+    layout->addWidget(d->printName);
+    layout->addWidget(d->printComment);
     layout->addStretch();
     
     readSettings();
@@ -104,6 +110,7 @@
     config->writeEntry("SlideShowStartCurrent", d->startWithCurrent->isChecked());
     config->writeEntry("SlideShowLoop", d->loopMode->isChecked());
     config->writeEntry("SlideShowPrintName", d->printName->isChecked());
+    config->writeEntry("SlideShowPrintComment", d->printComment->isChecked());
     config->sync();
 }
 
@@ -116,6 +123,7 @@
     d->startWithCurrent->setChecked(config->readBoolEntry("SlideShowStartCurrent", false));
     d->loopMode->setChecked(config->readBoolEntry("SlideShowLoop", false));
     d->printName->setChecked(config->readBoolEntry("SlideShowPrintName", true));
+    d->printComment->setChecked(config->readBoolEntry("SlideShowPrintComment", false));
 }
 
 }   // namespace Digikam
--- trunk/extragear/graphics/digikam/utilities/slideshow/slideshow.cpp #633157:633158
@@ -312,14 +312,28 @@
                                                         .arg(QString::number(d->fileIndex + 1))
                                                         .arg(QString::number(d->settings.fileList.count()));
             
+                int offset = (d->settings.printComment ? 40 : 20);
                 p.setPen(Qt::black);
                 for (int x=9; x<=11; x++)
-                    for (int y=21; y>=19; y--)
+                    for (int y=offset+1; y>=offset-1; y--)
                         p.drawText(x, height()-y, filename);
             
                 p.setPen(Qt::white);
-                p.drawText(10, height()-20, filename);
+                p.drawText(10, height()-offset, filename);
+            }
+
+            if (d->settings.printComment)
+            {
+                int offset = 20;
+                p.setPen(Qt::black);
+                for (int x=9; x<=11; x++)
+                    for (int y=offset+1; y>=offset-1; y--)
+                        p.drawText(x, height()-y, d->settings.pictInfoMap[d->currentImage].comment);
+            
+                p.setPen(Qt::white);
+                p.drawText(10, height()-offset, d->settings.pictInfoMap[d->currentImage].comment);
             }   
+   
         }
         else
         {
@@ -328,7 +342,7 @@
             p.setPen(Qt::white);
             p.drawText(0, 0, d->pixmap.width(), d->pixmap.height(),
                        Qt::AlignCenter|Qt::WordBreak, 
-                       i18n("Cannot display preview for\n\"%1\"")
+                       i18n("Cannot display picture\n\"%1\"")
                        .arg(d->currentImage.fileName()));
         }
     }
--- trunk/extragear/graphics/digikam/utilities/slideshow/slideshowsettings.h #633157:633158
@@ -23,7 +23,7 @@
 
 // Qt includes.
 
-#include <qptrlist.h>
+#include <qmap.h>
 
 // KDE includes.
 
@@ -43,27 +43,19 @@
 
 public:
     
-    SlidePictureInfo()
-    {
-    };
+    SlidePictureInfo(){};
     
     ~SlidePictureInfo(){};
 
 public:
 
     /** Picture Comment */
-    QString            Comment; 
+    QString            comment; 
 
-    /** Picture file url */
-    KURL               fileUrl;
-
     /** Exif photo info of picture */
     PhotoInfoContainer photoInfo;
 };
 
-typedef QPtrList<SlidePictureInfo>         SlidePictureInfoList;
-typedef QPtrListIterator<SlidePictureInfo> SlidePictureInfoListIterator;
-
 // --------------------------------------------------------------------------------
 
 /** This class contain all settings to perform a slide show of a group of pictures */
@@ -74,10 +66,11 @@
     
     SlideShowSettings()
     {
-        exifRotate = true;
-        printName  = true;
-        loop       = false;
-        delay      = 5;
+        exifRotate   = true;
+        printName    = true;
+        printComment = false;
+        loop         = false;
+        delay        = 5;
     };
     
     ~SlideShowSettings(){};
@@ -89,17 +82,23 @@
     /** Auto-rotate image accordinly with Exif Rotation tag */
     bool exifRotate;
 
-    /** Print file name during slide */
+    /** Print picture file name during slide */
     bool printName;
 
+    /** Print picture comment during slide */
+    bool printComment;
+
     /** Slide pictures in loop */
     bool loop;
     
     /** Delay in seconds */
     int delay;
 
-    /** List of files to slide */ 
-    KURL::List fileList; 
+    /** List of pictures URL to slide */ 
+    KURL::List fileList;
+
+    /** Map of pictures informations to slide */ 
+    QMap<KURL, SlidePictureInfo> pictInfoMap;
 };
 
 }  // namespace Digikam



More information about the Digikam-devel mailing list