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

parley

  • sources
  • kde-4.12
  • 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)
107  {
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  {
135  label_3->setText(i18n("Singular"));
136  label_4->setText(i18n("Dual"));
137  label_5->setText(i18n("Plural"));
138 
139  /* Hide the GUI elements which are needed to switch the number */
140  for (int i = 0; i < numberLayout->count(); ++i)
141  {
142  numberLayout->itemAt(i)->widget()->hide();
143  }
144 
145  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Nominative] = masculine_1;
146  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Genitive] = masculine_2;
147  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Dative] = masculine_3;
148  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Accusative] = masculine_4;
149  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Ablative] = masculine_5;
150  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Locative] = masculine_6;
151  m_DeclensionLineEdits[KEduVocWordFlag::Singular | KEduVocWordFlag::Vocative] = masculine_7;
152 
153  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Nominative] = feminine_1;
154  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Genitive] = feminine_2;
155  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Dative] = feminine_3;
156  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Accusative] = feminine_4;
157  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Ablative] = feminine_5;
158  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Locative] = feminine_6;
159  m_DeclensionLineEdits[KEduVocWordFlag::Dual | KEduVocWordFlag::Vocative] = feminine_7;
160 
161  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Nominative] = neuter_1;
162  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Genitive] = neuter_2;
163  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Dative] = neuter_3;
164  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Accusative] = neuter_4;
165  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Ablative] = neuter_5;
166  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Locative] = neuter_6;
167  m_DeclensionLineEdits[KEduVocWordFlag::Plural | KEduVocWordFlag::Vocative] = neuter_7;
168  }
169  else
170  {
171  label_3->setText(i18n("Masculine"));
172  label_4->setText(i18n("Feminine"));
173  label_5->setText(i18n("Neuter"));
174 
175  /* Show the GUI elements which are needed to switch the number */
176  for (int i = 0; i < numberLayout->count(); ++i)
177  {
178  numberLayout->itemAt(i)->widget()->show();
179  }
180 
181  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Nominative] = masculine_1;
182  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Genitive] = masculine_2;
183  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Dative] = masculine_3;
184  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Accusative] = masculine_4;
185  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Ablative] = masculine_5;
186  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Locative] = masculine_6;
187  m_DeclensionLineEdits[KEduVocWordFlag::Masculine | KEduVocWordFlag::Vocative] = masculine_7;
188 
189  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Nominative] = feminine_1;
190  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Genitive] = feminine_2;
191  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Dative] = feminine_3;
192  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Accusative] = feminine_4;
193  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Ablative] = feminine_5;
194  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Locative] = feminine_6;
195  m_DeclensionLineEdits[KEduVocWordFlag::Feminine | KEduVocWordFlag::Vocative] = feminine_7;
196 
197  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Nominative] = neuter_1;
198  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Genitive] = neuter_2;
199  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Dative] = neuter_3;
200  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Accusative] = neuter_4;
201  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Ablative] = neuter_5;
202  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Locative] = neuter_6;
203  m_DeclensionLineEdits[KEduVocWordFlag::Neuter | KEduVocWordFlag::Vocative] = neuter_7;
204  }
205 }
206 
207 #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
declensionwidget.h
Editor::DeclensionWidget::DeclensionWidget
DeclensionWidget(QWidget *parent=0)
Definition: declensionwidget.cpp:26
identifier
const char * identifier
Definition: imagecache.cpp:23
QWidget
Editor::DeclensionWidget::updateEntries
void updateEntries()
Fill the line edits.
Definition: declensionwidget.cpp:58
Editor::DeclensionWidget::setTranslation
void setTranslation(KEduVocExpression *entry, int translation)
Definition: declensionwidget.cpp:65
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:42:05 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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