Professional Photo Management with the Power of Open Source

digiKam digest - 2009-06-07

by Anonymous

Outstanding work this week was done on:

  • First visible effect of porting to Qt4 model list view: overlays over image thumbnails. When hovering with mouse over “plate” user will see small icons for loss-less rotating of image, rating, selection and probably more in future. Icons are faded in and out with nice looking animation, also rating widget interaction was improved.


  • Optimizations of database queries.

  • Reorganization of code with moving of 3rd party libs to one place for clarity.

  • Support for PGF wavelet-based image format. This
    format will be used in future as internal thumbnail cache.


  • Eraser tool for Liquid Rescale plugin. Now editing of masks will be much simpler.


  • Simplification of UI in printing kipi-plugin.

  • Also small improvements on digest itself: less crude table, links to commits in
    WebSVN and discussions
    about bugs on BKO.

    Opened bugsOpened last weekClosed last weekChangeOpened wishesOpened last weekClosed last weekChange

    Full tables:

    SVN commit 976210 by cgilles:

    moving DBStatDlg to libdigikam. thank to MSVC 2008 to simplify developers life with weird dll concept…

    M +1 -1 CMakeLists.txt
    A digikam/dbstatdlg.cpp libs/database/dbstatdlg.cpp#976209 [License: GPL (v2+)]
    A digikam/dbstatdlg.h libs/database/dbstatdlg.h#976209 [License: GPL (v2+)]
    D libs/database/dbstatdlg.cpp
    D libs/database/dbstatdlg.h

    SVN commit 976164 by cgilles:

    New overlay buttons over icon view item to rotate left/right images. Transformations are lossless for jpeg :
    we use kipi-plugin to rotate.
    BUG: 134308

    M +1 -0 CMakeLists.txt
    M +50 -5 digikam/digikamimageview.cpp
    M +6 -0 digikam/digikamimageview.h
    AM digikam/imagerotationoverlay.cpp [License: GPL (v2+)]
    AM digikam/imagerotationoverlay.h [License: GPL (v2+)]

    SVN commit 976287 by jnarboux:

    Apply patch of Pino Toscano to use external Lqr is available.

    CCBUGS: 149485

    M +6 -0 CMakeLists.txt
    M +34 -21 imageplugins/contentawareresizing/CMakeLists.txt

    SVN commit 976426 by cgilles:

    reset selection when rotate buttons are used.

    M +28 -2 imagerotationoverlay.cpp
    M +10 -2 imagerotationoverlay.h

    SVN commit 976791 by cgilles:

    remove RatingBox widget. Use RatingWidget instead everywhere.
    RatingWidget has now a fading mode to display progressively widget
    This mode is used in new icon-view based on Model View to switch is edit mode when
    user move mouse over the widget.
    During fading, widget appear and rating cannot be edited. fading duration is 1500ms.
    This will prevent unwanted rating assignation to item when user move mouse over the item to
    just only select it.
    To really want to change rating to item, user need to stay over rating widget more than
    fading duration.
    This patch only change this behavour in iconview, not with thummbar. Thumbbar is not yet
    ported to Model/View, but when it will done, we will use same component than iconview and
    problem will be fixed automatically there.
    BUG: 192425

    M +0 -1 CMakeLists.txt
    M +7 -6 digikam/albumiconviewfilter.cpp
    M +18 -17 digikam/iconview.cpp
    M +26 -24 digikam/imagepreviewbar.cpp
    M +10 -6 digikam/imageratingoverlay.cpp
    M +3 -2 digikam/imageratingoverlay.h
    D digikam/ratingbox.cpp
    D digikam/ratingbox.h
    M +174 -65 digikam/ratingwidget.cpp
    M +14 -0 digikam/ratingwidget.h
    M +1 -0 libs/imageproperties/imagedescedittab.cpp


    SVN commit 976887 by cgilles:

    if image is unrated, draw star properly (not 6 stars)
    set fading duration to 600ms
    CCBUGS: 192425

    M +5 -5 ratingwidget.cpp

    SVN commit 977100 by jnarboux:

    Fix bug: the mask was deleted when window is resized, now it is resized.

    CCBUGS: 149485

    M +0 -2 imageplugins/contentawareresizing/TODO
    M +2 -4 libs/widgets/imageplugins/imageguidewidget.cpp

    SVN commit 977032 by cgilles:

    Display rating widget when mouse is over icon view item. By this way:
    - user can always see where he can click to change rating, especially with unrated item.
    - behavour is the same than select/rotate buttons over icon view item. It’s homogeneous.

    With previous behavour, rating widget been displayed only when mouse is over rating widget area.
    User need to discover this feature by searching area. Now, it’s more intuitive.
    CCBUGS: 192425

    M +1 -1 imageratingoverlay.cpp
    M +18 -5 ratingwidget.cpp
    M +5 -2 ratingwidget.h

    SVN commit 976979 by aclemens:

    If the format string is empty, don’t add it to the map. Nobody will ever
    know what format is listed and therefore it doesn’t make much sense to
    add it at all.
    Anyway an empty format should never appear in the query, but just to be
    sure we should continue in this case.

    M +3 -1 albumdb.cpp

    SVN commit 976973 by aclemens:

    Instead of creating multiple sub-queries, why not just use GROUP BY in
    the query? This will speed up the “Database Statistics” dialog a little
    Thanks to Stefano Rivoir for the tip (damn, used GROUP BY a lot in some
    project, but here I forgot it ;-))


    I removed the code under FIXME now, since you said it is not needed

    M +12 -15 albumdb.cpp

    SVN commit 977062 by jnarboux:

    Add circle shaped cursor whose diameter is equal to brush size when painting mask.

    CCBUGS: 149485

    M +0 -1 imageplugins/contentawareresizing/TODO
    M +9 -1 libs/widgets/imageplugins/imageguidewidget.cpp

    SVN commit 977055 by cgilles:

    Rating Widget will use fading effect if KDE control center has right options enabled

    M +4 -2 imageratingoverlay.cpp

    SVN commit 977237 by jnarboux:

    add icon for gallery plugin

    M +2 -0 CMakeLists.txt
    A icons (directory)
    A icons/CMakeLists.txt
    AM icons/hi16-action-gallery.png
    AM icons/hi22-action-gallery.png
    AM icons/hi32-action-gallery.png
    AM icons/hi48-action-gallery.png
    AM icons/hisc-action-gallery.svgz
    M +1 -1 plugin_galleryexport.cpp

    SVN commit 977301 by cgilles:

    enable Rating Widget fadding mode in thumbbar

    M +1 -0 imagepreviewbar.cpp

    SVN commit 977452 by cgilles:

    move clapack to 3rdparty

    M +31 -31 CMakeLists.txt
    M +1 -1 digikam/CMakeLists.txt
    A libs/3rdparty/clapack (directory) libs/dimg/filters/clapack#977409
    D libs/dimg/filters/clapack (directory)

    SVN commit 977451 by cgilles:

    move sqlite2 to 3rdparty

    M +32 -32 CMakeLists.txt
    M +2 -2 digikam/CMakeLists.txt
    A libs/3rdparty/sqlite2 (directory) libs/database/sqlite2#977409
    D libs/database/sqlite2 (directory)

    SVN commit 977442 by cgilles:

    move libpgf in 3rdparty

    A 3rdparty/libpgf (directory) database/libpgf#977409
    D database/libpgf (directory)

    SVN commit 977441 by cgilles:

    add new sub dir for 3rd party components

    A 3rdparty (directory)

    SVN commit 977437 by cgilles:

    first implementation of PGF image loader for digiKam image editor and Showfoto.
    At this moment, only loading image is supported. Saving still in my todo list.
    More info about PGF image format : http://www.libpgf.org
    CCMAIL: digikam-devel@kde.org

    M +7 -8 CMakeLists.txt

    SVN commit 977483 by cgilles:

    Implement progress callbacks compatible with C++ and thread safe.
    This is the same problem than old LibRaw implementation : libpgf only permit to use a static C ansi
    procedure and handle progress event. An additional void pointer is now used to pass C++ class
    which host static method.

    For more informations, we follow this paper :


    Julien, this is exactly a good example to do with liblqr implementation to be relly thread safe.
    CCMAIL: Julien@narboux.fr

    M +46 -41 PGFimage.cpp
    M +11 -6 PGFimage.h
    M +2 -2 PGFplatform.h


    SVN commit 977484 by cgilles:

    implement progress callback using new libpgf api
    CCMAIL: Julien@narboux.fr

    M +28 -1 pgfloader.cpp
    M +4 -0 pgfloader.h

    SVN commit 977534 by mwiesweg:

    Not only select, but set current index as well.
    For me it fixes the problem that initially the right arrow need to be pressed twice.

    M +4 -0 imagecategorizedview.cpp

    SVN commit 977453 by cgilles:

    move lprof to 3rdparty

    M +12 -12 CMakeLists.txt
    A libs/3rdparty/lprof (directory) libs/lprof#977409
    D libs/3rdparty/lprof/CMakeLists.txt
    D libs/lprof (directory)

    SVN commit 977538 by mwiesweg:

    For me, KDirWatch is broken since KDE 4.2.4. It insists on reporting changes in the db journal file
    and fails to watch subdirs. Thankfully we have KDirNotify as a resort.

    Filter out reports of the db file and its journal.

    M +4 -0 albummanager.cpp

    SVN commit 977562 by mwiesweg:

    For the sorting by tags and by image size many images can in fact have the same sorting value
    (imagine an album without any rated image sorted by rating. The last sorting will be used,
    because I think a stablesort is applied. This may be desirable, but there may be no last
    sorting at all, in this case sorting is random / by image id)
    In the case of equal values by rating or by image size, use the file name for sorting.
    Need second-order sorting be configurable?

    M +13 -2 imagesortsettings.cpp

    SVN commit 977584 by aclemens:

    Add more information to the AboutData dialog, like IRC and general
    contact possibilities

    M +1 -1 digikam/main.cpp
    M +6 -2 digikam/version.h.cmake
    M +1 -1 showfoto/main.cpp

    SVN commit 977590 by cgilles:

    first version of PGF writer

    M +53 -207 pgfloader.cpp

    SVN commit 977633 by jnarboux:

    Add a new tool to erase green or red masks.

    CCBUGS: 149485

    M +1 -1 imageplugins/contentawareresizing/TODO
    M +29 -7 imageplugins/contentawareresizing/contentawareresizetool.cpp
    M +17 -5 libs/widgets/imageplugins/imageguidewidget.cpp
    M +3 -2 libs/widgets/imageplugins/imageguidewidget.h
    M +7 -2 libs/widgets/imageplugins/imagewidget.cpp
    M +2 -1 libs/widgets/imageplugins/imagewidget.h

    SVN commit 977731 by cgilles:

    Saving and loading PGF file in RGB 8 bits work fine now.

    M +14 -13 pgfloader.cpp

    SVN commit 977776 by cgilles:

    read/write PGF in 16bits work fine now

    M +52 -21 pgfloader.cpp

    SVN commit 977947 by cgilles:

    implement loading without image data

    M +25 -18 pgfloader.cpp

    SVN commit 977976 by cgilles:

    pgf provide a preview extraction (scaled image version) as JPEG. great

    M +15 -0 thumbnailcreator.cpp

    SVN commit 978111 by cgilles:

    add pgf settings panel

    M +1 -2 dimg/loaders/pgfloader.cpp
    AM dimg/loaders/pgfsettings.cpp [License: GPL (v2+)]
    AM dimg/loaders/pgfsettings.h [License: GPL (v2+)]
    M +4 -3 widgets/common/filesaveoptionsbox.cpp

    SVN commit 978048 by aclemens:

    Use a normal JOIN here, this will greatly improve speed, especially when
    called multiple times, like we do in batchthumbnailgenerator.

    In my (extreme) test case the thumbnails dialog was filled in only 2
    seconds instead of 3 minutes!!! (:-))

    I will check further queries in the database model to see if we can
    improve speed there.

    M +1 -2 albumdb.cpp

    SVN commit 978047 by cgilles:

    preview PGF with scaled image

    M +31 -5 dimg/loaders/pgfloader.cpp
    M +2 -3 threadimageio/pgfutils.cpp
    M +1 -0 threadimageio/previewtask.cpp

    SVN commit 978055 by gateau:

    More compact ui.

    M +158 -198 printoptionspage.ui

    SVN commit 978137 by aclemens:

    a normal JOIN should be enough here, every image will have
    ImageInformation in the database, at least the creation date and the
    format is always known.
    Therefore the images table doesn’t have to be always fully returned.

    M +1 -1 imagelister.cpp

    SVN commit 978169 by aclemens:

    According to some dev from the sqlite IRC channel, it is always better to
    tell sqlite exactly what you want to do, otherwise it might try to
    optimize a query in a wrong way. If you want to use a normal INNER JOIN,
    tell sqlite explicitly to do so.

    M +7 -7 albumdb.cpp

    SVN commit 978243 by mwiesweg:

    Insert initial revision of SQL for thumbnail db.
    Nothing in use yet, schema is open for discussion + changes.

    M +76 -4 thumbnaildb.cpp
    M +33 -2 thumbnaildb.h
    M +40 -4 thumbnailschemaupdater.cpp

    SVN commit 978238 by mwiesweg:

    Factorize ThumbnailCreator code and prepare for addition of another
    storage method for thumbnails.

    M +267 -145 thumbnailcreator.cpp
    M +51 -6 thumbnailcreator.h
    M +24 -0 thumbnailcreator_p.h
    M +3 -2 thumbnailloadthread.cpp


    SVN commit 978319 by mwiesweg:

    Don’t forget to rotate the image returned the first time after creation.
    Prepare for database storage, where thumbs will be stored unrotated.
    Add documentation to ThumbnailInfo.

    M +19 -3 thumbnailcreator.cpp
    M +15 -6 thumbnailcreator.h
    M +1 -1 thumbnailcreator_p.h

    SVN commit 978368 by mwiesweg:

    A persistent index must be used here as well, else crashes can occur.
    Now that the stars are shown whenever the item is entered, we dont need
    mouseMoved() anymore, slotEntered() is enough.

    M +4 -21 imageratingoverlay.cpp
    M +1 -2 imageratingoverlay.h

    SVN commit 978480 by cgilles:

    compile under MSVC 9 and MinGW

    M +9 -1 dimg/loaders/pgfloader.cpp
    M +5 -1 threadimageio/pgfutils.cpp

    SVN commit 978584 by aclemens:

    Optimizing the parser a little bit.
    It is always a good idea to move variable creation out of loops, to
    speed up the algorithm a little and save us from constructing /
    destructing the object all the time.

    M +9 -8 manualrenameinput.cpp

    SVN commit 978638 by cgilles:

    add PGF as file to load in showfoto

    M +4 -3 imagedialog.cpp

    SVN commit 978687 by aclemens:

    small optimizations: if possible, don’t generate variables inside of
    loops to save instruction calls

    M +2 -1 haariface.cpp

    SVN commit 978688 by aclemens:

    Use const refs in foreach loops if possible, to avoid copying of data

    I marked one line with a FIXME, not sure if we can use a const ref here,
    What do you think?


    M +1 -1 digikam/albummanager.cpp
    M +1 -1 digikam/digikamimageview.cpp
    M +3 -2 libs/threadimageio/thumbnailloadthread.cpp

