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 }