parley
conjugationwidget.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "conjugationwidget.h"
00015
00016 #include <keduvocdocument.h>
00017 #include <keduvocexpression.h>
00018 #include <keduvocwordtype.h>
00019 #include <KDebug>
00020 #include <KMessageBox>
00021
00022 ConjugationWidget::ConjugationWidget(QWidget *parent) : QWidget(parent)
00023 {
00024 m_doc = 0;
00025 m_entry = 0;
00026 m_identifier = -1;
00027
00028 setupUi(this);
00029
00030 connect(makeVerbButton, SIGNAL(clicked()), SLOT(slotMakeVerb()));
00031 connect(nextTenseButton, SIGNAL(clicked()), SLOT(slotNextTense()));
00032 connect(tenseComboBox, SIGNAL(activated(int)), SLOT(slotTenseSelected(int)));
00033 connect(tenseComboBox->lineEdit(), SIGNAL(editingFinished()), SLOT(tenseEditingFinished()));
00034
00035 showMakeVerbWidgets();
00036 makeVerbButton->setEnabled(false);
00037
00038 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Singular]
00039 = singularFirstPersonLineEdit;
00040 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Singular]
00041 = singularSecondPersonLineEdit;
00042
00043 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Singular]
00044 = singularThirdMalePersonLineEdit;
00045 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Singular]
00046 = singularThirdFemalePersonLineEdit;
00047 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Singular]
00048 = singularThirdNeutralPersonLineEdit;
00049
00050 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Dual]
00051 = dualFirstPersonLineEdit;
00052 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Dual]
00053 = dualSecondPersonLineEdit;
00054
00055 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Dual]
00056 = dualThirdMalePersonLineEdit;
00057 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Dual]
00058 = dualThirdFemalePersonLineEdit;
00059 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Dual]
00060 = dualThirdNeutralPersonLineEdit;
00061
00062 m_conjugationLineEdits[KEduVocWordFlag::First | KEduVocWordFlag::Plural]
00063 = pluralFirstPersonLineEdit;
00064 m_conjugationLineEdits[KEduVocWordFlag::Second | KEduVocWordFlag::Plural]
00065 = pluralSecondPersonLineEdit;
00066
00067 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Masculine | KEduVocWordFlag::Plural]
00068 = pluralThirdMalePersonLineEdit;
00069 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Feminine | KEduVocWordFlag::Plural]
00070 = pluralThirdFemalePersonLineEdit;
00071 m_conjugationLineEdits[KEduVocWordFlag::Third | KEduVocWordFlag::Neuter | KEduVocWordFlag::Plural]
00072 = pluralThirdNeutralPersonLineEdit;
00073
00074 foreach(const KEduVocWordFlags &index, m_conjugationLineEdits.keys()) {
00075 connect(m_conjugationLineEdits.value(index), SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)));
00076 }
00077 }
00078
00079
00080 void ConjugationWidget::textChanged(const QString& text)
00081 {
00082 int valueIndex = m_conjugationLineEdits.values().indexOf(qobject_cast<KLineEdit*>(sender()));
00083 int key = m_conjugationLineEdits.keys().value(valueIndex);
00084 m_entry->translation(m_identifier)->conjugation(tenseComboBox->currentText()).setConjugation(text, (KEduVocWordFlag::Flags)key);
00085 }
00086
00087
00088 void ConjugationWidget::slotTenseSelected(int sel)
00089 {
00090 Q_UNUSED(sel);
00091 updateEntries();
00092 }
00093
00094
00095 void ConjugationWidget::updateEntries()
00096 {
00097 foreach(int key, m_conjugationLineEdits.keys()) {
00098 m_conjugationLineEdits.value((KEduVocWordFlag::Flags)key)->setText(m_entry->translation(m_identifier)->conjugation(tenseComboBox->currentText()).conjugation((KEduVocWordFlag::Flags)key).text());
00099 }
00100 }
00101
00102 void ConjugationWidget::setTranslation(KEduVocExpression * entry, int identifier)
00103 {
00104 tenseComboBox->clear();
00105 tenseComboBox->completionObject()->clear();
00106
00107 m_entry = entry;
00108
00109 m_identifier = identifier;
00110
00111
00112
00113 if (!m_doc || !entry) {
00114 setEnabled(false);
00115 showMakeVerbWidgets();
00116 makeVerbButton->setEnabled(false);
00117 return;
00118 }
00119
00120
00121 tenseComboBox->addItems(m_doc->identifier(identifier).tenseList());
00122 tenseComboBox->completionObject()->insertItems(m_doc->identifier(identifier).tenseList());
00123 tenseComboBox->setCurrentIndex(0);
00124
00125 setEnabled(true);
00126 if (entry->translation(m_identifier)->wordType()
00127 && entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Verb) {
00128
00129 showConjugationEditWidgets();
00130 updateEntries();
00131 updateVisiblePersons();
00132 } else {
00133 makeVerbButton->setEnabled(true);
00134 showMakeVerbWidgets();
00135 makeVerbButton->setText(i18n("\"%1\" is a verb", m_entry->translation(m_identifier)->text()));
00136
00137 }
00138 }
00139
00140 void ConjugationWidget::setDocument(KEduVocDocument * doc)
00141 {
00142 m_doc = doc;
00143 tenseComboBox->clear();
00144 tenseComboBox->completionObject()->clear();
00145 }
00146
00147 void ConjugationWidget::slotNextTense()
00148 {
00149 if (tenseComboBox->currentIndex() + 1 < tenseComboBox->count()) {
00150 tenseComboBox->setCurrentIndex(tenseComboBox->currentIndex() + 1);
00151 } else {
00152 tenseComboBox->setCurrentIndex(0);
00153 }
00154 updateEntries();
00155 }
00156
00157 void ConjugationWidget::slotMakeVerb()
00158 {
00159 if(!m_doc) {
00160 return;
00161 }
00162
00163
00164 KEduVocWordType* container = m_doc->wordTypeContainer()->childOfType(KEduVocWordFlag::Verb);
00165 if (container) {
00166 m_entry->translation(m_identifier)->setWordType(container);
00167 showConjugationEditWidgets();
00168 } else {
00170 KMessageBox::information(this, i18n("Could not determine word type of verbs"));
00171 }
00172 setTranslation(m_entry, m_identifier);
00173 }
00174
00175 void ConjugationWidget::showMakeVerbWidgets()
00176 {
00177 makeVerbButton->setVisible(true);
00178
00179 singularGroupBox->setVisible(false);
00180 pluralGroupBox->setVisible(false);
00181 dualGroupBox->setVisible(false);
00182 }
00183
00184 void ConjugationWidget::showConjugationEditWidgets()
00185 {
00186 makeVerbButton->setVisible(false);
00187 }
00188
00189 void ConjugationWidget::updateVisiblePersons()
00190 {
00191 if (m_identifier < 0) {
00192 singularGroupBox->setVisible(false);
00193 pluralGroupBox->setVisible(false);
00194 dualGroupBox->setVisible(false);
00195 return;
00196 }
00197
00198 singularGroupBox->setVisible(true);
00199 pluralGroupBox->setVisible(true);
00200 dualGroupBox->setVisible( m_doc->identifier(m_identifier).personalPronouns().dualExists() );
00201
00202 bool maleFemaleDifferent = m_doc->identifier(m_identifier).personalPronouns().maleFemaleDifferent();
00203
00204 singularThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00205 singularThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00206 singularThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00207 singularThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00208
00209 dualThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00210 dualThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00211 dualThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00212 dualThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00213
00214 pluralThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00215 pluralThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00216 pluralThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00217 pluralThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00218
00219 if ( !maleFemaleDifferent ) {
00220 singularThirdNeutralPersonLabel->setVisible(true);
00221 singularThirdNeutralPersonLineEdit->setVisible(true);
00222 dualThirdNeutralPersonLabel->setVisible(true);
00223 dualThirdNeutralPersonLineEdit->setVisible(true);
00224 pluralThirdNeutralPersonLabel->setVisible(true);
00225 pluralThirdNeutralPersonLineEdit->setVisible(true);
00226 } else {
00227 bool neutralExists = m_doc->identifier(m_identifier).personalPronouns().neutralExists();
00228 singularThirdNeutralPersonLabel->setVisible(neutralExists);
00229 singularThirdNeutralPersonLineEdit->setVisible(neutralExists);
00230 dualThirdNeutralPersonLabel->setVisible(neutralExists);
00231 dualThirdNeutralPersonLineEdit->setVisible(neutralExists);
00232 pluralThirdNeutralPersonLabel->setVisible(neutralExists);
00233 pluralThirdNeutralPersonLineEdit->setVisible(neutralExists);
00234 }
00235
00236
00237 KEduVocPersonalPronoun pron = m_doc->identifier(m_identifier).personalPronouns();
00238
00239 singularFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First | KEduVocWordFlag::Singular ));
00240 singularSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second | KEduVocWordFlag::Singular ));
00241 singularThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine| KEduVocWordFlag::Singular ));
00242 singularThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine| KEduVocWordFlag::Singular ));
00243 singularThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter| KEduVocWordFlag::Singular ));
00244
00245 dualFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First| KEduVocWordFlag::Dual ));
00246 dualSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second| KEduVocWordFlag::Dual ));
00247 dualThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine| KEduVocWordFlag::Dual ));
00248 dualThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine| KEduVocWordFlag::Dual ));
00249 dualThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter| KEduVocWordFlag::Dual ));
00250
00251 pluralFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First| KEduVocWordFlag::Plural ));
00252 pluralSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second| KEduVocWordFlag::Plural ));
00253 pluralThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Masculine| KEduVocWordFlag::Plural ));
00254 pluralThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Feminine| KEduVocWordFlag::Plural ));
00255 pluralThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Third | KEduVocWordFlag::Neuter| KEduVocWordFlag::Plural ));
00256 }
00257
00258 void ConjugationWidget::tenseEditingFinished()
00259 {
00260 const QStringList& oldTenses = m_doc->identifier(m_identifier).tenseList();
00261 if (!oldTenses.contains(tenseComboBox->currentText())) {
00262
00263 m_doc->identifier(m_identifier).setTense(oldTenses.count(), tenseComboBox->currentText());
00264
00265 tenseComboBox->completionObject()->addItem(tenseComboBox->currentText());
00266 }
00267 }
00268
00269
00270 #include "conjugationwidget.moc"