[Digikam-devel] extragear/graphics/digikam/utilities/lighttable

Gilles Caulier caulier.gilles at gmail.com
Sun May 17 19:54:15 BST 2009


SVN commit 969241 by cgilles:

bugfix : LightTable : when items are loaded to lightTable and are removed from Album gui, we need to refresh light table contents
CCMAIL: digikam-devel at kde.org


 M  +57 -0     lighttablebar.cpp  
 M  +6 -0      lighttablebar.h  
 M  +1 -2      lighttablewindow.cpp  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablebar.cpp #969240:969241
@@ -61,6 +61,8 @@
 #include "imageattributeswatch.h"
 #include "metadatahub.h"
 #include "ratingpopupmenu.h"
+#include "databasewatch.h"
+#include "databasechangesets.h"
 #include "themeengine.h"
 
 namespace Digikam
@@ -100,6 +102,10 @@
 {
     connect(this, SIGNAL(signalItemSelected(ThumbBarItem*)),
             this, SLOT(slotItemSelected(ThumbBarItem*)));
+
+    connect(DatabaseAccess::databaseWatch(), SIGNAL(collectionImageChange(const CollectionImageChangeset&)),
+            this, SLOT(slotCollectionImageChange(const CollectionImageChangeset&)),
+            Qt::QueuedConnection);
 }
 
 LightTableBar::~LightTableBar()
@@ -308,6 +314,32 @@
     if (item) ThumbBarView::removeItem(item);
 }
 
+ImagePreviewBarItem* LightTableBar::removeItemById(qlonglong id)
+{
+    ImagePreviewBarItem* ltItem = findItemById(id);
+    ThumbBarItem *item          = dynamic_cast<ThumbBarItem*>(ltItem);
+    if (item)
+    {
+        ThumbBarView::removeItem(item);
+        return ltItem;
+    }
+    return 0;
+}
+
+ImagePreviewBarItem* LightTableBar::findItemById(qlonglong id) const
+{
+    for (ThumbBarItem *item = firstItem(); item; item = item->next())
+    {
+        ImagePreviewBarItem *ltItem = dynamic_cast<ImagePreviewBarItem*>(item);
+        if (ltItem)
+        {
+            if (ltItem->info().id() == id)
+                return ltItem;
+        }
+    }
+    return 0;
+}
+
 void LightTableBar::viewportPaintEvent(QPaintEvent* e)
 {
     ThemeEngine* te = ThemeEngine::instance();
@@ -649,6 +681,31 @@
     }
 }
 
+void LightTableBar::slotCollectionImageChange(const CollectionImageChangeset& changeset)
+{
+    // ignore when closed
+    if (!isVisible())
+        return;
+
+    switch(changeset.operation())
+    {
+        case CollectionImageChangeset::Removed:
+        case CollectionImageChangeset::RemovedAll:
+        {
+            foreach(qlonglong id, changeset.ids())
+            {
+                ImagePreviewBarItem* item = removeItemById(id);
+                emit signalRemoveItem(item->info());
+            }
+            break;
+        }
+        default:
+        {
+            break;
+        }
+    }
+}
+
 // -------------------------------------------------------------------------
 
 LightTableBarItem::LightTableBarItem(LightTableBar *view, const ImageInfo& info)
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablebar.h #969240:969241
@@ -31,6 +31,7 @@
 namespace Digikam
 {
 
+class CollectionImageChangeset;
 class LightTableBarItem;
 class LightTableBarItemPriv;
 class LightTableBarPriv;
@@ -49,7 +50,10 @@
     void setOnRightPanel(const ImageInfo& info);
 
     void removeItemByInfo(const ImageInfo& info);
+    ImagePreviewBarItem* removeItemById(qlonglong id);
 
+    ImagePreviewBarItem* findItemById(qlonglong id) const;
+
     void setNavigateByPair(bool b);
 
 Q_SIGNALS:
@@ -82,6 +86,8 @@
     void slotAssignRatingFiveStar();
     void slotAssignRating(int);
 
+    void slotCollectionImageChange(const CollectionImageChangeset&);
+
 private:
 
     LightTableBarPriv* const d;
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #969240:969241
@@ -358,8 +358,7 @@
 
     // -- FileWatch connections ------------------------------
 
-    LoadingCacheInterface::connectToSignalFileChanged(this,
-            SLOT(slotFileChanged(const QString &)));
+    LoadingCacheInterface::connectToSignalFileChanged(this, SLOT(slotFileChanged(const QString&)));
 }
 
 void LightTableWindow::setupActions()



More information about the Digikam-devel mailing list