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

parley

declensionwidget.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 "declensionwidget.h"
00015 
00016 #include <keduvocdocument.h>
00017 #include <keduvocexpression.h>
00018 #include <keduvocwordtype.h>
00019 #include <keduvocdeclension.h>
00020 
00021 #include <KDebug>
00022 #include <KMessageBox>
00023 
00024 DeclensionWidget::DeclensionWidget(QWidget *parent) : QWidget(parent)
00025 {
00026     m_doc = 0;
00027     m_entry = 0;
00028     m_identifier = -1;
00029 
00030     setupUi(this);
00031 
00032     connect(makeNounButton, SIGNAL(clicked()), SLOT(slotMakeNoun()));
00033 
00034     showMakeNounWidgets();
00035     makeNounButton->setEnabled(false);
00036 
00037     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Nominative] = singular_1;
00038 
00039     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Genitive] = singular_2;
00040 
00041     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Dative] = singular_3;
00042 
00043     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Accusative] = singular_4;
00044 
00045     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Ablative] = singular_5;
00046 
00047     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Locative] = singular_6;
00048 
00049     m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Vocative] = singular_7;
00050 
00051 
00052     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Nominative] = dual_1;
00053 
00054     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Genitive] = dual_2;
00055 
00056     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Dative] = dual_3;
00057 
00058     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Accusative] = dual_4;
00059 
00060     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Ablative] = dual_5;
00061 
00062     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Locative] = dual_6;
00063 
00064     m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Vocative] = dual_7;
00065 
00066 
00067     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Nominative] = plural_1;
00068 
00069     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Genitive] = plural_2;
00070 
00071     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Dative] = plural_3;
00072 
00073     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Accusative] = plural_4;
00074 
00075     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Ablative] = plural_5;
00076 
00077     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Locative] = plural_6;
00078 
00079     m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Vocative] = plural_7;
00080 
00081     foreach(int index, m_DeclensionLineEdits.keys()) {
00082         connect(m_DeclensionLineEdits.value(index), SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)));
00083     }
00084 }
00085 
00086 
00087 void DeclensionWidget::textChanged(const QString& text)
00088 {
00089     int valueIndex = m_DeclensionLineEdits.values().indexOf(qobject_cast<KLineEdit*>(sender()));
00090     int key = m_DeclensionLineEdits.keys().value(valueIndex);
00091     m_entry->translation(m_identifier)->declension()->setDeclension(text, (KEduVocWordFlag::Flags)key);
00092     emit sigModified();
00093 }
00094 
00095 
00096 void DeclensionWidget::updateEntries()
00097 {
00098     foreach(int key, m_DeclensionLineEdits.keys()) {
00099         m_DeclensionLineEdits.value(key)->setText(m_entry->translation(m_identifier)->declension()->declension((KEduVocWordFlag::Flags)key).text());
00100     }
00101 }
00102 
00103 void DeclensionWidget::setTranslation(KEduVocExpression * entry, int identifier)
00104 {
00105     if (!m_doc) {
00106         return;
00107     }
00108 
00109     m_entry = entry;
00110     if (m_identifier != identifier) {
00111         m_identifier = identifier;
00112         updateVisiblePersons();
00113     }
00114 
00115     if (!entry) {
00116         setEnabled(false);
00117         showMakeNounWidgets();
00118         makeNounButton->setEnabled(false);
00119         return;
00120     }
00121 
00122     setEnabled(true);
00123     if (entry->translation(m_identifier)->wordType()) {
00124         KEduVocWordFlags wordType = entry->translation(m_identifier)->wordType()->wordType();
00125         if (wordType & KEduVocWordFlag::Noun) {
00126 
00127             // we create declensions on demand. if empty it will simply not be saved.
00128             // very little memory overhead, comfy to use ;)
00129             if (!entry->translation(m_identifier)->declension()) {
00130                 entry->translation(m_identifier)->setDeclension(new KEduVocDeclension);
00131             }
00132 
00133             // if it's a noun already, hide the make noun button and start editing it
00134             showDeclensionEditWidgets();
00135             updateEntries();
00136         }
00137     } else {
00138         makeNounButton->setEnabled(true);
00139         showMakeNounWidgets();
00140         makeNounButton->setText(i18n("\"%1\" is a noun", m_entry->translation(m_identifier)->text()));
00141 // hide the other stuff
00142     }
00143 }
00144 
00145 void DeclensionWidget::setDocument(KEduVocDocument * doc)
00146 {
00147     m_doc = doc;
00148 }
00149 
00150 void DeclensionWidget::slotMakeNoun()
00151 {
00152     if(!m_doc) {
00153         return;
00154     }
00155 
00157 
00158     // find a noun container
00159     KEduVocWordType* container = m_doc->wordTypeContainer()->childOfType(KEduVocWordFlag::Noun);
00160     if (container) {
00161         m_entry->translation(m_identifier)->setWordType(container);
00162         showDeclensionEditWidgets();
00163     } else {
00165         KMessageBox::information(this, i18n("Could not determine word type of nouns"));
00166     }
00167     setTranslation(m_entry, m_identifier);
00168 }
00169 
00170 void DeclensionWidget::showMakeNounWidgets()
00171 {
00172     makeNounButton->setVisible(true);
00173     declensionGroupBox->setVisible(false);
00174 }
00175 
00176 void DeclensionWidget::showDeclensionEditWidgets()
00177 {
00178     makeNounButton->setVisible(false);
00179     declensionGroupBox->setVisible(true);
00180 }
00181 
00182 void DeclensionWidget::updateVisiblePersons()
00183 {
00184     /*
00185     if (m_identifier < 0) {
00186         singularGroupBox->setVisible(false);
00187         pluralGroupBox->setVisible(false);
00188         dualGroupBox->setVisible(false);
00189         return;
00190     }
00191 
00192     singularGroupBox->setVisible(true);
00193     pluralGroupBox->setVisible(true);
00194     dualGroupBox->setVisible( m_doc->identifier(m_identifier).personalPronouns().dualExists() );
00195 
00196     bool maleFemaleDifferent = m_doc->identifier(m_identifier).personalPronouns().maleFemaleDifferent();
00197 
00198     singularThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00199     singularThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00200     singularThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00201     singularThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00202 
00203     dualThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00204     dualThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00205     dualThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00206     dualThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00207 
00208     pluralThirdMalePersonLabel->setVisible(maleFemaleDifferent);
00209     pluralThirdMalePersonLineEdit->setVisible(maleFemaleDifferent);
00210     pluralThirdFemalePersonLabel->setVisible(maleFemaleDifferent);
00211     pluralThirdFemalePersonLineEdit->setVisible(maleFemaleDifferent);
00212 
00213     if ( !maleFemaleDifferent ) {
00214         singularThirdNeutralPersonLabel->setVisible(true);
00215         singularThirdNeutralPersonLineEdit->setVisible(true);
00216         dualThirdNeutralPersonLabel->setVisible(true);
00217         dualThirdNeutralPersonLineEdit->setVisible(true);
00218         pluralThirdNeutralPersonLabel->setVisible(true);
00219         pluralThirdNeutralPersonLineEdit->setVisible(true);
00220     } else {
00221         bool neutralExists = m_doc->identifier(m_identifier).personalPronouns().neutralExists();
00222         singularThirdNeutralPersonLabel->setVisible(neutralExists);
00223         singularThirdNeutralPersonLineEdit->setVisible(neutralExists);
00224         dualThirdNeutralPersonLabel->setVisible(neutralExists);
00225         dualThirdNeutralPersonLineEdit->setVisible(neutralExists);
00226         pluralThirdNeutralPersonLabel->setVisible(neutralExists);
00227         pluralThirdNeutralPersonLineEdit->setVisible(neutralExists);
00228     }
00229 
00230     // set up the personal pronouns
00231     KEduVocPersonalPronoun pron = m_doc->identifier(m_identifier).personalPronouns();
00232 
00233     singularFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First, KEduVocWordFlag::Singular ));
00234     singularSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second, KEduVocWordFlag::Singular ));
00235     singularThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdMale, KEduVocWordFlag::Singular ));
00236     singularThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdFemale, KEduVocWordFlag::Singular ));
00237     singularThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdNeutralCommon, KEduVocWordFlag::Singular ));
00238 
00239     dualFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First, KEduVocWordFlag::Dual ));
00240     dualSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second, KEduVocWordFlag::Dual ));
00241     dualThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdMale, KEduVocWordFlag::Dual ));
00242     dualThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdFemale, KEduVocWordFlag::Dual ));
00243     dualThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdNeutralCommon, KEduVocWordFlag::Dual ));
00244 
00245     pluralFirstPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::First, KEduVocWordFlag::Plural ));
00246     pluralSecondPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::Second, KEduVocWordFlag::Plural ));
00247     pluralThirdMalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdMale, KEduVocWordFlag::Plural ));
00248     pluralThirdFemalePersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdFemale, KEduVocWordFlag::Plural ));
00249     pluralThirdNeutralPersonLabel->setText(pron.personalPronoun( KEduVocWordFlag::ThirdNeutralCommon, KEduVocWordFlag::Plural ));
00250     */
00251 }
00252 
00253 
00254 #include "declensionwidget.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