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&);