18 #include <kinputdialog.h>
19 #include <kmessagebox.h>
23 #include <KStandardDirs>
28 #include <sonnet/speller.h>
31 #include <keduvocdocument.h>
32 #include <keduvoclesson.h>
36 #define TENSE_TAG ". "
39 :
QWidget(parent), m_doc(doc), m_identifierIndex(identifierIndex)
43 connect(localeComboBox, SIGNAL(currentIndexChanged(
const QString&)),
this, SLOT(localeChanged(
const QString&)));
44 connect(downloadGrammarButton, SIGNAL(clicked()),
this, SLOT(
downloadGrammar()));
46 QStringList languageCodes = KGlobal::locale()->allLanguagesList();
49 QMap<QString, QString> languageCodeMap;
50 foreach (
const QString &code, languageCodes){
51 languageCodeMap[KGlobal::locale()->languageCodeToName(code)] = code;
54 foreach (
const QString &language, languageCodeMap.keys()) {
55 localeComboBox->addItem(language, languageCodeMap.value(language));
58 if (m_identifierIndex < m_doc->identifierCount()) {
59 localeComboBox->setCurrentIndex(localeComboBox->findData(
60 m_doc->identifier(m_identifierIndex).locale()));
62 identifierNameLineEdit->setText(m_doc->identifier(m_identifierIndex).name());
65 int index = (m_identifierIndex < m_doc->identifierCount() ? m_identifierIndex : 0);
67 settings.readConfig();
70 editorFont->setFont(settings.editorFont());
71 practiceFont->setFont(settings.practiceFont());
75 QDBusInterface kxbk(
"org.kde.keyboard",
"/Layouts",
"org.kde.KeyboardLayouts");
76 QDBusReply<QStringList> reply = kxbk.call(
"getLayoutsList");
77 if (reply.isValid()) {
78 QStringList layouts = reply;
79 layouts.prepend(QString());
80 keyboardLayoutComboBox->clear();
81 keyboardLayoutComboBox->addItems(layouts);
82 keyboardLayoutComboBox->setEnabled(
true);
84 QDBusReply<QString> currentLayout = kxbk.call(
"getCurrentLayout");
85 keyboardLayoutComboBox->setCurrentIndex(keyboardLayoutComboBox->findText(currentLayout));
86 if (m_identifierIndex < m_doc->identifierCount()) {
87 if (!settings.keyboardLayout().isEmpty()) {
88 keyboardLayoutComboBox->setCurrentIndex(keyboardLayoutComboBox->findText(settings.keyboardLayout()));
92 kDebug() <<
"kxkb dbus error";
93 keyboardLayoutComboBox->setEnabled(
false);
94 keyboardLayoutComboBox->addItem(i18n(
"No KDE keyboard selector found."));
97 Sonnet::Speller speller;
98 QMap<QString, QString> dicts = speller.availableDictionaries();
99 QMap<QString, QString>::const_iterator iter = dicts.constBegin();
100 while (iter != dicts.constEnd()) {
101 spellcheckerComboBox->addItem(iter.key(), iter.value());
104 spellcheckerComboBox->model()->sort(0);
105 spellcheckerComboBox->setCurrentIndex(spellcheckerComboBox->findData(settings.spellChecker()));
106 loadGrammarFromDocument();
111 m_identifierIndex = newIndex;
114 namespace DocumentHelper {
115 void fetchGrammar(KEduVocDocument* doc,
int languageIndex);
121 loadGrammarFromDocument();
124 void LanguagePropertiesPage::loadGrammarFromDocument()
126 if (m_identifierIndex < m_doc->identifierCount()) {
128 KEduVocArticle articles = m_doc->identifier(m_identifierIndex).article();
130 def_male->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine ));
131 indef_male->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine ));
133 def_female->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine ));
134 indef_female->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine ));
136 def_natural->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter ));
137 indef_natural->setText(articles.article( KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter ));
140 def_male_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine ));
141 indef_male_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine ));
143 def_female_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine ));
144 indef_female_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine ));
146 def_natural_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter ));
147 indef_natural_plural->setText(articles.article( KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter ));
150 const KEduVocWordFlags numS = KEduVocWordFlag::Singular;
151 const KEduVocWordFlags numD = KEduVocWordFlag::Dual;
152 const KEduVocWordFlags numP = KEduVocWordFlag::Plural;
154 KEduVocPersonalPronoun pronoun = m_doc->identifier(m_identifierIndex).personalPronouns();
156 first_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numS));
157 second_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numS));
158 thirdM_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS));
159 thirdF_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS));
160 thirdN_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS));
162 dualFirstLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numD));
163 dualSecondLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numD));
164 dualThirdMaleLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD));
165 dualThirdFemaleLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD));
166 dualThirdNeutralLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numD));
168 first_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numP));
169 second_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numP));
170 thirdM_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP));
171 thirdF_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP));
172 thirdN_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP));
174 maleFemaleDifferCheckBox->setChecked(pronoun.maleFemaleDifferent());
175 neutralCheckBox->setChecked(pronoun.neutralExists());
176 dualCheckBox->setChecked(pronoun.dualExists());
182 connect(maleFemaleDifferCheckBox, SIGNAL(toggled(
bool)), SLOT(updateCheckBoxes()));
183 connect(neutralCheckBox, SIGNAL(toggled(
bool)), SLOT(updateCheckBoxes()));
184 connect(dualCheckBox, SIGNAL(toggled(
bool)), SLOT(updateCheckBoxes()));
187 connect(tenseList, SIGNAL(currentRowChanged(
int)),
this, SLOT(slotTenseChosen(
int)));
188 connect(deleteButton, SIGNAL(clicked()),
this, SLOT(slotDeleteTense()));
189 connect(modifyButton, SIGNAL(clicked()),
this, SLOT(slotModifyTense()));
190 connect(newButton, SIGNAL(clicked()),
this, SLOT(slotNewTense()));
192 if (m_identifierIndex < m_doc->identifierCount()) {
194 foreach(
const QString &tenseName, m_doc->identifier(m_identifierIndex).tenseList()) {
195 tenseList->addItem(QString(
"%1").arg(i++, 2).append(
TENSE_TAG).append(tenseName));
196 tenseIndex.append(i);
201 if (tenseList->count() > 0) {
202 tenseList->setCurrentRow(m_currentTense);
205 modifyButton->setEnabled(tenseList->count() > 0);
206 deleteButton->setEnabled(tenseList->count() > 0);
207 tenseList->setFocus();
218 QString locale = localeComboBox->itemData(localeComboBox->currentIndex()).toString();
221 if (locale.isEmpty()) {
222 locale = identifierNameLineEdit->text();
224 m_doc->identifier(m_identifierIndex).setLocale( locale );
225 m_doc->identifier(m_identifierIndex).setName( identifierNameLineEdit->text() );
232 if ( keyboardLayoutComboBox->isEnabled() ) {
235 int index = spellcheckerComboBox->currentIndex();
236 settings.
setSpellChecker(spellcheckerComboBox->itemData(index).toString());
237 settings.writeConfig();
240 const KEduVocWordFlag::Flags artSing = KEduVocWordFlag::Singular;
242 const KEduVocWordFlag::Flags artPlur = KEduVocWordFlag::Plural;
244 const KEduVocWordFlag::Flags artDef = KEduVocWordFlag::Definite;
245 const KEduVocWordFlag::Flags artIndef = KEduVocWordFlag::Indefinite;
247 KEduVocArticle article;
249 article.setArticle( def_male->text(), artSing | artDef | KEduVocWordFlag::Masculine );
250 article.setArticle( indef_male->text(), artSing | artIndef | KEduVocWordFlag::Masculine );
251 article.setArticle( def_female->text(), artSing | artDef | KEduVocWordFlag::Feminine );
252 article.setArticle( indef_female->text(), artSing | artIndef | KEduVocWordFlag::Feminine );
253 article.setArticle( def_natural->text(), artSing | artDef | KEduVocWordFlag::Neuter );
254 article.setArticle( indef_natural->text(), artSing | artIndef | KEduVocWordFlag::Neuter );
257 article.setArticle( def_male_plural->text(), artPlur | artDef | KEduVocWordFlag::Masculine );
258 article.setArticle( indef_male_plural->text(), artPlur | artIndef | KEduVocWordFlag::Masculine );
259 article.setArticle( def_female_plural->text(), artPlur | artDef | KEduVocWordFlag::Feminine );
260 article.setArticle( indef_female_plural->text(), artPlur | artIndef | KEduVocWordFlag::Feminine );
261 article.setArticle( def_natural_plural->text(), artPlur | artDef | KEduVocWordFlag::Neuter );
262 article.setArticle( indef_natural_plural->text(), artPlur | artIndef | KEduVocWordFlag::Neuter );
264 m_doc->identifier(m_identifierIndex).setArticle( article );
267 KEduVocPersonalPronoun pronoun;
268 const KEduVocWordFlags numS = KEduVocWordFlag::Singular;
269 const KEduVocWordFlags numD = KEduVocWordFlag::Dual;
270 const KEduVocWordFlags numP = KEduVocWordFlag::Plural;
272 pronoun.setPersonalPronoun(first_singular->text(), KEduVocWordFlag::First | numS);
273 pronoun.setPersonalPronoun(second_singular->text(), KEduVocWordFlag::Second| numS);
274 pronoun.setPersonalPronoun(thirdM_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS);
275 pronoun.setPersonalPronoun(thirdF_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS);
276 pronoun.setPersonalPronoun(thirdN_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS);
278 pronoun.setPersonalPronoun(dualFirstLineEdit->text(), KEduVocWordFlag::First | numD);
279 pronoun.setPersonalPronoun(dualSecondLineEdit->text(), KEduVocWordFlag::Second | numD);
280 pronoun.setPersonalPronoun(dualThirdMaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD);
281 pronoun.setPersonalPronoun(dualThirdFemaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD);
282 pronoun.setPersonalPronoun(dualThirdNeutralLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter| numD);
284 pronoun.setPersonalPronoun(first_plural->text(), KEduVocWordFlag::First | numP);
285 pronoun.setPersonalPronoun(second_plural->text(), KEduVocWordFlag::Second | numP);
286 pronoun.setPersonalPronoun(thirdM_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP);
287 pronoun.setPersonalPronoun(thirdF_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP);
288 pronoun.setPersonalPronoun(thirdN_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP);
290 pronoun.setMaleFemaleDifferent(maleFemaleDifferCheckBox->isChecked());
291 pronoun.setNeutralExists(neutralCheckBox->isChecked());
292 pronoun.setDualExists(dualCheckBox->isChecked());
294 m_doc->identifier(m_identifierIndex).setPersonalPronouns( pronoun );
298 QList<int> tenseIndex;
302 for (
int i = 0; i < (int) tenseList->count(); i++) {
303 str = tenseList->item(i)->text();
307 m_doc->identifier(m_identifierIndex).setTenseList(tenses);
311 void LanguagePropertiesPage::updateCheckBoxes()
313 bool maleFemale = maleFemaleDifferCheckBox->isChecked();
314 bool neutral = neutralCheckBox->isChecked();
315 bool dual = dualCheckBox->isChecked();
317 neutralCheckBox->setVisible(maleFemale);
318 male_c_label->setVisible(maleFemale);
319 female_c_label->setVisible(maleFemale);
320 thirdM_singular->setVisible(maleFemale);
321 thirdF_singular->setVisible(maleFemale);
322 thirdM_plural->setVisible(maleFemale);
323 thirdF_plural->setVisible(maleFemale);
325 dualLabel->setVisible(dual);
326 dualFirstLineEdit->setVisible(dual);
327 dualSecondLineEdit->setVisible(dual);
329 dualThirdMaleLineEdit->setVisible(dual && maleFemale);
330 dualThirdFemaleLineEdit->setVisible(dual && maleFemale);
333 natural_c_label->setVisible(
false);
334 thirdN_singular->setVisible(
true);
335 thirdN_plural->setVisible(
true);
336 dualThirdNeutralLineEdit->setVisible(dual);
338 natural_c_label->setVisible(neutral);
339 thirdN_singular->setVisible(neutral);
340 thirdN_plural->setVisible(neutral);
341 dualThirdNeutralLineEdit->setVisible(dual && neutral);
345 void LanguagePropertiesPage::localeChanged(
const QString & locale)
347 identifierNameLineEdit->setText( locale );
353 void LanguagePropertiesPage::slotTenseChosen(
int index)
355 m_currentTense = index;
358 void LanguagePropertiesPage::slotNewTense()
361 QString getTense = KInputDialog::getText(i18n(
"Tense Name"), i18n(
"Enter name of tense:"), QString(), &ok,
this);
366 int i = tenseList->count() + 1;
367 tenseList->addItem(QString(
"%1").arg(i, 2).append(
TENSE_TAG).append(getTense.simplified()));
368 tenseIndex.append(-(i - 1));
370 m_currentTense = tenseList->count();
371 tenseList->setCurrentRow(i - 1);
372 modifyButton->setEnabled(
true);
373 deleteButton->setEnabled(
true);
376 void LanguagePropertiesPage::slotModifyTense()
378 if (tenseList->count() != 0 && (int) tenseList->count() > m_currentTense) {
379 QString str = tenseList->item(m_currentTense)->text();
383 QString getTense = KInputDialog::getText(i18n(
"Tense Name"), i18n(
"Enter name of tense:"), str, &ok,
this);
387 int i = m_currentTense + 1;
388 tenseList->item(m_currentTense)->setText(QString(
"%1").arg(i, 2).append(
TENSE_TAG).append(getTense.simplified()));
392 void LanguagePropertiesPage::updateListBox(
int start)
395 for (
int i = start; i < (int) tenseList->count(); i++) {
396 str = tenseList->item(i)->text();
398 tenseList->item(i)->setText(QString(
"%1").arg(i + 1, 2).append(
TENSE_TAG).append(str));
402 void LanguagePropertiesPage::slotDeleteTense()
404 int act = m_currentTense;
405 if (tenseList->count() > 0 && (int) tenseList->count() > act) {
407 QString t = tenseList->item(act)->text();
409 foreach (KEduVocExpression *exp, m_doc->lesson()->entries(KEduVocLesson::Recursive)) {
410 for (
int lang = 0; lang < m_doc->identifierCount(); lang++) {
411 if ( exp->translation(lang)->conjugationTenses().contains(t)) {
412 KMessageBox::information(
this, i18n(
"The selected user defined tense could not be deleted\nbecause it is in use."), i18n(
"Deleting Tense Description"));
418 delete tenseList->takeItem(act);
419 tenseIndex.erase(tenseIndex.begin() + act);
421 if ((
int) tenseList->count() <= act)
422 act = tenseList->count() - 1;
427 tenseList->setCurrentRow(act);
429 modifyButton->setEnabled(tenseList->count() > 0);
430 deleteButton->setEnabled(tenseList->count() > 0);
433 #include "languagepropertiespage.moc"
void setKeyboardLayout(const QString &v)
Set Keyboard layout for this locale.
void setSpellChecker(const QString &v)
Set Spell checker for this language.
LanguagePropertiesPage(KEduVocDocument *doc, int identifierIndex, QWidget *parent=0)
void setLanguageIdentifierIndex(int newIndex)
void fetchGrammar(KEduVocDocument *doc, int languageIndex)
void setPracticeFont(const QFont &v)
Set The font used during practice.
void setEditorFont(const QFont &v)
Set The font used in the editor.