File indexing completed on 2023-05-30 10:45:27

0001 /*
0002     SPDX-FileCopyrightText: 2004, 2007, 2008 Peter Hedlund <peter.hedlund@kdemail.net>
0003     SPDX-License-Identifier: LGPL-2.0-only
0004 */
0005 
0006 #include "prefcharacter.h"
0007 
0008 #include <KLocalizedString>
0009 
0010 #include "prefs.h"
0011 #include "dlgspecchar.h"
0012 
0013 PrefCharacter::PrefCharacter(QWidget *parent, KActionCollection * ac) : QWidget(parent)
0014 {
0015   setupUi(this);
0016   m_actionCollection = ac;
0017 
0018   connect(CharacterTree, &QTreeWidget::itemSelectionChanged, this, &PrefCharacter::slotCharListSelectionChanged);
0019   connect(btnCharacter, &QAbstractButton::clicked, this, &PrefCharacter::slotSelectSpecChar);
0020 
0021   fillWidgets();
0022   updateWidgets();
0023 
0024   m_dlgSpecChar = 0;
0025 }
0026 
0027 void PrefCharacter::fillWidgets()
0028 {
0029   QStringList sl;
0030   sl << i18n("Action");
0031   sl << i18n("Shortcut");
0032   sl << i18n("Character");
0033   CharacterTree->setHeaderLabels(sl);
0034 
0035   QString sc = Prefs::specialCharacters();
0036   QTreeWidgetItem * twi;
0037 
0038   for (int i = 0; i < 9; i++)
0039   {
0040     twi = new QTreeWidgetItem(CharacterTree);
0041     twi->setText(0, i18n("Special Character %1", i + 1));
0042     twi->setText(1, m_actionCollection->action(QString("char_" + QString::number(i + 1)))->shortcut().toString());
0043     twi->setText(2, QString(sc[i]));
0044   }
0045   CharacterTree->resizeColumnToContents(0);
0046   CharacterTree->topLevelItem(0)->setSelected(true);
0047   CharacterTree->setCurrentItem(CharacterTree->topLevelItem(0));
0048   lblPreview->setText(CharacterTree->topLevelItem(0)->text(2));
0049 }
0050 
0051 void PrefCharacter::updateWidgets()
0052 {
0053   QString sc = Prefs::specialCharacters();
0054   for (int i = 0; i < 9; i++)
0055     CharacterTree->topLevelItem(i)->setText(2, QString(sc[i]));
0056 }
0057 
0058 void PrefCharacter::slotCharListSelectionChanged( )
0059 {
0060   if (CharacterTree->currentItem())
0061     lblPreview->setText(CharacterTree->currentItem()->text(2));
0062 }
0063 
0064 bool PrefCharacter::hasChanged()
0065 {
0066   QString sc = Prefs::specialCharacters();
0067   QString s;
0068   for (int i = 0; i < 9; i++)
0069     s.append(CharacterTree->topLevelItem(i)->text(2));
0070 
0071   return (sc.simplified() != s.simplified());
0072 }
0073 
0074 bool PrefCharacter::isDefault()
0075 {
0076   QString def = QStringLiteral("abcdefghi");
0077   QString s;
0078   for (int i = 0; i < 9; i++)
0079     s.append(CharacterTree->topLevelItem(i)->text(2));
0080 
0081   return (def == s.simplified());
0082 }
0083 
0084 void PrefCharacter::updateSettings( )
0085 {
0086   QString s;
0087   for (int i = 0; i < 9; i++)
0088     s.append(CharacterTree->topLevelItem(i)->text(2));
0089 
0090   Prefs::setSpecialCharacters(s.simplified());
0091 }
0092 
0093 void PrefCharacter::slotDlgSpecCharClosed()
0094 {
0095   if (m_dlgSpecChar)
0096   {
0097     disconnect(m_dlgSpecChar, &DlgSpecChar::insertChar, this, &PrefCharacter::slotSpecChar);
0098     disconnect(m_dlgSpecChar, &QDialog::finished, this, &PrefCharacter::slotDlgSpecCharClosed);
0099     m_dlgSpecChar->deleteLater();
0100     m_dlgSpecChar = 0;
0101   }
0102 }
0103 
0104 void PrefCharacter::slotSelectSpecChar()
0105 {
0106   QString s = CharacterTree->currentItem()->text(2);
0107   QChar c = s[0];
0108 
0109   if (m_dlgSpecChar == 0)
0110   {
0111     m_dlgSpecChar = new DlgSpecChar(this, Prefs::editorFont(), c);
0112     connect(m_dlgSpecChar, &DlgSpecChar::insertChar, this, &PrefCharacter::slotSpecChar);
0113     connect(m_dlgSpecChar, &QDialog::finished, this, &PrefCharacter::slotDlgSpecCharClosed);
0114   }
0115   m_dlgSpecChar->show();
0116 }
0117 
0118 void PrefCharacter::slotSpecChar(QChar c)
0119 {
0120   CharacterTree->currentItem()->setText(2, QString(c));
0121   lblPreview->setText(CharacterTree->currentItem()->text(2));
0122   Q_EMIT widgetModified();
0123 }