[Digikam-devel] extragear/graphics/digikam

Marcel Wiesweg marcel.wiesweg at gmx.de
Sun May 21 19:49:02 BST 2006


SVN commit 543315 by mwiesweg:

Update image metadata stored in DImg instance when
metadata is changed in file on disk

- add signalFileMetadataChanged to ImageAttributesWatch
- add method to re-read metadata to DImgInterface
  (code duplicate to DImgLoader::readMetadata)
- connect to signal in ImageWindow
- send signal in AlbumIconView, ImageDescEditTab, KipiInterface

TODO:
- update ImagePropertiesMetadataTab on signalFileMetadataChanged
  (ImageAttributesWatch is libdigikam, the metadatatab is used by showfoto,
   create a subclass ImagePropertiesMetadataTabDB?)

CCMAIL: digikam-devel at kde.org



 M  +3 -3      TODO  
 M  +8 -1      digikam/albumiconview.cpp  
 M  +5 -0      digikam/imageattributeswatch.cpp  
 M  +16 -0     digikam/imageattributeswatch.h  
 M  +1 -0      digikam/kipiinterface.cpp  
 M  +1 -0      libs/imageproperties/imagedescedittab.cpp  
 M  +6 -0      utilities/imageeditor/canvas/canvas.cpp  
 M  +1 -0      utilities/imageeditor/canvas/canvas.h  
 M  +14 -0     utilities/imageeditor/canvas/dimginterface.cpp  
 M  +1 -0      utilities/imageeditor/canvas/dimginterface.h  
 M  +14 -0     utilities/imageeditor/editor/imagewindow.cpp  
 M  +2 -0      utilities/imageeditor/editor/imagewindow.h  


--- trunk/extragear/graphics/digikam/TODO #543314:543315
@@ -38,10 +38,10 @@
    - Added signal/slots control between IE and main interface about "comments & tags" tab.
      Comments & tags set from main must be updated in IE and vise-versa.
      
-* Image Editor : 
+* Image Editor :
 
-   - If Comments & tags informations have been changed, notify DImg instance of current image to set
-     informations in metadata bytes array (COM, EXIF, IPTC).
+   - update ImagePropertiesMetadataTab on ImageAttributesWatch's signalFileMetadataChanged
+     (ImageAttributesWatch is libdigikam, the metadatatab is used by showfoto - create subclass ImagePropertiesMetadataTabDB?)
 
 * Showfoto: 
 
--- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #543314:543315
@@ -1349,7 +1349,7 @@
     for( it = urlList.begin(); it != urlList.end(); ++it )
     {
         kdDebug() << "Setting Exif Orientation tag to " << orientation << endl;
-        
+
         DMetadata metadata((*it).path());
         DMetadata::ImageOrientation o = (DMetadata::ImageOrientation)orientation;
         metadata.setImageOrientation(o);
@@ -1360,6 +1360,10 @@
                                .arg((*it).filename()));
             return;
         }
+        else
+        {
+            ImageAttributesWatch::instance()->fileMetadataChanged((*it));
+        }
     }
 
     refreshItems(urlList);
@@ -1709,6 +1713,7 @@
                     DMetadata metadata(info->filePath());
                     metadata.setImageKeywords(oldKeywords, tagPaths);
                     metadata.applyChanges();
+                    ImageAttributesWatch::instance()->fileMetadataChanged(info->kurl());
                 }
             }
         }
@@ -1744,6 +1749,7 @@
                     DMetadata metadata(info->filePath());
                     metadata.setImageKeywords(oldKeywords, tagPaths);
                     metadata.applyChanges();
+                    ImageAttributesWatch::instance()->fileMetadataChanged(info->kurl());
                 }
             }
         }
@@ -1777,6 +1783,7 @@
                     DMetadata metadata(info->filePath());
                     metadata.setImageRating(rating);
                     metadata.applyChanges();
+                    ImageAttributesWatch::instance()->fileMetadataChanged(info->kurl());
                 }
             }
         }
--- trunk/extragear/graphics/digikam/digikam/imageattributeswatch.cpp #543314:543315
@@ -70,6 +70,11 @@
     emit signalImageCaptionChanged(imageId);
 }
 
+void ImageAttributesWatch::fileMetadataChanged(const KURL &url)
+{
+    emit signalFileMetadataChanged(url);
+}
+
 } // namespace Digikam
 
 #include "imageattributeswatch.moc"
--- trunk/extragear/graphics/digikam/digikam/imageattributeswatch.h #543314:543315
@@ -22,8 +22,14 @@
 #ifndef IMAGEATTRIBUTESWATCH_H
 #define IMAGEATTRIBUTESWATCH_H
 
+// Qt includes
+
 #include <qobject.h>
 
+// KDE includes
+
+#include <kurl.h>
+
 namespace Digikam
 {
 
@@ -44,6 +50,8 @@
     void imageDateChanged(Q_LLONG imageId);
     void imageCaptionChanged(Q_LLONG imageId);
 
+    void fileMetadataChanged(const KURL &url);
+
 signals:
 
     /** Indicates that tags have been assigned or removed
@@ -67,6 +75,14 @@
     void signalImageDateChanged(Q_LLONG imageId);
     void signalImageCaptionChanged(Q_LLONG imageId);
 
+    /**
+        Indicates that the metadata if the given file
+        has been changed (a write operation on the file on disk).
+        Usually, the database is updated accordingly, so then this
+        signal is sent in combination with one or more of the above signals.
+    */
+    void signalFileMetadataChanged(const KURL &url);
+
 protected:
 
     ~ImageAttributesWatch();
--- trunk/extragear/graphics/digikam/digikam/kipiinterface.cpp #543314:543315
@@ -135,6 +135,7 @@
             DMetadata metadata(_url.path());
             metadata.setImageComment(description);
             metadata.applyChanges();
+            ImageAttributesWatch::instance()->fileMetadataChanged(_url);
         }
     }
 }
--- trunk/extragear/graphics/digikam/libs/imageproperties/imagedescedittab.cpp #543314:543315
@@ -444,6 +444,7 @@
         }
 
         metadata.applyChanges();
+        ImageAttributesWatch::instance()->fileMetadataChanged(d->currInfo->kurl());
     }
 
     d->modified = false;
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #543314:543315
@@ -475,6 +475,12 @@
     d->im->setModified();
 }
 
+void Canvas::readMetadataFromFile(const QString &file)
+{
+    d->im->readMetadataFromFile(file);
+}
+
+
 void Canvas::clearUndoHistory()
 {
     d->im->clearUndoManager();
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.h #543314:543315
@@ -65,6 +65,7 @@
     void  switchToLastSaved(const QString& newFilename);
     void  abortSaving();
     void  setModified();
+    void  readMetadataFromFile(const QString &file);
     void  clearUndoHistory();
     void  setUndoHistoryOrigin();
     DImg  currentImage();
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.cpp #543314:543315
@@ -622,6 +622,20 @@
     emit signalUndoStateChanged(d->undoMan->anyMoreUndo(), d->undoMan->anyMoreRedo(), !d->undoMan->isAtOrigin());
 }
 
+void DImgInterface::readMetadataFromFile(const QString &file)
+{
+    DMetadata meta(file);
+
+    //TODO: code is essentially the same as DImgLoader::readMetadata,
+    //      put both in a common place.
+    if (!meta.getComments().isNull())
+        d->image.setComments(meta.getComments());
+    if (!meta.getExif().isNull())
+        d->image.setExif(meta.getExif());
+    if (!meta.getIptc().isNull())
+        d->image.setIptc(meta.getIptc());
+}
+
 void DImgInterface::clearUndoManager()
 {
     d->undoMan->clear();
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.h #543314:543315
@@ -67,6 +67,7 @@
     void   switchToLastSaved(const QString& newFilename);
     void   abortSaving();
     void   setModified();
+    void   readMetadataFromFile(const QString &file);
     void   clearUndoManager();
     void   setUndoManagerOrigin();
 
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #543314:543315
@@ -86,6 +86,7 @@
 #include "loadingcacheinterface.h"
 #include "savingcontextcontainer.h"
 #include "imagewindow.h"
+#include "imageattributeswatch.h"
 
 namespace Digikam
 {
@@ -183,6 +184,11 @@
 
     connect(this, SIGNAL(signalNoCurrentItem()),
             m_rightSidebar, SLOT(slotNoCurrentItem()));
+
+    ImageAttributesWatch *watch = ImageAttributesWatch::instance();
+
+    connect(watch, SIGNAL(signalFileMetadataChanged(const KURL &)),
+            this, SLOT(slotFileMetadataChanged(const KURL &)));
 }
 
 void ImageWindow::setupUserArea()
@@ -787,6 +793,14 @@
     close();
 }
 
+void ImageWindow::slotFileMetadataChanged(const KURL &url)
+{
+    if (url == m_urlCurrent)
+    {
+        m_canvas->readMetadataFromFile(url.path());
+    }
+}
+
 }  // namespace Digikam
 
 #include "imagewindow.moc"
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.h #543314:543315
@@ -137,6 +137,8 @@
     
     void slotAssignTag(int tagID);
     void slotRemoveTag(int tagID);
+
+    void slotFileMetadataChanged(const KURL &url);
 };
 
 }  // namespace Digikam



More information about the Digikam-devel mailing list