Link broken

The link to http://www.libpgf.org/ is broken

fixed. thanks

fixed. thanks

Nice view!

That’s a nice view - I like the clean positioning of the mouse-over buttons and ratings. I don’t suppose it looks quite as clean for the vertical images, however it’s still very nice… I don’t suppose anyone would be interested in porting it to dolphin? .oO(where is ereslibre when I need him…)


I dont thing that feature would be on Dolphin so usefull because there is more other files than photos what is managed on it and gwenview is for that purpose to view/rotate and small editing of photos and pictures.

I’m not referring to the

I’m not referring to the specific features of rotation, but to the actual appearance and layout of the view. Of course, in dolphin, there’d be different button overlays, but the idea of having the rating widget on the icon is nice.


dngconverter plugin

I’m using the dngconverter plugin, when opening the resulting dng files with ufraw it tells me there is no camera whitebalance and it’s using fallback to auto. Is this a restriction of the dng format or a feature not yet implemented in the converter? I’m converting from canon cr2 raw format using the standalone plugin, no jpeg thumbnail and lossless compression enabled. Starting the plugin from within digikam I get the same results. I’d like to use dng for all my photos as the space savings are quite significant if you sum it up. I use openSUSE 11.1 64bit and packages from KDE:KDE4:Factory:Desktop repository, kipi-plugins version is 0.3-14.4