16 #include <keduvocdocument.h>
17 #include <keduvocexpression.h>
18 #include <keduvocwordtype.h>
19 #include <KMessageBox>
21 using namespace Editor;
31 connect(nextTenseButton, SIGNAL(clicked()), SLOT(slotNextTense()));
32 connect(tenseComboBox, SIGNAL(activated(
int)), SLOT(slotTenseSelected(
int)));
33 connect(tenseComboBox->lineEdit(), SIGNAL(editingFinished()), SLOT(tenseEditingFinished()));
35 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Singular]
36 = singularFirstPersonLineEdit;
37 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Singular]
38 = singularSecondPersonLineEdit;
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;
47 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Dual]
48 = dualFirstPersonLineEdit;
49 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Dual]
50 = dualSecondPersonLineEdit;
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;
59 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Plural]
60 = pluralFirstPersonLineEdit;
61 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Plural]
62 = pluralSecondPersonLineEdit;
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;
71 foreach(
const KEduVocWordFlags &index, m_conjugationLineEdits.keys()) {
72 connect(m_conjugationLineEdits.value(index), SIGNAL(textChanged(
const QString&)), SLOT(textChanged(
const QString&)));
77 void ConjugationWidget::textChanged(
const QString& text)
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);
85 void ConjugationWidget::slotTenseSelected(
int sel)
92 void ConjugationWidget::updateEntries()
94 m_lastTenseSelection = tenseComboBox->currentText();
95 KEduVocConjugation& conjugation = m_entry->translation(m_identifier)->conjugation(m_lastTenseSelection);
96 foreach(KEduVocWordFlags flags, m_conjugationLineEdits.keys()) {
98 if (conjugation.keys().contains(flags)) {
99 text = conjugation.conjugation(flags).text();
102 m_conjugationLineEdits[flags]->setText(text);
108 tenseComboBox->clear();
109 tenseComboBox->completionObject()->clear();
114 if (!m_doc || !entry) {
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);
125 tenseComboBox->setCurrentIndex(0);
129 if (entry->translation(m_identifier)->wordType()
130 && entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Verb) {
131 updateVisiblePersons();
139 tenseComboBox->clear();
140 tenseComboBox->completionObject()->clear();
143 void ConjugationWidget::slotNextTense()
145 if (tenseComboBox->currentIndex() + 1 < tenseComboBox->count()) {
146 tenseComboBox->setCurrentIndex(tenseComboBox->currentIndex() + 1);
148 tenseComboBox->setCurrentIndex(0);
153 void ConjugationWidget::updateVisiblePersons()
155 if (m_identifier < 0) {
156 showWidgets(
false,
false,
false,
false,
false,
false,
false);
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();
164 showWidgets(
true,
true, dualVisible,
true, maleFemaleDifferent, maleFemaleDifferent, neutralExists || (!maleFemaleDifferent));
167 KEduVocPersonalPronoun pron = m_doc->identifier(m_identifier).personalPronouns();
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 ));
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 ));
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 ));
188 void ConjugationWidget::showWidgets(
bool tenses,
bool singular,
bool dual,
bool plural,
bool maleVisible,
bool femaleVisible,
bool neuterVisible)
190 tenselabel->setVisible(tenses);
191 tenseComboBox->setVisible(tenses);
192 nextTenseButton->setVisible(tenses);
194 singularLabel->setVisible(singular);
195 singularFirstPersonLabel->setVisible(singular);
196 singularFirstPersonLineEdit->setVisible(singular);
197 singularSecondPersonLabel->setVisible(singular);
198 singularSecondPersonLineEdit->setVisible(singular);
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);
207 dualLabel->setVisible(dual);
208 dualFirstPersonLabel->setVisible(dual);
209 dualFirstPersonLineEdit->setVisible(dual);
210 dualSecondPersonLabel->setVisible(dual);
211 dualSecondPersonLineEdit->setVisible(dual);
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);
220 pluralLabel->setVisible(plural);
221 pluralFirstPersonLabel->setVisible(plural);
222 pluralFirstPersonLineEdit->setVisible(plural);
223 pluralSecondPersonLabel->setVisible(plural);
224 pluralSecondPersonLineEdit->setVisible(plural);
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);
234 void ConjugationWidget::tenseEditingFinished()
236 const QStringList& oldTenses = m_doc->identifier(m_identifier).tenseList();
237 if (!oldTenses.contains(tenseComboBox->currentText())) {
239 m_doc->identifier(m_identifier).setTense(oldTenses.count(), tenseComboBox->currentText());
241 tenseComboBox->completionObject()->addItem(tenseComboBox->currentText());
246 #include "conjugationwidget.moc"