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

parley

conjugationwidget.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002     Copyright 2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
00003  ***************************************************************************/
00004 
00005 /***************************************************************************
00006  *                                                                         *
00007  *   This program is free software; you can redistribute it and/or modify  *
00008  *   it under the terms of the GNU General Public License as published by  *
00009  *   the Free Software Foundation; either version 2 of the License, or     *
00010  *   (at your option) any later version.                                   *
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 //     if (m_identifier != identifier) {
00109         m_identifier = identifier;
00110 //         updateVisiblePersons();
00111 //     }
00112 
00113     if (!m_doc || !entry) {
00114         setEnabled(false);
00115         showMakeVerbWidgets();
00116         makeVerbButton->setEnabled(false);
00117         return;
00118     }
00119 
00120     // init tenses per language
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         // if it's a verb already, hide the make verb button and start editing it
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 // hide the other stuff
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     // find an adverb container
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 // tense selection stuff
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     // set up the personal pronouns
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         // add a new tense
00263         m_doc->identifier(m_identifier).setTense(oldTenses.count(), tenseComboBox->currentText());
00264         // put it into the completion
00265         tenseComboBox->completionObject()->addItem(tenseComboBox->currentText());
00266     }
00267 }
00268 
00269 
00270 #include "conjugationwidget.moc"

parley

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

kdeedu

Skip menu "kdeedu"
  •     lib
  • kalzium
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  •   stepcore
Generated for kdeedu by doxygen 1.5.9-20090814
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal