[Digikam-devel] extragear/graphics/digikam/utilities/imageeditor/editor

Gilles Caulier caulier.gilles at kdemail.net
Thu Feb 1 12:43:12 GMT 2007


SVN commit 629110 by cgilles:

digiKam from trunk : add missing Assign Rating into image editor pop-up menu (like Album Icon View pop-up menu).

Marcel : TODO : MetadataHub call at identified right place to assign/remove Tags and assign Rating methods.

CCMAIL: digikam-devel at kde.org, marcel.wiesweg at gmx.de


 M  +91 -12    imagewindow.cpp  
 M  +10 -9     imagewindow.h  


--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #629109:629110
@@ -1,11 +1,11 @@
 /* ============================================================
- * Author: Renchi Raju <renchi at pooh.tam.uiuc.edu>
+ * Authors: Renchi Raju <renchi at pooh.tam.uiuc.edu>
  *         Gilles Caulier <caulier dot gilles at kdemail dot net>
- * Date  : 2004-02-12
+ * Date   : 2004-02-12
  * Description : digiKam image editor GUI
  *
  * Copyright 2004-2005 by Renchi Raju, Gilles Caulier
- * Copyright 2006 by Gilles Caulier
+ * Copyright 2006-2007 by Gilles Caulier
  *
  * This program is free software; you can redistribute it
  * and/or modify it under the terms of the GNU General
@@ -31,6 +31,8 @@
 #include <qlabel.h>
 #include <qimage.h>
 #include <qsplitter.h>
+#include <qpainter.h>
+#include <qpixmap.h>
 
 // KDE includes.
 
@@ -119,6 +121,8 @@
     // image cannot be saved.
     bool                      allowSaving;
 
+    QPixmap                   ratingPixmap;
+
     KURL::List                urlList;
     KURL                      urlCurrent;
 
@@ -164,6 +168,21 @@
     d = new ImageWindowPriv;
     m_instance = this;
 
+    // -- Load rating Pixmap ------------------------------------------
+
+    KGlobal::dirs()->addResourceType("digikam_rating",
+                                     KGlobal::dirs()->kde_default("data")
+                                     + "digikam/data");
+    QString ratingPixPath = KGlobal::dirs()->findResourceDir("digikam_rating",
+                                                             "rating.png");
+    ratingPixPath += "/rating.png";
+    d->ratingPixmap = QPixmap(ratingPixPath);
+
+    QPainter painter(&d->ratingPixmap);
+    painter.fillRect(0, 0, d->ratingPixmap.width(), d->ratingPixmap.height(),
+                     ThemeEngine::instance()->textSpecialRegColor());
+    painter.end();
+
     // -- Build the GUI -------------------------------
 
     setupUserArea();
@@ -535,12 +554,16 @@
 {
     if (d->contextMenu)
     {
-        TagsPopupMenu* assignTagsMenu = 0;
-        TagsPopupMenu* removeTagsMenu = 0;
-        int separatorID = -1;
+        QPopupMenu    *ratingMenu     = 0;
+        TagsPopupMenu *assignTagsMenu = 0;
+        TagsPopupMenu *removeTagsMenu = 0;
+        int separatorID1 = -1;
+        int separatorID2 = -1;
 
         if (d->imageInfoCurrent)
         {
+            // Bulk assignment/removal of tags --------------------------
+
             Q_LLONG id = d->imageInfoCurrent->id();
             QValueList<Q_LLONG> idList;
             idList.append(id);
@@ -548,7 +571,7 @@
             assignTagsMenu = new TagsPopupMenu(idList, 1000, TagsPopupMenu::ASSIGN);
             removeTagsMenu = new TagsPopupMenu(idList, 2000, TagsPopupMenu::REMOVE);
 
-            separatorID = d->contextMenu->insertSeparator();
+            separatorID1 = d->contextMenu->insertSeparator();
 
             d->contextMenu->insertItem(i18n("Assign Tag"), assignTagsMenu);
             int i = d->contextMenu->insertItem(i18n("Remove Tag"), removeTagsMenu);
@@ -561,18 +584,46 @@
 
             AlbumDB* db = AlbumManager::instance()->albumDB();
             if (!db->hasTags( idList ))
-                d->contextMenu->setItemEnabled(i,false);
+                d->contextMenu->setItemEnabled(i, false);
+
+            separatorID2 = d->contextMenu->insertSeparator();
+
+            // Assign Star Rating -------------------------------------------
+        
+            ratingMenu = new QPopupMenu();
+            
+            connect(ratingMenu, SIGNAL(activated(int)),
+                    this, SLOT(slotAssignRating(int)));
+        
+            ratingMenu->insertItem(i18n("None"), 0);
+
+            for (int i = 1 ; i <= 5 ; i++)
+            {
+                QPixmap pix(d->ratingPixmap.width() * 5, d->ratingPixmap.height());
+                pix.fill(ratingMenu->colorGroup().background());
+        
+                QPainter painter(&pix);
+                painter.drawTiledPixmap(0, 0,
+                                        i*d->ratingPixmap.width(),
+                                        pix.height(),
+                                        d->ratingPixmap);
+                painter.end();
+                ratingMenu->insertItem(pix, i);
+            }
+        
+            d->contextMenu->insertItem(i18n("Assign Rating"), ratingMenu);
         }
 
         d->contextMenu->exec(QCursor::pos());
 
-        if (separatorID != -1)
-        {
-            d->contextMenu->removeItem(separatorID);
-        }
+        if (separatorID1 != -1)
+            d->contextMenu->removeItem(separatorID1);
+        if (separatorID2 != -1)
+            d->contextMenu->removeItem(separatorID2);
 
         delete assignTagsMenu;
         delete removeTagsMenu;
+        delete ratingMenu;
     }
 }
 
@@ -630,6 +681,8 @@
 
         d->imageInfoCurrent->setTag(tagID);
 
+        // TODO MetadataHub: fix this part to use it instead.
+
         // Update Image Tags like Iptc keywords tags.
 
         if (AlbumSettings::instance())
@@ -652,6 +705,8 @@
 
         d->imageInfoCurrent->removeTag(tagID);
 
+        // TODO MetadataHub: fix this part to use it instead.
+
         // Update Image Tags like Iptc keywords tags.
 
         if (AlbumSettings::instance())
@@ -666,6 +721,30 @@
     }
 }
 
+void ImageWindow::slotAssignRating(int rating)
+{
+    rating = QMIN(5, QMAX(0, rating));
+    
+    if (d->imageInfoCurrent)
+    {
+        d->imageInfoCurrent->setRating(rating);
+
+        // TODO MetadataHub: fix this part to use it instead.
+        
+        // Store Image rating as Iptc tag.
+    
+        if (AlbumSettings::instance())
+        {
+            if (AlbumSettings::instance()->getSaveIptcRating())
+            {
+                DMetadata metadata(d->imageInfoCurrent->filePath());
+                metadata.setImageRating(rating);
+                metadata.applyChanges();
+            }
+        }
+    }
+}
+
 void ImageWindow::slotUpdateItemInfo()
 {
     uint index = d->urlList.findIndex(d->urlCurrent);
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.h #629109:629110
@@ -1,11 +1,11 @@
 /* ============================================================
- * Author: Renchi Raju <renchi at pooh.tam.uiuc.edu>
+ * Authors: Renchi Raju <renchi at pooh.tam.uiuc.edu>
  *         Gilles Caulier <caulier dot gilles at kdemail dot net>
- * Date  : 2004-02-12
+ * Date   : 2004-02-12
  * Description : digiKam image editor GUI
  *
  * Copyright 2004-2005 by Renchi Raju, Gilles Caulier
- * Copyright 2006 by Gilles Caulier
+ * Copyright 2006-2007 by Gilles Caulier
  *
  * This program is free software; you can redistribute it
  * and/or modify it under the terms of the GNU General
@@ -75,12 +75,6 @@
 
 private:
 
-    ImageWindowPriv    *d;
-
-    static ImageWindow *m_instance;
-
-private:
-
     void loadCurrentList(const QString& caption, bool allowSaving);
     void closeEvent(QCloseEvent* e);
 
@@ -122,10 +116,17 @@
 
     void slotAssignTag(int tagID);
     void slotRemoveTag(int tagID);
+    void slotAssignRating(int rating);
 
     void slotFileMetadataChanged(const KURL &url);
 
     void slotThemeChanged();
+
+private:
+
+    ImageWindowPriv    *d;
+
+    static ImageWindow *m_instance;
 };
 
 }  // namespace Digikam



More information about the Digikam-devel mailing list