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

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

SVN commit 1033676 by mwiesweg:

Remove the Add/Update button in AltLangStrEdit, accept changes as soon as they are done.

CCBUG: 209382

 M  +70 -92    altlangstredit.cpp  
 M  +19 -13    altlangstredit.h  


--- trunk/extragear/graphics/digikam/libs/template/altlangstredit.cpp #1033675:1033676
@@ -43,6 +43,7 @@
 
 // Local includes
 
+#include "debug.h"
 #include "msgtextedit.h"
 
 using namespace KExiv2Iface;
@@ -57,10 +58,11 @@
     AltLangStrEditPriv()
     {
         titleLabel     = 0;
-        addValueButton = 0;
         delValueButton = 0;
         languageCB     = 0;
 
+        currentLanguage = "x-default";
+
         // We cannot use KLocale::allLanguagesList() here because KDE only
         // support 2 characters country codes. XMP require 2+2 characters language+country
         // following ISO 3066 (http://babelwiki.babelzilla.org/index.php?title=Language_codes)
@@ -247,9 +249,10 @@
 
     LanguageCodeMap                 languageCodeMap;
 
+    QString                         currentLanguage;
+
     QLabel                         *titleLabel;
 
-    QToolButton                    *addValueButton;
     QToolButton                    *delValueButton;
 
     MsgTextEdit                    *valueEdit;
@@ -264,12 +267,9 @@
 {
     QGridLayout *grid = new QGridLayout(this);
     d->titleLabel     = new QLabel(this);
-    d->addValueButton = new QToolButton(this);
     d->delValueButton = new QToolButton(this);
-    d->addValueButton->setIcon(SmallIcon("list-add"));
-    d->delValueButton->setIcon(SmallIcon("list-remove"));
-    d->delValueButton->setToolTip(i18n("Remove current item"));
-    d->addValueButton->setEnabled(false);
+    d->delValueButton->setIcon(SmallIcon("edit-clear"));
+    d->delValueButton->setToolTip(i18n("Remove entry for this language"));
     d->delValueButton->setEnabled(false);
 
     d->languageCB = new KComboBox(this);
@@ -284,8 +284,7 @@
     grid->setAlignment( Qt::AlignTop );
     grid->addWidget(d->titleLabel,     0, 0, 1, 1);
     grid->addWidget(d->languageCB,     0, 2, 1, 1);
-    grid->addWidget(d->addValueButton, 0, 3, 1, 1);
-    grid->addWidget(d->delValueButton, 0, 4, 1, 1);
+    grid->addWidget(d->delValueButton, 0, 3, 1, 1);
     grid->addWidget(d->valueEdit,      1, 0, 1,-1);
     grid->setColumnStretch(1, 10);
     grid->setMargin(0);
@@ -295,15 +294,9 @@
 
     // --------------------------------------------------------
 
-    connect(d->languageCB, SIGNAL(activated(int)),
-            this, SLOT(slotSelectionChanged(int)));
+    connect(d->languageCB, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(slotSelectionChanged()));
 
-    connect(d->addValueButton, SIGNAL(clicked()),
-            this, SLOT(slotAddValue()));
-
-    connect(d->addValueButton, SIGNAL(clicked()),
-            this, SIGNAL(signalModified()));
-
     connect(d->delValueButton, SIGNAL(clicked()),
             this, SLOT(slotDeleteValue()));
 
@@ -318,7 +311,7 @@
 
 QString AltLangStrEdit::currentLanguageCode() const
 {
-    return d->languageCB->currentText();
+    return d->currentLanguage;
 }
 
 QString AltLangStrEdit::languageCode(int index) const
@@ -341,71 +334,49 @@
     setValues(KExiv2::AltLangMap());
 }
 
-void AltLangStrEdit::slotAddValue()
-{
-    QString lang = d->languageCB->currentText();
-    QString text = d->valueEdit->toPlainText();
-    if (text.isEmpty()) return;
-
-    d->values.insert(lang, text);
-    blockSignals(true);
-    d->valueEdit->clear();
-    loadLangAltListEntries(lang);
-    blockSignals(false);
-
-    emit signalAddValue(lang, text);
-}
-
 void AltLangStrEdit::slotDeleteValue()
 {
-    QString lang = d->languageCB->currentText();
-    d->values.remove(lang);
+    d->values.remove(d->currentLanguage);
     loadLangAltListEntries();
-    emit signalDeleteValue(lang);
-    emit signalModified();
+    emit signalValueDeleted(d->currentLanguage);
 }
 
-void AltLangStrEdit::slotSelectionChanged(int index)
+void AltLangStrEdit::slotSelectionChanged()
 {
-    QString lang        = d->languageCB->currentText();
-    QString langISO3066 = lang;
+    d->currentLanguage = d->languageCB->currentText();
 
     // There are bogus signals caused by spell checking, see bug #141663.
     // so we must block signals here.
 
     d->valueEdit->blockSignals(true);
-    d->valueEdit->setSpellCheckingLanguage(langISO3066.replace("-", "_"));
 
-    if (!d->languageCB->itemIcon(index).isNull())
-    {
-        QString text = d->values[lang];
-        d->valueEdit->setText(text);
-        d->addValueButton->setEnabled(false);
-        d->delValueButton->setEnabled(true);
-        d->addValueButton->setIcon(SmallIcon("view-refresh"));
-        d->addValueButton->setToolTip(i18n("Update current item"));
-    }
-    else
-    {
-        d->valueEdit->clear();
-        d->addValueButton->setEnabled(false);
-        d->delValueButton->setEnabled(false);
-        d->addValueButton->setIcon(SmallIcon("list-add"));
-        d->addValueButton->setToolTip(i18n("Add new item"));
-    }
+    QString langISO3066 = d->currentLanguage;
+    langISO3066.replace("-", "_");
+    d->valueEdit->setSpellCheckingLanguage(langISO3066);
 
+    QString text = d->values.value(d->currentLanguage);
+    d->valueEdit->setText(text);
+    d->delValueButton->setEnabled(!text.isNull());
+
     d->valueEdit->blockSignals(false);
-    d->languageCB->setToolTip(d->languageCodeMap[lang]);
 
-    emit signalSelectionChanged(lang);
+    d->languageCB->setToolTip(d->languageCodeMap[d->currentLanguage]);
+
+    emit signalSelectionChanged(d->currentLanguage);
 }
 
 void AltLangStrEdit::setValues(const KExiv2::AltLangMap& values)
 {
-    blockSignals(true);
     d->values = values;
     loadLangAltListEntries();
-    blockSignals(false);
+
+    d->valueEdit->blockSignals(true);
+
+    QString text = d->values.value(d->currentLanguage);
+    d->valueEdit->setText(text);
+    d->delValueButton->setEnabled(!text.isNull());
+
+    d->valueEdit->blockSignals(false);
 }
 
 KExiv2::AltLangMap& AltLangStrEdit::values()
@@ -413,8 +384,19 @@
     return d->values;
 }
 
