• 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
  • editor
conjugationwidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
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 "conjugationwidget.h"
15 
16 #include <keduvocdocument.h>
17 #include <keduvocexpression.h>
18 #include <keduvocwordtype.h>
19 #include <KMessageBox>
20 
21 using namespace Editor;
22 
23 ConjugationWidget::ConjugationWidget(QWidget *parent) : QWidget(parent)
24 {
25  m_doc = 0;
26  m_entry = 0;
27  m_identifier = -1;
28 
29  setupUi(this);
30 
31  connect(nextTenseButton, SIGNAL(clicked()), SLOT(slotNextTense()));
32  connect(tenseComboBox, SIGNAL(activated(int)), SLOT(slotTenseSelected(int)));
33  connect(tenseComboBox->lineEdit(), SIGNAL(editingFinished()), SLOT(tenseEditingFinished()));
34 
35  m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Singular]
36  = singularFirstPersonLineEdit;
37  m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Singular]
38  = singularSecondPersonLineEdit;
39 
40  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Singular]
41  = singularThirdMalePersonLineEdit;
42  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Singular]
43  = singularThirdFemalePersonLineEdit;
44  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Singular]
45  = singularThirdNeutralPersonLineEdit;
46 
47  m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Dual]
48  = dualFirstPersonLineEdit;
49  m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Dual]
50  = dualSecondPersonLineEdit;
51 
52  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Dual]
53  = dualThirdMalePersonLineEdit;
54  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Dual]
55  = dualThirdFemalePersonLineEdit;
56  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Dual]
57  = dualThirdNeutralPersonLineEdit;
58 
59  m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Plural]
60  = pluralFirstPersonLineEdit;
61  m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Plural]
62  = pluralSecondPersonLineEdit;
63 
64  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Plural]
65  = pluralThirdMalePersonLineEdit;
66  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Plural]
67  = pluralThirdFemalePersonLineEdit;
68  m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Plural]
69  = pluralThirdNeutralPersonLineEdit;
70 
71  foreach(const KEduVocWordFlags & index, m_conjugationLineEdits.keys()) {
72  connect(m_conjugationLineEdits.value(index), SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)));
73  }
74 }
75 
76 
77 void ConjugationWidget::textChanged(const QString& text)
78 {
79  int valueIndex = m_conjugationLineEdits.values().indexOf(qobject_cast<KLineEdit*>(sender()));
80  int key = m_conjugationLineEdits.keys().value(valueIndex);
81  m_entry->translation(m_identifier)->conjugation(tenseComboBox->currentText()).setConjugation(text, (KEduVocWordFlag::Flags)key);
82 }
83 
84 
85 void ConjugationWidget::slotTenseSelected(int sel)
86 {
87  Q_UNUSED(sel);
88  updateEntries();
89 }
90 
91 
92 void ConjugationWidget::updateEntries()
93 {
94  m_lastTenseSelection = tenseComboBox->currentText();
95  KEduVocConjugation& conjugation = m_entry->translation(m_identifier)->conjugation(m_lastTenseSelection);
96  foreach(KEduVocWordFlags flags, m_conjugationLineEdits.keys()) {
97  QString text;
98  if (conjugation.keys().contains(flags)) {
99  text = conjugation.conjugation(flags).text();
100  }
101 
102  m_conjugationLineEdits[flags]->setText(text);
103  }
104 }
105 
106 void ConjugationWidget::setTranslation(KEduVocExpression * entry, int identifier)
107 {
108  tenseComboBox->clear();
109  tenseComboBox->completionObject()->clear();
110 
111  m_entry = entry;
112  m_identifier = identifier;
113 
114  if (!m_doc || !entry) {
115  setEnabled(false);
116  return;
117  }
118 
119  // init tenses per language
120  tenseComboBox->addItems(m_doc->identifier(identifier).tenseList());
121  tenseComboBox->completionObject()->insertItems(m_doc->identifier(identifier).tenseList());
122  if (tenseComboBox->contains(m_lastTenseSelection)) {
123  tenseComboBox->setCurrentItem(m_lastTenseSelection);
124  } else {
125  tenseComboBox->setCurrentIndex(0);
126  }
127 
128  setEnabled(true);
129  if (entry->translation(m_identifier)->wordType()
130  && entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Verb) {
131  updateVisiblePersons();
132  updateEntries();
133  }
134 }
135 
136 void ConjugationWidget::setDocument(KEduVocDocument * doc)
137 {
138  m_doc = doc;
139  tenseComboBox->clear();
140  tenseComboBox->completionObject()->clear();
141 }
142 
143 void ConjugationWidget::slotNextTense()
144 {
145  if (tenseComboBox->currentIndex() + 1 < tenseComboBox->count()) {
146  tenseComboBox->setCurrentIndex(tenseComboBox->currentIndex() + 1);
147  } else {
148  tenseComboBox->setCurrentIndex(0);
149  }
150  updateEntries();
151 }
152 
153 void ConjugationWidget::updateVisiblePersons()
154 {
155  if (m_identifier < 0) {
156  showWidgets(false, false, false, false, false, false, false);
157  return;
158  }
159 
160  bool dualVisible = m_doc->identifier(m_identifier).personalPronouns().dualExists();
161  bool maleFemaleDifferent = m_doc->identifier(m_identifier).personalPronouns().maleFemaleDifferent();
162  bool neutralExists = m_doc->identifier(m_identifier).personalPronouns().neutralExists();
163 
164  showWidgets(true, true, dualVisible, true, maleFemaleDifferent, maleFemaleDifferent, neutralExists || (!maleFemaleDifferent));
165 
166  // set up the personal pronouns
167  KEduVocPersonalPronoun pron = m_doc->identifier(m_identifier).personalPronouns();
168 
169  singularFirstPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::First | KEduVocWordFlag::Singular));
170  singularSecondPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Second | KEduVocWordFlag::Singular));
171  singularThirdMalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Singular));
172  singularThirdFemalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Singular));
173  singularThirdNeutralPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Singular));
174 
175  dualFirstPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::First | KEduVocWordFlag::Dual));
176  dualSecondPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Second | KEduVocWordFlag::Dual));
177  dualThirdMalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Dual));
178  dualThirdFemalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Dual));
179  dualThirdNeutralPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Dual));
180 
181  pluralFirstPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::First | KEduVocWordFlag::Plural));
182  pluralSecondPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Second | KEduVocWordFlag::Plural));
183  pluralThirdMalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Plural));
184  pluralThirdFemalePersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Plural));
185  pluralThirdNeutralPersonLabel->setText(pron.personalPronoun(KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Plural));
186 }
187 
188 void ConjugationWidget::showWidgets(bool tenses, bool singular, bool dual, bool plural, bool maleVisible, bool femaleVisible, bool neuterVisible)
189 {
190  tenselabel->setVisible(tenses);
191  tenseComboBox->setVisible(tenses);
192  nextTenseButton->setVisible(tenses);
193 
194  singularLabel->setVisible(singular);
195  singularFirstPersonLabel->setVisible(singular);
196  singularFirstPersonLineEdit->setVisible(singular);
197  singularSecondPersonLabel->setVisible(singular);
198  singularSecondPersonLineEdit->setVisible(singular);
199 
200  singularThirdMalePersonLabel->setVisible(singular && maleVisible);
201  singularThirdMalePersonLineEdit->setVisible(singular && maleVisible);
202  singularThirdFemalePersonLabel->setVisible(singular && femaleVisible);
203  singularThirdFemalePersonLineEdit->setVisible(singular && femaleVisible);
204  singularThirdNeutralPersonLabel->setVisible(singular && neuterVisible);
205  singularThirdNeutralPersonLineEdit->setVisible(singular && neuterVisible);
206 
207  dualLabel->setVisible(dual);
208  dualFirstPersonLabel->setVisible(dual);
209  dualFirstPersonLineEdit->setVisible(dual);
210  dualSecondPersonLabel->setVisible(dual);
211  dualSecondPersonLineEdit->setVisible(dual);
212 
213  dualThirdMalePersonLabel->setVisible(dual && maleVisible);
214  dualThirdMalePersonLineEdit->setVisible(dual && maleVisible);
215  dualThirdFemalePersonLabel->setVisible(dual && femaleVisible);
216  dualThirdFemalePersonLineEdit->setVisible(dual && femaleVisible);
217  dualThirdNeutralPersonLabel->setVisible(dual && neuterVisible);
218  dualThirdNeutralPersonLineEdit->setVisible(dual && neuterVisible);
219 
220  pluralLabel->setVisible(plural);
221  pluralFirstPersonLabel->setVisible(plural);
222  pluralFirstPersonLineEdit->setVisible(plural);
223  pluralSecondPersonLabel->setVisible(plural);
224  pluralSecondPersonLineEdit->setVisible(plural);
225 
226  pluralThirdMalePersonLabel->setVisible(plural && maleVisible);
227  pluralThirdMalePersonLineEdit->setVisible(plural && maleVisible);
228  pluralThirdFemalePersonLabel->setVisible(plural && femaleVisible);
229  pluralThirdFemalePersonLineEdit->setVisible(plural && femaleVisible);
230  pluralThirdNeutralPersonLabel->setVisible(plural && neuterVisible);
231  pluralThirdNeutralPersonLineEdit->setVisible(plural && neuterVisible);
232 }
233 
234 void ConjugationWidget::tenseEditingFinished()
235 {
236  const QStringList& oldTenses = m_doc->identifier(m_identifier).tenseList();
237  if (!oldTenses.contains(tenseComboBox->currentText())) {
238  // add a new tense
239  m_doc->identifier(m_identifier).setTense(oldTenses.count(), tenseComboBox->currentText());
240  // put it into the completion
241  tenseComboBox->completionObject()->addItem(tenseComboBox->currentText());
242  }
243 }
244 
245 
246 #include "conjugationwidget.moc"
QWidget
QWidget::setupUi
void setupUi(QWidget *widget)
identifier
const char * identifier
Definition: imagecache.cpp:23
QMap::values
QList< T > values() const
QObject::sender
QObject * sender() const
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
Editor::ConjugationWidget::setDocument
void setDocument(KEduVocDocument *doc)
Definition: conjugationwidget.cpp:136
conjugationwidget.h
QMap::keys
QList< Key > keys() const
QWidget::setEnabled
void setEnabled(bool)
QList::count
int count(const T &value) const
Editor::ConjugationWidget::ConjugationWidget
ConjugationWidget(QWidget *parent=0)
Definition: conjugationwidget.cpp:23
QString
QStringList
Editor::ConjugationWidget::setTranslation
void setTranslation(KEduVocExpression *entry, int translation)
Definition: conjugationwidget.cpp:106
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
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