File indexing completed on 2024-04-28 07:39:32

0001 /*
0002     SPDX-FileCopyrightText: 2008 Frederik Gladhorn <gladhorn@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "languageproperties.h"
0007 
0008 #include "languagepropertiespage.h"
0009 #include "languagesettings.h"
0010 
0011 #include <KEduVocDocument>
0012 
0013 #include <KLocalizedString>
0014 #include <KMessageBox>
0015 #include <QDialogButtonBox>
0016 #include <QLabel>
0017 #include <QToolTip>
0018 
0019 LanguageProperties::LanguageProperties(KEduVocDocument *doc, QWidget *parent)
0020     : KPageDialog(parent)
0021     , m_doc(doc)
0022 {
0023     setWindowTitle(i18nc("@title:window", "Edit Languages"));
0024     setFaceType(List);
0025     setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0026 
0027     QAbstractButton *addLangButton(buttonBox()->addButton(i18n("Add language"), QDialogButtonBox::ActionRole));
0028     addLangButton->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
0029 
0030     QAbstractButton *removeLangButton(buttonBox()->addButton(i18n("Remove language"), QDialogButtonBox::ActionRole));
0031     removeLangButton->setIcon(QIcon::fromTheme(QStringLiteral("list-remove")));
0032 
0033     connect(addLangButton, &QAbstractButton::clicked, this, &LanguageProperties::slotAppendIdentifier);
0034     connect(removeLangButton, &QAbstractButton::clicked, this, &LanguageProperties::slotDeleteIdentifier);
0035 
0036     for (int i = 0; i < m_doc->identifierCount(); i++) {
0037         createPage(i);
0038     }
0039 }
0040 
0041 KPageWidgetItem *LanguageProperties::createPage(int i)
0042 {
0043     LanguagePropertiesPage *page = new LanguagePropertiesPage(m_doc, i);
0044 
0045     QString name = i18n("New Language");
0046 
0047     // check if this language already exists in the doc
0048     if (m_doc->identifierCount() <= i) {
0049         m_doc->appendIdentifier();
0050     }
0051     if (m_doc->identifierCount() > i) {
0052         name = m_doc->identifier(i).name();
0053         LanguageSettings currentSettings(m_doc->identifier(i).locale());
0054         currentSettings.load();
0055     }
0056 
0057     KPageWidgetItem *editPage = new KPageWidgetItem(page, name);
0058     editPage->setHeader(i18nc("Edit language properties", "Properties for %1", name));
0059 
0060     m_pages.append(editPage);
0061     addPage(editPage);
0062 
0063     editPage->setIcon(QIcon::fromTheme(QStringLiteral("set-language")));
0064 
0065     connect(page->identifierNameLineEdit, &QLineEdit::textChanged, this, &LanguageProperties::pageNameChanged);
0066     connect(this, &LanguageProperties::accepted, page, &LanguagePropertiesPage::accept);
0067 
0068     return editPage;
0069 }
0070 
0071 void LanguageProperties::accept()
0072 {
0073     KEduVocDocument *doc = m_doc;
0074     int deleted = 0;
0075 
0076     for (int index = 0; index < m_pages.count(); index++) {
0077         if (m_pages.value(index)->isEnabled()) {
0078             if (index - deleted >= doc->identifierCount()) {
0079                 // add a language
0080                 doc->appendIdentifier();
0081             }
0082             LanguagePropertiesPage *page = static_cast<LanguagePropertiesPage *>(m_pages.value(index)->widget());
0083             page->setLanguageIdentifierIndex(index - deleted);
0084         } else {
0085             // page is disabled, delete the language
0086             if (index < doc->identifierCount()) {
0087                 if (KMessageBox::warningTwoActions(this,
0088                                                    i18n("Really delete language: %1?", doc->identifier(index - deleted).name()),
0089                                                    i18n("Remove Language"),
0090                                                    KStandardGuiItem::del(),
0091                                                    KStandardGuiItem::cancel())
0092                     == KMessageBox::PrimaryAction) {
0093                     doc->removeIdentifier(index - deleted);
0094                     deleted++;
0095                 }
0096             }
0097         }
0098     }
0099 
0100     KPageDialog::accept();
0101 }
0102 
0103 void LanguageProperties::slotAppendIdentifier()
0104 {
0105     // if a page that was "removed" is selected, simply enable it again to not delete it.
0106     if (currentPage() && !currentPage()->isEnabled()) {
0107         currentPage()->setEnabled(true);
0108         return;
0109     }
0110 
0111     int i = m_pages.count();
0112     KPageWidgetItem *newPage = createPage(i);
0113     setCurrentPage(newPage);
0114 }
0115 
0116 void LanguageProperties::slotDeleteIdentifier()
0117 {
0118     currentPage()->setEnabled(false);
0119 }
0120 
0121 void LanguageProperties::pageNameChanged(const QString &newName)
0122 {
0123     currentPage()->setName(newName);
0124 }
0125 
0126 #include "moc_languageproperties.cpp"