-void AltLangStrEdit::loadLangAltListEntries(const QString& currentLang)
+/*void AltLangStrEdit::setCurrentLanguageCode(const QString& code)
 {
+    QString codeToSelect = code;
+    if (!d->languageCodeMap.contains(codeToSelect))
+        codeToSelect = "x-default";
+    d->languageCB->setCurrentItem(codeToSelect);
+}
+*/
+
+void AltLangStrEdit::loadLangAltListEntries()
+{
+    d->languageCB->blockSignals(true);
+
     d->languageCB->clear();
 
     // In first we fill already assigned languages.
@@ -439,15 +421,14 @@
             d->languageCB->addItem(it.key());
     }
 
-    d->languageCB->setCurrentItem(currentLang);
-    slotSelectionChanged(d->languageCB->currentIndex());
+    d->languageCB->setCurrentItem(d->currentLanguage);
 
-    d->languageCB->updateGeometry();
+    d->languageCB->blockSignals(false);
 }
 
 QString AltLangStrEdit::defaultAltLang() const
 {
-    return d->values[QString("x-default")];
+    return d->values.value(QString("x-default"));
 }
 
 bool AltLangStrEdit::asDefaultAltLang() const
@@ -457,38 +438,35 @@
 
 void AltLangStrEdit::slotTextChanged()
 {
-    QString text = d->valueEdit->toPlainText();
-    if (text.isEmpty())
+    QString editedText   = d->valueEdit->toPlainText();
+    QString previousText = d->values.value(d->currentLanguage);
+
+    if (editedText.isEmpty())
     {
         slotDeleteValue();
-        return;
     }
-
-    // we cannot trust that the text actually changed
-    // (there are bogus signals caused by spell checking, see bug #141663)
-    // so we have to check before marking the metadata as modified.
-
-    bool dirty = (text != d->values[d->languageCB->currentText()]);
-    setDirty(dirty);
-
-    if (dirty)
-        emit signalModified();
+    else if (previousText.isNull())
+    {
+        addCurrent();
+    }
+    else if (editedText != previousText)
+    {
+        // we cannot trust that the text actually changed
+        // (there are bogus signals caused by spell checking, see bug #141663)
+        // so we have to check before marking the metadata as modified.
+        d->values.insert(d->currentLanguage, editedText);
+        emit signalModified(d->currentLanguage, editedText);
+    }
 }
 
