• 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
  • practice
conjugationmodewidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2010 Frederik Gladhorn <gladhorn@kde.org>
3  ***************************************************************************/
4 
5 /***************************************************************************
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  ***************************************************************************/
13 
14 #include "conjugationmodewidget.h"
15 #include "conjugationdata.h"
16 
17 #include "ui_practice_widget_conjugation.h"
18 
19 #include <KDebug>
20 #include <kcolorscheme.h>
21 #include <QtGui/QRadioButton>
22 #include <QTimer>
23 
24 namespace Practice {
25  struct PersonConjugationSolutionWidgets {
26  QLabel* person;
27  QLineEdit* input;
28  QLabel* solution;
29 
30  PersonConjugationSolutionWidgets(QGridLayout* layout, QWidget* parent = 0) {
31  person = new QLabel(parent);
32  person->setAlignment(Qt::AlignRight);
33  input = new QLineEdit(parent);
34  solution = new QLabel(parent);
35  int row = layout->rowCount();
36  layout->addWidget(person, row, 0);
37  layout->addWidget(input, row, 1);
38  layout->addWidget(solution, row, 2);
39  }
40 
41  void setVisible(bool visible) {
42  person->setVisible(visible);
43  input->setVisible(visible);
44  solution->setVisible(visible);
45  }
46  };
47 }
48 
49 using namespace Practice;
50 
51 ConjugationModeWidget::ConjugationModeWidget (GuiFrontend *frontend, QWidget* parent )
52  : AbstractModeWidget (frontend, parent)
53 {
54  m_ui = new Ui::ConjugationPracticeWidget();
55  m_ui->setupUi(this);
56 }
57 
58 ConjugationModeWidget::~ConjugationModeWidget()
59 {
60  qDeleteAll(m_personWidgets);
61 }
62 
63 void ConjugationModeWidget::setQuestionFont(const QFont& font)
64 {
65  m_ui->questionLabel->setFont(font);
66 }
67 
68 void ConjugationModeWidget::setSolutionFont(const QFont& font)
69 {
70  m_ui->infinitiveEdit->setFont(font);
71  m_solutionFont = font;
72 }
73 
74 void ConjugationModeWidget::setQuestion(const QVariant& question)
75 {
76  if (!question.canConvert<ConjugationData>()) {
77  kWarning() << "expected ConjugationData";
78  return;
79  }
80  ConjugationData data = question.value<ConjugationData>();
81 
82  // It's annoying to have to search for information, so put everything into one place if
83  // there`s only one pronoun
84  if (data.personalPronouns.size() > 1) {
85  m_ui->tenseLabel->setText(data.tense);
86  } else {
87  m_ui->tenseLabel->clear();
88  }
89 
90  m_ui->questionLabel->setText(data.questionInfinitive);
91  m_ui->infinitiveEdit->setText(data.solutionInfinitive);
92 
93  setNumberOfConjugationWidgets(data.personalPronouns.size());
94  int i = 0;
95  foreach(QString pp, data.personalPronouns) {
96  if (data.personalPronouns.size() == 1) {
97  pp += " (" + data.tense + ")";
98  }
99  m_personWidgets.at(i)->person->setText(pp);
100  m_personWidgets.at(i)->person->setFont(m_solutionFont);
101  m_personWidgets.at(i)->input->clear();
102  m_personWidgets.at(i)->input->setPalette(QApplication::palette());
103  m_personWidgets.at(i)->input->setFont(m_solutionFont);
104  m_personWidgets.at(i)->solution->clear();
105  m_personWidgets.at(i)->solution->setFont(m_solutionFont);
106  connect(m_personWidgets.at(i)->input, SIGNAL(returnPressed()), this, SLOT(nextConjugationForm()));
107  ++i;
108  }
109 }
110 
111 void ConjugationModeWidget::showQuestion()
112 {
113  Q_ASSERT(!m_personWidgets.isEmpty());
114  QTimer::singleShot(0, m_personWidgets.at(0)->input, SLOT(setFocus()));
115  m_ui->feedbackLabel->setText(i18n("Enter all conjugation forms."));
116 }
117 
118 void ConjugationModeWidget::setSolution(const QVariant& solution)
119 {
120  m_solution = solution.toStringList();
121 }
122 
123 void ConjugationModeWidget::setFeedback(const QVariant& feedback)
124 {
125  m_ui->feedbackLabel->setText(feedback.toString());
126 }
127 
128 void ConjugationModeWidget::showSolution()
129 {
130  for(int i = 0; i < m_solution.size() && i < m_personWidgets.size(); ++i) {
131  if(m_personWidgets.at(i)->input->text() == m_solution.at(i)) {
132  m_personWidgets.at(i)->input->setPalette(m_correctPalette);
133  } else {
134  m_personWidgets.at(i)->input->setPalette(m_wrongPalette);
135  m_personWidgets.at(i)->solution->setPalette(m_correctPalette);
136  m_personWidgets.at(i)->solution->setText(m_solution.at(i));
137  }
138  }
139 }
140 
141 QVariant ConjugationModeWidget::userInput()
142 {
143  QStringList answers;
144  for(int i = 0; i < m_personWidgets.size(); ++i) {
145  answers.append(m_personWidgets.at(i)->input->text());
146  }
147  return answers;
148 }
149 
150 void ConjugationModeWidget::setHint(const QVariant& hint)
151 {
152 
153 }
154 
155 void ConjugationModeWidget::setNumberOfConjugationWidgets(const int numberOfForms)
156 {
157  while (m_personWidgets.size() < numberOfForms) {
158  PersonConjugationSolutionWidgets* w = new PersonConjugationSolutionWidgets(m_ui->conjugationsLayout, this);
159  m_personWidgets.append(w);
160  }
161  for(int i = 0; i < m_personWidgets.size(); ++i) {
162  m_personWidgets[i]->setVisible(i < numberOfForms);
163  }
164 }
165 
166 void ConjugationModeWidget::nextConjugationForm()
167 {
168  for(int i = 0; i < m_personWidgets.count(); ++i) {
169  if (sender() == m_personWidgets.at(i)->input) {
170  if ((i+1 < m_personWidgets.count()) && (m_personWidgets.at(i+1)->input->isVisible())) {
171  // move to the next input widget
172  m_personWidgets.at(i+1)->input->setFocus();
173  } else {
174  emit continueAction();
175  }
176  return;
177  }
178  }
179 }
180 
181 void ConjugationModeWidget::setQuestionPronunciation(const QString& pronunciationText)
182 {
183 
184 }
185 void ConjugationModeWidget::setSolutionPronunciation(const QString& pronunciationText)
186 {
187 
188 }
189 void ConjugationModeWidget::setQuestionSound(const KUrl& soundUrl)
190 {
191 
192 }
193 void ConjugationModeWidget::setSolutionSound(const KUrl& soundUrl)
194 {
195 
196 }
197 
198 
199 #include "conjugationmodewidget.moc"
Practice::ConjugationModeWidget::showQuestion
virtual void showQuestion()
Definition: conjugationmodewidget.cpp:111
Practice::GuiFrontend
Definition: guifrontend.h:33
Practice::ConjugationModeWidget::setFeedback
virtual void setFeedback(const QVariant &feedback)
Definition: conjugationmodewidget.cpp:123
Practice::ConjugationModeWidget::setSolutionSound
virtual void setSolutionSound(const KUrl &soundUrl)
Definition: conjugationmodewidget.cpp:193
Practice::ConjugationModeWidget::setQuestionSound
virtual void setQuestionSound(const KUrl &soundUrl)
Definition: conjugationmodewidget.cpp:189
QWidget
Practice::AbstractModeWidget::continueAction
void continueAction()
Practice::ConjugationModeWidget::setQuestionPronunciation
virtual void setQuestionPronunciation(const QString &pronunciationText)
Definition: conjugationmodewidget.cpp:181
Practice::ConjugationModeWidget::showSolution
virtual void showSolution()
Definition: conjugationmodewidget.cpp:128
Practice::ConjugationModeWidget::setQuestion
virtual void setQuestion(const QVariant &question)
Definition: conjugationmodewidget.cpp:74
Practice::AbstractModeWidget
Definition: abstractwidget.h:26
Practice::ConjugationData::tense
QString tense
Definition: conjugationdata.h:29
Practice::ConjugationModeWidget::~ConjugationModeWidget
virtual ~ConjugationModeWidget()
Definition: conjugationmodewidget.cpp:58
Practice::ConjugationModeWidget::setSolutionFont
virtual void setSolutionFont(const QFont &font)
Definition: conjugationmodewidget.cpp:68
Practice::ConjugationData::personalPronouns
QStringList personalPronouns
Definition: conjugationdata.h:30
Practice::ConjugationData::questionInfinitive
QString questionInfinitive
Definition: conjugationdata.h:27
Practice::AbstractModeWidget::m_correctPalette
QPalette m_correctPalette
Definition: abstractwidget.h:67
Practice::ConjugationModeWidget::setQuestionFont
virtual void setQuestionFont(const QFont &font)
Definition: conjugationmodewidget.cpp:63
Practice::AbstractModeWidget::m_wrongPalette
QPalette m_wrongPalette
Definition: abstractwidget.h:68
Practice::ConjugationModeWidget::setSolutionPronunciation
virtual void setSolutionPronunciation(const QString &pronunciationText)
Definition: conjugationmodewidget.cpp:185
conjugationmodewidget.h
conjugationdata.h
Practice::ConjugationData::solutionInfinitive
QString solutionInfinitive
Definition: conjugationdata.h:28
Practice::ConjugationModeWidget::ConjugationModeWidget
ConjugationModeWidget(GuiFrontend *frontend, QWidget *parent=0)
Definition: conjugationmodewidget.cpp:51
Practice::ConjugationModeWidget::userInput
virtual QVariant userInput()
Definition: conjugationmodewidget.cpp:141
Practice::ConjugationData
Definition: conjugationdata.h:26
Practice::ConjugationModeWidget::setHint
virtual void setHint(const QVariant &hint)
Definition: conjugationmodewidget.cpp:150
Practice::ConjugationModeWidget::setSolution
virtual void setSolution(const QVariant &solution)
Definition: conjugationmodewidget.cpp:118
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