• 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
multiplechoicemodewidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  Copyright 2009 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 "multiplechoicemodewidget.h"
15 #include "multiplechoicedata.h"
16 #include "latexrenderer.h"
17 
18 #include "ui_practice_widget_multiplechoice.h"
19 
20 #include <KDebug>
21 #include <kcolorscheme.h>
22 #include <QtGui/QRadioButton>
23 #include <QTimer>
24 #include <QKeyEvent>
25 
26 using namespace Practice;
27 
28 
29 MultiplechoiceModeWidget::MultiplechoiceModeWidget (GuiFrontend *frontend, QWidget* parent )
30  : AbstractModeWidget (frontend, parent), m_latexRenderer(0)
31 {
32  m_ui = new Ui::MultiplechoicePracticeWidget();
33  m_ui->setupUi(this);
34 
35  for (int i = 0; i < 5; i++) {
36  QAction *action = new QAction(this);
37  action->setShortcut(Qt::Key_1+i);
38  addAction(action);
39  m_actions.append(action);
40  }
41 
42 }
43 
44 void MultiplechoiceModeWidget::setQuestionFont ( const QFont& font )
45 {
46  m_ui->questionLabel->setFont(font);
47 }
48 
49 void MultiplechoiceModeWidget::setSolutionFont ( const QFont& font )
50 {
51  m_solutionFont = font;
52 }
53 
54 void MultiplechoiceModeWidget::setQuestion(const QVariant& question)
55 {
56  if (!question.canConvert<MultipleChoiceData>()) {
57  kWarning() << "expected MultipleChoiceData";
58  return;
59  }
60  MultipleChoiceData data = question.value<MultipleChoiceData>();
61 
62  m_ui->questionLabel->setMinimumSize(QSize(0, 0));
63  if (LatexRenderer::isLatex(data.question)) {
64  if(!m_latexRenderer) {
65  m_latexRenderer = new LatexRenderer(this);
66  m_latexRenderer->setResultLabel(m_ui->questionLabel);
67  }
68  m_latexRenderer->renderLatex(data.question);
69  } else {
70  m_ui->questionLabel->setText(data.question);
71  }
72 
73  if (m_choiceButtons.size() != data.choices.size()){
74  qDeleteAll(m_choiceButtons);
75  m_choiceButtons.clear();
76  setNumberOfRadioButtons(data.choices.size());
77  }
78 
79  int j = 0;
80  foreach(QRadioButton *radio,m_choiceButtons){
81  radio->setText(data.choices[j]);
82  radio->setToolTip(data.choices[j]);
83  radio->setFont(m_solutionFont);
84  j++;
85  }
86 }
87 
88 void MultiplechoiceModeWidget::showQuestion()
89 {
90  //necessary trick to uncheck'em all
91  m_choiceButtons[0]->setChecked(true);
92  m_choiceButtons[0]->setAutoExclusive(false);
93  m_choiceButtons[0]->setChecked(false);
94  m_choiceButtons[0]->setAutoExclusive(true);
95 
96  m_ui->feedbackLabel->clear();
97 
98  foreach(QRadioButton *radio, m_choiceButtons) {
99  radio->setPalette(palette());
100  radio->setEnabled(true);
101  }
102 
103  QTimer::singleShot(0, m_choiceButtons[0], SLOT(setFocus()));
104 }
105 
106 void MultiplechoiceModeWidget::setNumberOfRadioButtons(const int numberOfChoices)
107 {
108  for (int i=0;i<numberOfChoices;i++){
109  QRadioButton *radio_button = new QRadioButton(this);
110  m_ui->verticalLayout->insertWidget(m_ui->verticalLayout->count()-1, radio_button);
111  m_choiceButtons.append(radio_button);
112  if (i < 5) {
113  connect(m_actions.at(i), SIGNAL(triggered()), radio_button, SLOT(click()));
114  }
115  connect(radio_button, SIGNAL(clicked()), this, SIGNAL(continueAction()));
116  radio_button->installEventFilter(this);
117  }
118 }
119 
120 void MultiplechoiceModeWidget::setSynonym(const QString& entry)
121 {
122  //TODO Do something here to show synonyms
123 }
124 
125 
126 void MultiplechoiceModeWidget::showSynonym()
127 {
128  //TODO Do something here to show synonyms
129 }
130 
131 bool MultiplechoiceModeWidget::eventFilter(QObject *obj, QEvent *event)
132 {
133  // make it possible to use the enter key to select multiple choice options
134  if (event->type() == QEvent::KeyPress) {
135  QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
136  if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) {
137  QRadioButton *radioButton = qobject_cast<QRadioButton*>(obj);
138  if (radioButton) {
139  radioButton->click();
140  return true;
141  }
142  }
143  }
144 
145  return QObject::eventFilter(obj, event);
146 }
147 
148 void MultiplechoiceModeWidget::setSolution(const QVariant& solution)
149 {
150  m_solution = solution.toInt();
151 }
152 
153 void MultiplechoiceModeWidget::setHint(const QVariant& hint)
154 {
155  m_choiceButtons.at(hint.toInt())->setEnabled(false);
156 }
157 
158 void MultiplechoiceModeWidget::setFeedback(const QVariant& feedback)
159 {
160  m_ui->feedbackLabel->setText(feedback.toString());
161 }
162 
163 void MultiplechoiceModeWidget::showSolution()
164 {
165  int input = -1;
166  if (userInput().isValid()) {
167  input = userInput().toInt();
168  }
169  m_choiceButtons[m_solution]->setPalette(m_correctPalette);
170  if (input != -1 && input != m_solution) {
171  m_choiceButtons[input]->setPalette(m_wrongPalette);
172  }
173  foreach(QRadioButton *radio, m_choiceButtons) {
174  radio->setEnabled(false);
175  }
176 }
177 
178 QVariant MultiplechoiceModeWidget::userInput()
179 {
180 
181  int i = 0;
182  foreach(QRadioButton *radio,m_choiceButtons){
183  if (radio->isChecked()) return i;
184  i++;
185  }
186 
187  return QVariant();
188 }
189 
190 void MultiplechoiceModeWidget::setQuestionSound(const KUrl& soundUrl)
191 {
192 
193 }
194 
195 void MultiplechoiceModeWidget::setSolutionSound(const KUrl& soundUrl)
196 {
197 
198 }
199 
200 void MultiplechoiceModeWidget::setSolutionPronunciation(const QString& pronunciationText)
201 {
202 
203 }
204 
205 void MultiplechoiceModeWidget::setQuestionPronunciation(const QString& pronunciationText)
206 {
207 
208 }
209 
210 #include "multiplechoicemodewidget.moc"
Practice::MultiplechoiceModeWidget::setNumberOfRadioButtons
virtual void setNumberOfRadioButtons(const int numberOfChoices)
Definition: multiplechoicemodewidget.cpp:106
Practice::GuiFrontend
Definition: guifrontend.h:33
Practice::MultiplechoiceModeWidget::setSolution
virtual void setSolution(const QVariant &solution)
Definition: multiplechoicemodewidget.cpp:148
Practice::MultiplechoiceModeWidget::showSynonym
virtual void showSynonym()
Definition: multiplechoicemodewidget.cpp:126
Practice::MultiplechoiceModeWidget::setQuestion
virtual void setQuestion(const QVariant &question)
Definition: multiplechoicemodewidget.cpp:54
Practice::MultiplechoiceModeWidget::MultiplechoiceModeWidget
MultiplechoiceModeWidget(GuiFrontend *frontend, QWidget *parent=0)
Definition: multiplechoicemodewidget.cpp:29
Practice::MultipleChoiceData::question
QString question
Definition: multiplechoicedata.h:25
Practice::MultiplechoiceModeWidget::eventFilter
virtual bool eventFilter(QObject *obj, QEvent *event)
Definition: multiplechoicemodewidget.cpp:131
Practice::MultiplechoiceModeWidget::userInput
virtual QVariant userInput()
Definition: multiplechoicemodewidget.cpp:178
Practice::MultiplechoiceModeWidget::showQuestion
virtual void showQuestion()
Definition: multiplechoicemodewidget.cpp:88
QWidget
Practice::AbstractModeWidget::continueAction
void continueAction()
Practice::LatexRenderer
Definition: latexrenderer.h:26
Practice::MultiplechoiceModeWidget::setSolutionSound
virtual void setSolutionSound(const KUrl &soundUrl)
Definition: multiplechoicemodewidget.cpp:195
QObject
Practice::MultipleChoiceData
Definition: multiplechoicedata.h:24
Practice::LatexRenderer::setResultLabel
void setResultLabel(QLabel *label)
Definition: latexrenderer.h:32
Practice::AbstractModeWidget
Definition: abstractwidget.h:26
multiplechoicedata.h
Practice::MultipleChoiceData::choices
QStringList choices
Definition: multiplechoicedata.h:26
Practice::MultiplechoiceModeWidget::setQuestionFont
virtual void setQuestionFont(const QFont &font)
Definition: multiplechoicemodewidget.cpp:44
Practice::AbstractModeWidget::m_correctPalette
QPalette m_correctPalette
Definition: abstractwidget.h:67
Practice::MultiplechoiceModeWidget::setHint
virtual void setHint(const QVariant &hint)
Definition: multiplechoicemodewidget.cpp:153
Practice::MultiplechoiceModeWidget::setFeedback
virtual void setFeedback(const QVariant &feedback)
Definition: multiplechoicemodewidget.cpp:158
Practice::AbstractModeWidget::m_wrongPalette
QPalette m_wrongPalette
Definition: abstractwidget.h:68
multiplechoicemodewidget.h
Practice::MultiplechoiceModeWidget::showSolution
virtual void showSolution()
Definition: multiplechoicemodewidget.cpp:163
Practice::MultiplechoiceModeWidget::setSynonym
virtual void setSynonym(const QString &entry)
Definition: multiplechoicemodewidget.cpp:120
Practice::MultiplechoiceModeWidget::setSolutionFont
virtual void setSolutionFont(const QFont &font)
Definition: multiplechoicemodewidget.cpp:49
Practice::MultiplechoiceModeWidget::setSolutionPronunciation
virtual void setSolutionPronunciation(const QString &pronunciationText)
Definition: multiplechoicemodewidget.cpp:200
latexrenderer.h
Practice::MultiplechoiceModeWidget::setQuestionSound
virtual void setQuestionSound(const KUrl &soundUrl)
Definition: multiplechoicemodewidget.cpp:190
Practice::LatexRenderer::renderLatex
void renderLatex(QString tex)
Definition: latexrenderer.cpp:51
Practice::LatexRenderer::isLatex
static bool isLatex(const QString &tex)
Definition: latexrenderer.cpp:96
Practice::MultiplechoiceModeWidget::setQuestionPronunciation
virtual void setQuestionPronunciation(const QString &pronunciationText)
Definition: multiplechoicemodewidget.cpp:205
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:42:06 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