-void AltLangStrEdit::setDirty(bool dirty)
+void AltLangStrEdit::addCurrent()
 {
-    d->addValueButton->setEnabled(dirty);
-}
+    QString text = d->valueEdit->toPlainText();
 
-bool AltLangStrEdit::isDirty() const
-{
-    return d->addValueButton->isEnabled();
+    d->values.insert(d->currentLanguage, text);
+    loadLangAltListEntries();
+    d->delValueButton->setEnabled(true);
+    emit signalValueAdded(d->currentLanguage, text);
 }
 
-void AltLangStrEdit::apply()
-{
-    if (d->addValueButton->isEnabled())
-        slotAddValue();
-}
-
 }  // namespace Digikam
--- trunk/extragear/graphics/digikam/libs/template/altlangstredit.h #1033675:1033676
@@ -61,34 +61,40 @@
     QString defaultAltLang() const;
     bool    asDefaultAltLang() const;
 
-    /** Reset all entries
+    /**
+     * Reset widget, clear all entries
      */
     void reset();
 
-    /** Force current text to be registered in captions map
+    /**
+     * Ensure that the current language is added to the list of entries,
+     * even if the text is empty.
+     * signalValueAdded() will be emitted.
      */
-    void apply();
+    void addCurrent();
 
-    void setDirty(bool dirty);
-    bool isDirty() const;
-
 Q_SIGNALS:
 
-    void signalModified();
-    void signalSelectionChanged(const QString&);
-    void signalAddValue(const QString&, const QString&);
-    void signalDeleteValue(const QString&);
+    /**
+     * Emitted when the user changes the text for the current language.
+     */
+    void signalModified(const QString& lang, const QString& text);
+    /// Emitted when the current language changed
+    void signalSelectionChanged(const QString& lang);
+    /// Emitted when an entry for a new language is added
+    void signalValueAdded(const QString& lang, const QString& text);
+    /// Emitted when the entry for a language is removed.
+    void signalValueDeleted(const QString& lang);
 
 protected Q_SLOTS:
 
     void slotTextChanged();
-    void slotSelectionChanged(int);
-    void slotAddValue();
+    void slotSelectionChanged();
     void slotDeleteValue();
 
 protected:
 
-    void loadLangAltListEntries(const QString& currentLang=QString("x-default"));
+    void loadLangAltListEntries();
 
 private:
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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