1 /*
2     SPDX-FileCopyrightText: 2004, 2007, 2008 Peter Hedlund <peter.hedlund@kdemail.net>
3     SPDX-License-Identifier: LGPL-2.0-only
4 */
5 
6 #include "prefcharacter.h"
7 
8 #include <KLocalizedString>
9 
10 #include "prefs.h"
11 #include "dlgspecchar.h"
12 
PrefCharacter(QWidget * parent,KActionCollection * ac)13 PrefCharacter::PrefCharacter(QWidget *parent, KActionCollection * ac) : QWidget(parent)
14 {
15   setupUi(this);
16   m_actionCollection = ac;
17 
18   connect(CharacterTree, &QTreeWidget::itemSelectionChanged, this, &PrefCharacter::slotCharListSelectionChanged);
19   connect(btnCharacter, &QAbstractButton::clicked, this, &PrefCharacter::slotSelectSpecChar);
20 
21   fillWidgets();
22   updateWidgets();
23 
24   m_dlgSpecChar = 0;
25 }
26 
fillWidgets()27 void PrefCharacter::fillWidgets()
28 {
29   QStringList sl;
30   sl << i18n("Action");
31   sl << i18n("Shortcut");
32   sl << i18n("Character");
33   CharacterTree->setHeaderLabels(sl);
34 
35   QString sc = Prefs::specialCharacters();
36   QTreeWidgetItem * twi;
37 
38   for (int i = 0; i < 9; i++)
39   {
40     twi = new QTreeWidgetItem(CharacterTree);
41     twi->setText(0, i18n("Special Character %1", i + 1));
42     twi->setText(1, m_actionCollection->action(QString("char_" + QString::number(i + 1)))->shortcut().toString());
43     twi->setText(2, QString(sc[i]));
44   }
45   CharacterTree->resizeColumnToContents(0);
46   CharacterTree->topLevelItem(0)->setSelected(true);
47   CharacterTree->setCurrentItem(CharacterTree->topLevelItem(0));
48   lblPreview->setText(CharacterTree->topLevelItem(0)->text(2));
49 }
50 
updateWidgets()51 void PrefCharacter::updateWidgets()
52 {
53   QString sc = Prefs::specialCharacters();
54   for (int i = 0; i < 9; i++)
55     CharacterTree->topLevelItem(i)->setText(2, QString(sc[i]));
56 }
57 
slotCharListSelectionChanged()58 void PrefCharacter::slotCharListSelectionChanged( )
59 {
60   if (CharacterTree->currentItem())
61     lblPreview->setText(CharacterTree->currentItem()->text(2));
62 }
63 
hasChanged()64 bool PrefCharacter::hasChanged()
65 {
66   QString sc = Prefs::specialCharacters();
67   QString s;
68   for (int i = 0; i < 9; i++)
69     s.append(CharacterTree->topLevelItem(i)->text(2));
70 
71   return (sc.simplified() != s.simplified());
72 }
73 
isDefault()74 bool PrefCharacter::isDefault()
75 {
76   QString def = QStringLiteral("abcdefghi");
77   QString s;
78   for (int i = 0; i < 9; i++)
79     s.append(CharacterTree->topLevelItem(i)->text(2));
80 
81   return (def == s.simplified());
82 }
83 
updateSettings()84 void PrefCharacter::updateSettings( )
85 {
86   QString s;
87   for (int i = 0; i < 9; i++)
88     s.append(CharacterTree->topLevelItem(i)->text(2));
89 
90   Prefs::setSpecialCharacters(s.simplified());
91 }
92 
slotDlgSpecCharClosed()93 void PrefCharacter::slotDlgSpecCharClosed()
94 {
95   if (m_dlgSpecChar)
96   {
97     disconnect(m_dlgSpecChar, &DlgSpecChar::insertChar, this, &PrefCharacter::slotSpecChar);
98     disconnect(m_dlgSpecChar, &QDialog::finished, this, &PrefCharacter::slotDlgSpecCharClosed);
99     m_dlgSpecChar->deleteLater();
100     m_dlgSpecChar = 0;
101   }
102 }
103 
slotSelectSpecChar()104 void PrefCharacter::slotSelectSpecChar()
105 {
106   QString s = CharacterTree->currentItem()->text(2);
107   QChar c = s[0];
108 
109   if (m_dlgSpecChar == 0)
110   {
111     m_dlgSpecChar = new DlgSpecChar(this, Prefs::editorFont(), c);
112     connect(m_dlgSpecChar, &DlgSpecChar::insertChar, this, &PrefCharacter::slotSpecChar);
113     connect(m_dlgSpecChar, &QDialog::finished, this, &PrefCharacter::slotDlgSpecCharClosed);
114   }
115   m_dlgSpecChar->show();
116 }
117 
slotSpecChar(QChar c)118 void PrefCharacter::slotSpecChar(QChar c)
119 {
120   CharacterTree->currentItem()->setText(2, QString(c));
121   lblPreview->setText(CharacterTree->currentItem()->text(2));
122   Q_EMIT widgetModified();
123 }
124