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