• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

parley

  • sources
  • kde-4.14
  • kdeedu
  • parley
  • src
  • settings
languagepropertiespage.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2008 Frederik Gladhorn <gladhorn@kde.org>
3  ***************************************************************************/
4 
5 /***************************************************************************
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  ***************************************************************************/
13 
14 #include "languagepropertiespage.h"
15 
16 #include "languagesettings.h"
17 
18 #include <kinputdialog.h>
19 #include <kmessagebox.h>
20 
21 #include <KDebug>
22 #include <KLocale>
23 #include <KStandardDirs>
24 #include <KLineEdit>
25 #include <QCheckBox>
26 #include <QLabel>
27 #include <QtDBus>
28 #include <sonnet/speller.h>
29 
30 #include <keduvocdocument.h>
31 #include <keduvocexpression.h>
32 #include <keduvoclesson.h>
33 
34 #include <parleydocument.h>
35 
36 #define TENSE_TAG ". "
37 
38 LanguagePropertiesPage::LanguagePropertiesPage(KEduVocDocument *doc, int identifierIndex, QWidget *parent)
39  : QWidget(parent), m_doc(doc), m_identifierIndex(identifierIndex)
40 {
41  setupUi(this);
42 
43  connect(localeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(localeChanged(const QString&)));
44  connect(downloadGrammarButton, SIGNAL(clicked()), this, SLOT(downloadGrammar()));
45 
46  QStringList languageCodes = KGlobal::locale()->allLanguagesList();
47 
48  // qmap automatically sorts by keys
49  QMap<QString, QString> languageCodeMap;
50  foreach(const QString & code, languageCodes) {
51  languageCodeMap[KGlobal::locale()->languageCodeToName(code)] = code;
52  }
53  // add the language, but also it's code as data
54  foreach(const QString & language, languageCodeMap.keys()) {
55  localeComboBox->addItem(language, languageCodeMap.value(language));
56  }
57 
58  if (m_identifierIndex < m_doc->identifierCount()) {
59  localeComboBox->setCurrentIndex(localeComboBox->findData(
60  m_doc->identifier(m_identifierIndex).locale()));
61 
62  identifierNameLineEdit->setText(m_doc->identifier(m_identifierIndex).name());
63  }
64 
65  int index = (m_identifierIndex < m_doc->identifierCount() ? m_identifierIndex : 0);
66  LanguageSettings settings(m_doc->identifier(index).locale());
67  settings.readConfig();
68 
69  // fonts
70  editorFont->setFont(settings.editorFont());
71  practiceFont->setFont(settings.practiceFont());
72 
73  // keyboard layout
74  // try to talk to kxbk - get a list of keyboard layouts
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);
83 
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()));
89  }
90  }
91  } else {
92  kDebug() << "kxkb dbus error";
93  keyboardLayoutComboBox->setEnabled(false);
94  keyboardLayoutComboBox->addItem(i18n("No KDE keyboard selector found."));
95  }
96 
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());
102  ++iter;
103  }
104  spellcheckerComboBox->model()->sort(0);
105  spellcheckerComboBox->setCurrentIndex(spellcheckerComboBox->findData(settings.spellChecker()));
106  loadGrammarFromDocument();
107 }
108 
109 void LanguagePropertiesPage::setLanguageIdentifierIndex(int newIndex)
110 {
111  m_identifierIndex = newIndex;
112 }
113 
114 namespace DocumentHelper
115 {
116 void fetchGrammar(KEduVocDocument* doc, int languageIndex);
117 }
118 
119 void LanguagePropertiesPage::downloadGrammar()
120 {
121  DocumentHelper::fetchGrammar(m_doc, m_identifierIndex);
122  loadGrammarFromDocument();
123 }
124 
125 void LanguagePropertiesPage::loadGrammarFromDocument()
126 {
127  if (m_identifierIndex < m_doc->identifierCount()) {
128  // articles
129  KEduVocArticle articles = m_doc->identifier(m_identifierIndex).article();
130 
131  def_male->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine));
132  indef_male->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine));
133 
134  def_female->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine));
135  indef_female->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine));
136 
137  def_natural->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter));
138  indef_natural->setText(articles.article(KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter));
139 
140 
141  def_male_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine));
142  indef_male_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine));
143 
144  def_female_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine));
145  indef_female_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine));
146 
147  def_natural_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter));
148  indef_natural_plural->setText(articles.article(KEduVocWordFlag::Plural | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter));
149 
150  // personal pronouns
151  const KEduVocWordFlags numS = KEduVocWordFlag::Singular;
152  const KEduVocWordFlags numD = KEduVocWordFlag::Dual;
153  const KEduVocWordFlags numP = KEduVocWordFlag::Plural;
154 
155  KEduVocPersonalPronoun pronoun = m_doc->identifier(m_identifierIndex).personalPronouns();
156 
157  first_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numS));
158  second_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numS));
159  thirdM_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS));
160  thirdF_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS));
161  thirdN_singular->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS));
162 
163  dualFirstLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numD));
164  dualSecondLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numD));
165  dualThirdMaleLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD));
166  dualThirdFemaleLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD));
167  dualThirdNeutralLineEdit->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numD));
168 
169  first_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::First | numP));
170  second_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Second | numP));
171  thirdM_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP));
172  thirdF_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP));
173  thirdN_plural->setText(pronoun.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP));
174 
175  maleFemaleDifferCheckBox->setChecked(pronoun.maleFemaleDifferent());
176  neutralCheckBox->setChecked(pronoun.neutralExists());
177  dualCheckBox->setChecked(pronoun.dualExists());
178  }
179 
180  // update shown labels etc...
181  updateCheckBoxes();
182 
183  connect(maleFemaleDifferCheckBox, SIGNAL(toggled(bool)), SLOT(updateCheckBoxes()));
184  connect(neutralCheckBox, SIGNAL(toggled(bool)), SLOT(updateCheckBoxes()));
185  connect(dualCheckBox, SIGNAL(toggled(bool)), SLOT(updateCheckBoxes()));
186 
187  // tenses
188  connect(tenseList, SIGNAL(currentRowChanged(int)), this, SLOT(slotTenseChosen(int)));
189  connect(deleteButton, SIGNAL(clicked()), this, SLOT(slotDeleteTense()));
190  connect(modifyButton, SIGNAL(clicked()), this, SLOT(slotModifyTense()));
191  connect(newButton, SIGNAL(clicked()), this, SLOT(slotNewTense()));
192 
193  if (m_identifierIndex < m_doc->identifierCount()) {
194  int i = 1;
195  foreach(const QString & tenseName, m_doc->identifier(m_identifierIndex).tenseList()) {
196  tenseList->addItem(QString("%1").arg(i++, 2).append(TENSE_TAG).append(tenseName));
197  tenseIndex.append(i);
198  }
199  }
200 
201  m_currentTense = 0;
202  if (tenseList->count() > 0) {
203  tenseList->setCurrentRow(m_currentTense);
204  }
205 
206  modifyButton->setEnabled(tenseList->count() > 0);
207  deleteButton->setEnabled(tenseList->count() > 0);
208  tenseList->setFocus();
209 }
210 
211 void LanguagePropertiesPage::accept()
212 {
213  if (!isEnabled()) {
214  // disabled pages are deleted languages
215  return;
216  }
217 
218  // general
219  QString locale = localeComboBox->itemData(localeComboBox->currentIndex()).toString();
220 
221  // if no locales are found (kdebase not installed?) at least fall back to using the language name as locale.
222  if (locale.isEmpty()) {
223  locale = identifierNameLineEdit->text();
224  }
225  m_doc->identifier(m_identifierIndex).setLocale(locale);
226  m_doc->identifier(m_identifierIndex).setName(identifierNameLineEdit->text());
227 
228  LanguageSettings settings(locale);
229 
230  settings.setEditorFont(editorFont->font());
231  settings.setPracticeFont(practiceFont->font());
232 
233  if (keyboardLayoutComboBox->isEnabled()) {
234  settings.setKeyboardLayout(keyboardLayoutComboBox->currentText());
235  }
236  int index = spellcheckerComboBox->currentIndex();
237  settings.setSpellChecker(spellcheckerComboBox->itemData(index).toString());
238  settings.writeConfig();
239 
240  // articles
241  const KEduVocWordFlag::Flags artSing = KEduVocWordFlag::Singular;
242 // const KEduVocWordFlag::Flags artDual = KEduVocWordFlag::Dual;
243  const KEduVocWordFlag::Flags artPlur = KEduVocWordFlag::Plural;
244 
245  const KEduVocWordFlag::Flags artDef = KEduVocWordFlag::Definite;
246  const KEduVocWordFlag::Flags artIndef = KEduVocWordFlag::Indefinite;
247 
248  KEduVocArticle article;
249 
250  article.setArticle(def_male->text(), artSing | artDef | KEduVocWordFlag::Masculine);
251  article.setArticle(indef_male->text(), artSing | artIndef | KEduVocWordFlag::Masculine);
252  article.setArticle(def_female->text(), artSing | artDef | KEduVocWordFlag::Feminine);
253  article.setArticle(indef_female->text(), artSing | artIndef | KEduVocWordFlag::Feminine);
254  article.setArticle(def_natural->text(), artSing | artDef | KEduVocWordFlag::Neuter);
255  article.setArticle(indef_natural->text(), artSing | artIndef | KEduVocWordFlag::Neuter);
256 
257 
258  article.setArticle(def_male_plural->text(), artPlur | artDef | KEduVocWordFlag::Masculine);
259  article.setArticle(indef_male_plural->text(), artPlur | artIndef | KEduVocWordFlag::Masculine);
260  article.setArticle(def_female_plural->text(), artPlur | artDef | KEduVocWordFlag::Feminine);
261  article.setArticle(indef_female_plural->text(), artPlur | artIndef | KEduVocWordFlag::Feminine);
262  article.setArticle(def_natural_plural->text(), artPlur | artDef | KEduVocWordFlag::Neuter);
263  article.setArticle(indef_natural_plural->text(), artPlur | artIndef | KEduVocWordFlag::Neuter);
264 
265  m_doc->identifier(m_identifierIndex).setArticle(article);
266 
267  // personal pronouns
268  KEduVocPersonalPronoun pronoun;
269  const KEduVocWordFlags numS = KEduVocWordFlag::Singular;
270  const KEduVocWordFlags numD = KEduVocWordFlag::Dual;
271  const KEduVocWordFlags numP = KEduVocWordFlag::Plural;
272 
273  pronoun.setPersonalPronoun(first_singular->text(), KEduVocWordFlag::First | numS);
274  pronoun.setPersonalPronoun(second_singular->text(), KEduVocWordFlag::Second | numS);
275  pronoun.setPersonalPronoun(thirdM_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numS);
276  pronoun.setPersonalPronoun(thirdF_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numS);
277  pronoun.setPersonalPronoun(thirdN_singular->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numS);
278 
279  pronoun.setPersonalPronoun(dualFirstLineEdit->text(), KEduVocWordFlag::First | numD);
280  pronoun.setPersonalPronoun(dualSecondLineEdit->text(), KEduVocWordFlag::Second | numD);
281  pronoun.setPersonalPronoun(dualThirdMaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numD);
282  pronoun.setPersonalPronoun(dualThirdFemaleLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numD);
283  pronoun.setPersonalPronoun(dualThirdNeutralLineEdit->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numD);
284 
285  pronoun.setPersonalPronoun(first_plural->text(), KEduVocWordFlag::First | numP);
286  pronoun.setPersonalPronoun(second_plural->text(), KEduVocWordFlag::Second | numP);
287  pronoun.setPersonalPronoun(thirdM_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | numP);
288  pronoun.setPersonalPronoun(thirdF_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | numP);
289  pronoun.setPersonalPronoun(thirdN_plural->text(), KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | numP);
290 
291  pronoun.setMaleFemaleDifferent(maleFemaleDifferCheckBox->isChecked());
292  pronoun.setNeutralExists(neutralCheckBox->isChecked());
293  pronoun.setDualExists(dualCheckBox->isChecked());
294 
295  m_doc->identifier(m_identifierIndex).setPersonalPronouns(pronoun);
296 
297 
298  // tenses
299  QList<int> tenseIndex;
300  QStringList tenses;
301 
302  QString str;
303  for (int i = 0; i < (int) tenseList->count(); i++) {
304  str = tenseList->item(i)->text();
305  tenses.append(str.mid(str.indexOf(TENSE_TAG) + QString(TENSE_TAG).length()));
306  }
307 
308  m_doc->identifier(m_identifierIndex).setTenseList(tenses);
309 }
310 
311 
312 void LanguagePropertiesPage::updateCheckBoxes()
313 {
314  bool maleFemale = maleFemaleDifferCheckBox->isChecked();
315  bool neutral = neutralCheckBox->isChecked();
316  bool dual = dualCheckBox->isChecked();
317 
318  neutralCheckBox->setVisible(maleFemale);
319  male_c_label->setVisible(maleFemale);
320  female_c_label->setVisible(maleFemale);
321  thirdM_singular->setVisible(maleFemale);
322  thirdF_singular->setVisible(maleFemale);
323  thirdM_plural->setVisible(maleFemale);
324  thirdF_plural->setVisible(maleFemale);
325 
326  dualLabel->setVisible(dual);
327  dualFirstLineEdit->setVisible(dual);
328  dualSecondLineEdit->setVisible(dual);
329 
330  dualThirdMaleLineEdit->setVisible(dual && maleFemale);
331  dualThirdFemaleLineEdit->setVisible(dual && maleFemale);
332 
333  if (!maleFemale) {
334  natural_c_label->setVisible(false);
335  thirdN_singular->setVisible(true);
336  thirdN_plural->setVisible(true);
337  dualThirdNeutralLineEdit->setVisible(dual);
338  } else {
339  natural_c_label->setVisible(neutral);
340  thirdN_singular->setVisible(neutral);
341  thirdN_plural->setVisible(neutral);
342  dualThirdNeutralLineEdit->setVisible(dual && neutral);
343  }
344 }
345 
346 void LanguagePropertiesPage::localeChanged(const QString & locale)
347 {
348  identifierNameLineEdit->setText(locale);
349 }
350 
351 
352 // ************** TENSES *********************
353 
354 void LanguagePropertiesPage::slotTenseChosen(int index)
355 {
356  m_currentTense = index;
357 }
358 
359 void LanguagePropertiesPage::slotNewTense()
360 {
361  bool ok;
362  QString getTense = KInputDialog::getText(i18n("Tense Name"), i18n("Enter name of tense:"), QString(), &ok, this);
363  if (!ok)
364  return;
365 
366  QString str;
367  int i = tenseList->count() + 1;
368  tenseList->addItem(QString("%1").arg(i, 2).append(TENSE_TAG).append(getTense.simplified()));
369  tenseIndex.append(-(i - 1));
370 
371  m_currentTense = tenseList->count();
372  tenseList->setCurrentRow(i - 1);
373  modifyButton->setEnabled(true);
374  deleteButton->setEnabled(true);
375 }
376 
377 void LanguagePropertiesPage::slotModifyTense()
378 {
379  if (tenseList->count() != 0 && (int) tenseList->count() > m_currentTense) {
380  QString str = tenseList->item(m_currentTense)->text();
381  str = str.mid(str.indexOf(TENSE_TAG) + QString(TENSE_TAG).length());
382 
383  bool ok;
384  QString getTense = KInputDialog::getText(i18n("Tense Name"), i18n("Enter name of tense:"), str, &ok, this);
385  if (!ok)
386  return;
387 
388  int i = m_currentTense + 1;
389  tenseList->item(m_currentTense)->setText(QString("%1").arg(i, 2).append(TENSE_TAG).append(getTense.simplified()));
390  }
391 }
392 
393 void LanguagePropertiesPage::updateListBox(int start)
394 {
395  QString str;
396  for (int i = start; i < (int) tenseList->count(); i++) {
397  str = tenseList->item(i)->text();
398  str = str.mid(str.indexOf(TENSE_TAG) + QString(TENSE_TAG).length());
399  tenseList->item(i)->setText(QString("%1").arg(i + 1, 2).append(TENSE_TAG).append(str));
400  }
401 }
402 
403 void LanguagePropertiesPage::slotDeleteTense()
404 {
405  int act = m_currentTense;
406  if (tenseList->count() > 0 && (int) tenseList->count() > act) {
407 
408  QString t = tenseList->item(act)->text();
409 
410  foreach(KEduVocExpression * exp, m_doc->lesson()->entries(KEduVocLesson::Recursive)) {
411  for (int lang = 0; lang < m_doc->identifierCount(); lang++) {
412  if (exp->translation(lang)->conjugationTenses().contains(t)) {
413  KMessageBox::information(this, i18n("The selected user defined tense could not be deleted\nbecause it is in use."), i18n("Deleting Tense Description"));
414  return;
415  }
416  }
417  }
418 
419  delete tenseList->takeItem(act);
420  tenseIndex.erase(tenseIndex.begin() + act);
421 
422  if ((int) tenseList->count() <= act)
423  act = tenseList->count() - 1;
424  else
425  updateListBox(act); // update items after current
426 
427  if (act >= 0)
428  tenseList->setCurrentRow(act);
429  }
430  modifyButton->setEnabled(tenseList->count() > 0);
431  deleteButton->setEnabled(tenseList->count() > 0);
432 }
433 
434 #include "languagepropertiespage.moc"
TENSE_TAG
#define TENSE_TAG
Definition: languagepropertiespage.cpp:36
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
QWidget
QWidget::setupUi
void setupUi(QWidget *widget)
LanguageSettings::setKeyboardLayout
void setKeyboardLayout(const QString &v)
Set Keyboard layout for this locale.
Definition: languagesettings.h:20
LanguageSettings::setSpellChecker
void setSpellChecker(const QString &v)
Set Spell checker for this language.
Definition: languagesettings.h:45
languagesettings.h
LanguagePropertiesPage::LanguagePropertiesPage
LanguagePropertiesPage(KEduVocDocument *doc, int identifierIndex, QWidget *parent=0)
Definition: languagepropertiespage.cpp:38
QDBusReply
languagepropertiespage.h
LanguagePropertiesPage::setLanguageIdentifierIndex
void setLanguageIdentifierIndex(int newIndex)
Definition: languagepropertiespage.cpp:109
QMap::constBegin
const_iterator constBegin() const
QMap< QString, QString >
QString::simplified
QString simplified() const
DocumentHelper::fetchGrammar
void fetchGrammar(KEduVocDocument *doc, int languageIndex)
Definition: parleydocument.cpp:62
LanguagePropertiesPage::downloadGrammar
void downloadGrammar()
Definition: languagepropertiespage.cpp:119
QDBusReply::isValid
bool isValid() const
QList::erase
iterator erase(iterator pos)
QDBusAbstractInterface::call
QDBusMessage call(const QString &method, const QVariant &arg1, const QVariant &arg2, const QVariant &arg3, const QVariant &arg4, const QVariant &arg5, const QVariant &arg6, const QVariant &arg7, const QVariant &arg8)
QMap::keys
QList< Key > keys() const
parleydocument.h
QWidget::isEnabled
bool isEnabled() const
QList::append
void append(const T &value)
QString::isEmpty
bool isEmpty() const
QMap::constEnd
const_iterator constEnd() const
QString
QList< int >
QStringList
QWidget::locale
QLocale locale() const
QDBusInterface
LanguageSettings
Definition: languagesettings.h:10
QMap::key
const Key key(const T &value) const
QString::mid
QString mid(int position, int n) const
QString::count
int count() const
QString::length
int length() const
QList::prepend
void prepend(const T &value)
LanguageSettings::setPracticeFont
void setPracticeFont(const QFont &v)
Set The font used during practice.
Definition: languagesettings.h:120
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
LanguageSettings::setEditorFont
void setEditorFont(const QFont &v)
Set The font used in the editor.
Definition: languagesettings.h:145
QList::begin
iterator begin()
LanguagePropertiesPage::accept
void accept()
Definition: languagepropertiespage.cpp:211
QMap::value
const T value(const Key &key) const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:15:56 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

parley

Skip menu "parley"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal