[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/graphics/digikam/libs/imageproperties
From:       Marcel Wiesweg <marcel.wiesweg () gmx ! de>
Date:       2009-10-10 18:54:39
Message-ID: 1255200879.330468.16590.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1033677 by mwiesweg:

Update signal connections, add logic for some corner cases, use QMap::value() instead
QMap::operator[] everywhere - the latter adds a value if it does not exist.

CCBUG: 209382

 M  +46 -17    captionedit.cpp  
 M  +1 -1      captionedit.h  


--- trunk/extragear/graphics/digikam/libs/imageproperties/captionedit.cpp #1033676:1033677
@@ -34,6 +34,7 @@
 // Local includes
 
 #include "altlangstredit.h"
+#include "debug.h"
 
 namespace Digikam
 {
@@ -53,6 +54,9 @@
     AltLangStrEdit *altLangStrEdit;
 
     CaptionsMap     captionsValues;
+
+    QString         lastDeletedLanguage;
+    CaptionValues   lastDeletedValues;
 };
 
 CaptionEdit::CaptionEdit(QWidget* parent)
@@ -71,16 +75,16 @@
     setMargin(0);
     setSpacing(0);
 
-    connect(d->altLangStrEdit, SIGNAL(signalModified()),
-            this, SIGNAL(signalModified()));
+    connect(d->altLangStrEdit, SIGNAL(signalSelectionChanged(const QString&)),
+            this, SLOT(slotSelectionChanged(const QString&)));
 
-//    connect(d->altLangStrEdit, SIGNAL(signalSelectionChanged(const QString&)),
-//            this, SLOT(slotSelectionChanged(const QString&)));
+    connect(d->altLangStrEdit, SIGNAL(signalModified(const QString&, const QString&)),
+            this, SLOT(slotCaptionModified(const QString&, const QString&)));
 
-    connect(d->altLangStrEdit, SIGNAL(signalAddValue(const QString&, const QString&)),
+    connect(d->altLangStrEdit, SIGNAL(signalValueAdded(const QString&, const QString&)),
             this, SLOT(slotAddValue(const QString&, const QString&)));
 
-    connect(d->altLangStrEdit, SIGNAL(signalDeleteValue(const QString&)),
+    connect(d->altLangStrEdit, SIGNAL(signalValueDeleted(const QString&)),
             this, SLOT(slotDeleteValue(const QString&)));
 
     connect(d->authorEdit, SIGNAL(textChanged(const QString&)),
@@ -95,7 +99,11 @@
 void CaptionEdit::reset()
 {
     d->altLangStrEdit->reset();
+
+    d->authorEdit->blockSignals(true);
     d->authorEdit->clear();
+    d->authorEdit->blockSignals(false);
+
     d->captionsValues.clear();
 }
 
@@ -105,24 +113,50 @@
     val.caption = text;
     val.author  = d->authorEdit->text();
     val.date    = QDateTime::currentDateTime();
+
+    // The user may have removed the text and directly entered a new one. Do not drop author then.
+    if (val.author.isEmpty() && d->lastDeletedLanguage == lang)
+    {
+        val.author = d->lastDeletedValues.author;
+        d->authorEdit->blockSignals(true);
+        d->authorEdit->setText(val.author);
+        d->authorEdit->blockSignals(false);
+    }
+    d->lastDeletedLanguage = QString();
+
     d->captionsValues.insert(lang, val);
     emit signalModified();
 }
 
+void CaptionEdit::slotCaptionModified(const QString& lang, const QString& text)
+{
+    slotAddValue(lang, text);
+}
+
 void CaptionEdit::slotDeleteValue(const QString& lang)
 {
+    d->lastDeletedLanguage = lang;
+    d->lastDeletedValues   = d->captionsValues.value(lang);
+
     d->captionsValues.remove(lang);
+    d->authorEdit->blockSignals(true);
+    d->authorEdit->clear();
+    d->authorEdit->blockSignals(false);
     emit signalModified();
 }
 
 void CaptionEdit::slotSelectionChanged(const QString& lang)
 {
-    QString author = d->captionsValues[lang].author;
+    QString author = d->captionsValues.value(lang).author;
+    d->authorEdit->blockSignals(true);
     d->authorEdit->setText(author);
+    d->authorEdit->blockSignals(false);
 }
 
 void CaptionEdit::setValues(const CaptionsMap& values)
 {
+    d->lastDeletedLanguage = QString();
+
     d->captionsValues = values;
     d->altLangStrEdit->setValues(d->captionsValues.toAltLangMap());
     slotSelectionChanged(d->altLangStrEdit->currentLanguageCode());
@@ -133,18 +167,13 @@
     return d->captionsValues;
 }
 
-void CaptionEdit::apply()
-{
-    d->altLangStrEdit->apply();
-}
-
 void CaptionEdit::slotAuthorChanged(const QString& text)
 {
-    bool dirty = (text != d->captionsValues[d->altLangStrEdit->currentLanguageCode()].author);
-    d->altLangStrEdit->setDirty(dirty);
-
-    if (dirty)
-        emit signalModified();
+    CaptionValues captionValues = d->captionsValues.value(d->altLangStrEdit->currentLanguageCode());
+    if (text != captionValues.author)
+    {
+        d->altLangStrEdit->addCurrent();
+    }
 }
 
 }  // namespace Digikam
--- trunk/extragear/graphics/digikam/libs/imageproperties/captionedit.h #1033676:1033677
@@ -56,7 +56,6 @@
     CaptionsMap& values();
 
     void reset();
-    void apply();
 
 Q_SIGNALS:
 
@@ -65,6 +64,7 @@
 private Q_SLOTS:
 
     void slotSelectionChanged(const QString&);
+    void slotCaptionModified(const QString&, const QString&);
     void slotAddValue(const QString&, const QString&);
     void slotDeleteValue(const QString&);
     void slotAuthorChanged(const QString&);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic