• 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
declensionwidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
3  Copyright 2011 Jan Gerrit Marker <jangerrit@weiler-marker.com>
4  ***************************************************************************/
5 
6 /***************************************************************************
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  ***************************************************************************/
14 
15 #include "declensionwidget.h"
16 
17 #include <keduvocdocument.h>
18 #include <keduvocexpression.h>
19 #include <keduvocwordtype.h>
20 #include <keduvocdeclension.h>
21 
22 #include <KMessageBox>
23 
24 using namespace Editor;
25 
26 DeclensionWidget::DeclensionWidget(QWidget *parent) : QWidget(parent)
27 {
28  m_doc = 0;
29  m_entry = 0;
30  m_identifier = -1;
31 
32  setupUi(this);
33 
34  numberSelection->setItemData(0, KEduVocWordFlag::Singular);
35  numberSelection->setItemData(1, KEduVocWordFlag::Dual);
36  numberSelection->setItemData(2, KEduVocWordFlag::Plural);
37  connect(numberSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(updateEntries()));
38 
39  connect(nextButton, SIGNAL(clicked(bool)), this, SLOT(nextNumber()));
40 
41  setupLineEdits();
42 
43  foreach(int index, m_DeclensionLineEdits.keys()) {
44  connect(m_DeclensionLineEdits.value(index), SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)));
45  }
46 }
47 
48 
49 void DeclensionWidget::textChanged(const QString& text)
50 {
51  int valueIndex = m_DeclensionLineEdits.values().indexOf(qobject_cast<KLineEdit*>(sender()));
52  int key = m_DeclensionLineEdits.keys().value(valueIndex) | currentAdditionalWordFlag();
53  m_entry->translation(m_identifier)->declension()->setDeclension(text, (KEduVocWordFlag::Flags)key);
54  emit sigModified();
55 }
56 
57 
58 void DeclensionWidget::updateEntries()
59 {
60  foreach(int key, m_DeclensionLineEdits.keys()) {
61  m_DeclensionLineEdits.value(key)->setText(m_entry->translation(m_identifier)->declension()->declension((KEduVocWordFlag::Flags)(key | currentAdditionalWordFlag())).text());
62  }
63 }
64 
65 void DeclensionWidget::setTranslation(KEduVocExpression * entry, int identifier)
66 {
67  if (!m_doc) {
68  return;
69  }
70 
71  m_entry = entry;
72  if (m_identifier != identifier) {
73  m_identifier = identifier;
74  }
75 
76  if (!entry) {
77  setEnabled(false);
78  return;
79  }
80 
81  setupLineEdits();
82 
83  setEnabled(true);
84  if (entry->translation(m_identifier)->wordType()) {
85  KEduVocWordFlags wordType = entry->translation(m_identifier)->wordType()->wordType();
86  if (wordType & KEduVocWordFlag::Noun || wordType & KEduVocWordFlag::Adjective) {
87 
88  // we create declensions on demand. if empty it will simply not be saved.
89  // very little memory overhead, comfy to use ;)
90  if (!entry->translation(m_identifier)->declension()) {
91  entry->translation(m_identifier)->setDeclension(new KEduVocDeclension);
92  }
93 
94  updateEntries();
95  }
96  }
97 }
98 
99 void DeclensionWidget::setDocument(KEduVocDocument * doc)
100 {
101  m_doc = doc;
102 }
103 
104 int DeclensionWidget::currentAdditionalWordFlag()
105 {
106  if (m_entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Noun) {
108  if (m_entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Feminine)
109  return KEduVocWordFlag::Feminine;
110  if (m_entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Masculine)
111  return KEduVocWordFlag::Masculine;
112  if (m_entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Neuter)
113  return KEduVocWordFlag::Neuter;
114  }
115 
116  return numberSelection->itemData(numberSelection->currentIndex()).toInt();
117 }
118 
119 void DeclensionWidget::nextNumber()
120 {
121  int newIndex = numberSelection->currentIndex() + 1;
122  if (newIndex >= numberSelection->count())
123  newIndex = 0;
124 
125  numberSelection->setCurrentIndex(newIndex);
126 }
127 
128 void DeclensionWidget::setupLineEdits()
129 {
130  m_DeclensionLineEdits.clear();
131 
132  if (m_entry == 0 || !m_entry->translation(m_identifier) || !m_entry->translation(m_identifier)->wordType()
133  || m_entry->translation(m_identifier)->wordType()->wordType() & KEduVocWordFlag::Noun) {
134  label_3->setText(i18n("Singular"));
135  label_4->setText(i18n("Dual"));
136  label_5->setText(i18n("Plural"));
137 
138  /* Hide the GUI elements which are needed to switch the number */
139  for (int i = 0; i < numberLayout->count(); ++i) {
140  numberLayout->itemAt(i)->widget()->hide();
141  }
142 
143  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Nominative] = masculine_1;
144  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Genitive] = masculine_2;
145  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Dative] = masculine_3;
146  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Accusative] = masculine_4;
147  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Ablative] = masculine_5;
148  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Locative] = masculine_6;
149  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Vocative] = masculine_7;
150 
151  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Nominative] = feminine_1;
152  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Genitive] = feminine_2;
153  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Dative] = feminine_3;
154  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Accusative] = feminine_4;
155  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Ablative] = feminine_5;
156  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Locative] = feminine_6;
157  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Vocative] = feminine_7;
158 
159  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Nominative] = neuter_1;
160  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Genitive] = neuter_2;
161  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Dative] = neuter_3;
162  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Accusative] = neuter_4;
163  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Ablative] = neuter_5;
164  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Locative] = neuter_6;
165  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Vocative] = neuter_7;
166  } else {
167  label_3->setText(i18n("Masculine"));
168  label_4->setText(i18n("Feminine"));
169  label_5->setText(i18n("Neuter"));
170 
171  /* Show the GUI elements which are needed to switch the number */
172  for (int i = 0; i < numberLayout->count(); ++i) {
173  numberLayout->itemAt(i)->widget()->show();
174  }
175 
176  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Nominative] = masculine_1;
177  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Genitive] = masculine_2;
178  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Dative] = masculine_3;
179  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Accusative] = masculine_4;
180  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Ablative] = masculine_5;
181  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Locative] = masculine_6;
182  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Vocative] = masculine_7;
183 
184  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Nominative] = feminine_1;
185  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Genitive] = feminine_2;
186  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Dative] = feminine_3;
187  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Accusative] = feminine_4;
188  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Ablative] = feminine_5;
189  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Locative] = feminine_6;
190  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Vocative] = feminine_7;
191 
192  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Nominative] = neuter_1;
193  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Genitive] = neuter_2;
194  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Dative] = neuter_3;
195  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Accusative] = neuter_4;
196  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Ablative] = neuter_5;
197  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Locative] = neuter_6;
198  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Vocative] = neuter_7;
199  }
200 }
201 
202 #include "declensionwidget.moc"
Editor::DeclensionWidget::nextNumber
void nextNumber()
Definition: declensionwidget.cpp:119
Editor::DeclensionWidget::sigModified
void sigModified()
Editor::DeclensionWidget::setDocument
void setDocument(KEduVocDocument *doc)
Definition: declensionwidget.cpp:99
QWidget
QWidget::setupUi
void setupUi(QWidget *widget)
declensionwidget.h
Editor::DeclensionWidget::DeclensionWidget
DeclensionWidget(QWidget *parent=0)
Definition: declensionwidget.cpp:26
identifier
const char * identifier
Definition: imagecache.cpp:23
QMap::values
QList< T > values() const
QObject::sender
QObject * sender() const
QMap::clear
void clear()
QMap::keys
QList< Key > keys() const
Editor::DeclensionWidget::updateEntries
void updateEntries()
Fill the line edits.
Definition: declensionwidget.cpp:58
QWidget::setEnabled
void setEnabled(bool)
QString
Editor::DeclensionWidget::setTranslation
void setTranslation(KEduVocExpression *entry, int translation)
Definition: declensionwidget.cpp:65
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QMap::value
const T value(const Key &key) const
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