• 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
  • statistics
statisticsmainwindow.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  Copyright 2008-2010 Frederik Gladhorn <gladhorn@kde.org>
4  Copyright 2008 Daniel Laidig <d.laidig@gmx.de>
5 
6  ***************************************************************************
7 
8  ***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
17 #include "statisticsmainwindow.h"
18 
19 #include <QtCore/qsignalmapper.h>
20 
21 #include <KLocale>
22 #include <KConfig>
23 #include <KGlobal>
24 #include <KActionCollection>
25 
26 #include <keduvocdocument.h>
27 #include "configure-practice/configurepracticedialog.h"
28 #include "lessonstatistics.h"
29 #include "statisticsmodel.h"
30 #include "parleymainwindow.h"
31 #include "parleyactions.h"
32 
33 #include "prefs.h"
34 
35 
36 #include "ui_statisticsmainwindow.h"
37 #include "prefs.h"
38 #include "conjugationoptions.h"
39 
40 using namespace Editor;
41 
42 StatisticsMainWindow::StatisticsMainWindow(KEduVocDocument* doc, ParleyMainWindow* parent)
43  :KXmlGuiWindow(parent)
44  ,m_mainWindow(parent)
45  ,m_doc(doc)
46  ,m_conjugationOptions(0)
47 {
48  // KXmlGui
49  setXMLFile("statisticsui.rc");
50  setObjectName("Statistics");
51 
52  QWidget *mainWidget = new QWidget(this);
53  setCentralWidget(mainWidget);
54  m_ui = new Ui::StatisticsMainWindow;
55  m_ui->setupUi(mainWidget);
56  m_ui->caption->setText(i18nc("caption for an overview of the grades for a document", "Statistics for \"%1\"", m_doc->title()));
57  m_statisticsModel = new StatisticsModel(this);
58 
59  setDocument(doc);
60  initActions();
61  initPracticeModeSelection();
62  initLanguages();
63 
64  KConfigGroup cfg(KSharedConfig::openConfig("parleyrc"), objectName());
65  applyMainWindowSettings(cfg);
66 }
67 
68 StatisticsMainWindow::~StatisticsMainWindow()
69 {
70  if (m_conjugationOptions) {
71  m_conjugationOptions->updateSettings();
72  }
73  KConfigGroup cfg(KSharedConfig::openConfig("parleyrc"), objectName());
74  saveMainWindowSettings(cfg);
75  delete m_ui;
76 }
77 
78 void StatisticsMainWindow::syncConfig()
79 {
80  kDebug() << "save tenses";
81  if (m_conjugationOptions) {
82  m_conjugationOptions->updateSettings();
83  }
84 }
85 
86 void StatisticsMainWindow::setDocument(KEduVocDocument* doc)
87 {
88  m_doc = doc;
89  m_statisticsModel->setDocument(doc);
90  m_ui->lessonStatistics->setModel(m_statisticsModel);
91  m_ui->lessonStatistics->expandAll();
92  m_ui->lessonStatistics->resizeColumnToContents(0);
93 }
94 
95 void StatisticsMainWindow::initActions()
96 {
97  ParleyActions::create(ParleyActions::EnterEditMode, m_mainWindow, SLOT(showEditor()), actionCollection());
98  ParleyActions::create(ParleyActions::StartPractice, m_mainWindow, SLOT(startPractice()), actionCollection());
99  ParleyActions::create(ParleyActions::ConfigurePractice, m_mainWindow, SLOT(configurePractice()), actionCollection());
100 }
101 
102 void StatisticsMainWindow::initPracticeModeSelection()
103 {
104  switch (Prefs::practiceMode()) {
105  case Prefs::EnumPracticeMode::FlashCardsPractice:
106  m_ui->flashCard->setChecked(true);
107  break;
108  case Prefs::EnumPracticeMode::MixedLettersPractice:
109  m_ui->mixedLetters->setChecked(true);
110  break;
111  case Prefs::EnumPracticeMode::MultipleChoicePractice:
112  m_ui->multipleChoice->setChecked(true);
113  break;
114  case Prefs::EnumPracticeMode::WrittenPractice:
115  m_ui->written->setChecked(true);
116  break;
117  case Prefs::EnumPracticeMode::ExampleSentencesPractice:
118  m_ui->exampleSentence->setChecked(true);
119  break;
120  case Prefs::EnumPracticeMode::GenderPractice:
121  m_ui->gender->setChecked(true);
122  break;
123  case Prefs::EnumPracticeMode::ComparisonPractice:
124  m_ui->comparisonForms->setChecked(true);
125  break;
126  case Prefs::EnumPracticeMode::ConjugationPractice:
127  m_ui->conjugations->setChecked(true);
128  showConjugationOptions();
129  break;
130  default:
131  break;
132  }
133  QSignalMapper* mapper = new QSignalMapper(this);
134  mapper->setMapping(m_ui->flashCard, Prefs::EnumPracticeMode::FlashCardsPractice);
135  mapper->setMapping(m_ui->mixedLetters, Prefs::EnumPracticeMode::MixedLettersPractice);
136  mapper->setMapping(m_ui->multipleChoice, Prefs::EnumPracticeMode::MultipleChoicePractice);
137  mapper->setMapping(m_ui->written, Prefs::EnumPracticeMode::WrittenPractice);
138  mapper->setMapping(m_ui->exampleSentence, Prefs::EnumPracticeMode::ExampleSentencesPractice);
139  mapper->setMapping(m_ui->gender, Prefs::EnumPracticeMode::GenderPractice);
140  mapper->setMapping(m_ui->comparisonForms, Prefs::EnumPracticeMode::ComparisonPractice);
141  mapper->setMapping(m_ui->conjugations, Prefs::EnumPracticeMode::ConjugationPractice);
142  connect(m_ui->flashCard, SIGNAL(clicked(bool)), mapper, SLOT(map()));
143  connect(m_ui->mixedLetters, SIGNAL(clicked(bool)), mapper, SLOT(map()));
144  connect(m_ui->multipleChoice, SIGNAL(clicked(bool)), mapper, SLOT(map()));
145  connect(m_ui->written, SIGNAL(clicked(bool)), mapper, SLOT(map()));
146  connect(m_ui->exampleSentence, SIGNAL(clicked(bool)), mapper, SLOT(map()));
147  connect(m_ui->gender, SIGNAL(clicked(bool)), mapper, SLOT(map()));
148  connect(m_ui->comparisonForms, SIGNAL(clicked(bool)), mapper, SLOT(map()));
149  connect(m_ui->conjugations, SIGNAL(clicked(bool)), mapper, SLOT(map()));
150  connect(mapper, SIGNAL(mapped(int)), this, SLOT(practiceModeSelected(int)));
151 }
152 
153 void StatisticsMainWindow::initLanguages()
154 {
155  kDebug() << "init languages: " << Prefs::questionLanguage() << Prefs::solutionLanguage();
156  const int totalNumLanguages = m_doc->identifierCount();
157  if (Prefs::questionLanguage() >= totalNumLanguages || Prefs::solutionLanguage() >= totalNumLanguages
158  || Prefs::solutionLanguage() == Prefs::questionLanguage()) {
159  Prefs::setQuestionLanguage(0);
160  Prefs::setSolutionLanguage(1);
161  kDebug() << "Invalid language selection.";
162  }
163  for ( int i = 0; i < totalNumLanguages-1; i++ ) {
164  for (int j = i+1; j < totalNumLanguages; j++) {
165  QListWidgetItem* item = new QListWidgetItem(
166  i18nc("pair of two languages that the user chooses to practice", "%1 to %2",
167  m_doc->identifier(i).name(), m_doc->identifier(j).name()));
168  item->setData(Qt::UserRole, i);
169  item->setData(Qt::UserRole+1, j);
170  m_ui->languageList->addItem(item);
171 
172  if (i == Prefs::questionLanguage() && j == Prefs::solutionLanguage()) {
173  m_ui->languageList->setCurrentItem(item);
174  }
175 
176  QListWidgetItem* item2 = new QListWidgetItem(
177  i18nc("pair of two languages that the user chooses to practice", "%1 to %2",
178  m_doc->identifier(j).name(), m_doc->identifier(i).name()));
179  item2->setData(Qt::UserRole, j);
180  item2->setData(Qt::UserRole+1, i);
181  m_ui->languageList->addItem(item2);
182 
183  if (j == Prefs::questionLanguage() && i == Prefs::solutionLanguage()) {
184  m_ui->languageList->setCurrentItem(item2);
185  }
186  }
187  }
188  connect(m_ui->languageList, SIGNAL(currentRowChanged(int)), SLOT(languagesChanged()));
189  m_ui->languageList->sortItems();
190  languagesChanged();
191 }
192 
193 void StatisticsMainWindow::languagesChanged()
194 {
195  int questionLanguage;
196  int solutionLangauge;
197  QListWidgetItem* current = m_ui->languageList->currentItem();
198  questionLanguage = current->data(Qt::UserRole).toInt();
199  solutionLangauge = current->data(Qt::UserRole+1).toInt();
200  Prefs::setQuestionLanguage(questionLanguage);
201  Prefs::setSolutionLanguage(solutionLangauge);
202  emit languagesChanged(questionLanguage, solutionLangauge);
203  //m_ui->lessonStatistics->showGrades(current->data(Qt::UserRole).toInt(), current->data(Qt::UserRole+1).toInt());
204  kDebug() << "set languages: " << current->data(Qt::UserRole).toInt() << current->data(Qt::UserRole+1).toInt();
205  updateVisibleColumns();
206 }
207 
208 void StatisticsMainWindow::practiceModeSelected(int mode)
209 {
210  Prefs::setPracticeMode(static_cast<Prefs::EnumPracticeMode::type>(mode));
211  kDebug() << "mode: " << mode << Prefs::practiceMode();
212 
213  showConjugationOptions(mode == Prefs::EnumPracticeMode::ConjugationPractice);
214 }
215 
216 void StatisticsMainWindow::updateVisibleColumns()
217 {
218  int solutionLanguage = Prefs::solutionLanguage();
219  for (int i = 2; i < m_ui->lessonStatistics->header()->count(); i++) {
220  m_ui->lessonStatistics->setColumnHidden(i, (i-2) != solutionLanguage);
221  }
222 }
223 
224 void StatisticsMainWindow::showConjugationOptions(bool visible)
225 {
226  if (!m_conjugationOptions && !visible) {
227  return;
228  }
229 
230  if (!m_conjugationOptions) {
231  m_conjugationOptions = new ConjugationOptions(m_doc, m_ui->modeSpecificOptions);
232  QHBoxLayout* layout = new QHBoxLayout(m_ui->modeSpecificOptions);
233  layout->setMargin(0);
234  layout->addWidget(m_conjugationOptions);
235  connect(this, SIGNAL(languagesChanged(int,int)), m_conjugationOptions, SLOT(setLanguages(int,int)));
236  m_conjugationOptions->setLanguages(Prefs::questionLanguage(), Prefs::solutionLanguage());
237  }
238  m_conjugationOptions->setVisible(visible);
239 }
240 
241 void StatisticsMainWindow::configurePractice()
242 {
243  ConfigurePracticeDialog dialog(m_doc, this, "practice settings", Prefs::self());
244  dialog.exec();
245 }
246 
247 #include "statisticsmainwindow.moc"
statisticsmainwindow.h
Prefs::EnumPracticeMode::MultipleChoicePractice
Definition: prefs.h:26
ParleyActions::create
KAction * create(ParleyAction id, const QObject *recvr, const char *slot, QObject *parent)
Definition: parleyactions.cpp:62
Prefs::EnumPracticeMode::ComparisonPractice
Definition: prefs.h:26
Prefs::EnumPracticeMode::ConjugationPractice
Definition: prefs.h:26
StatisticsMainWindow::StatisticsMainWindow
StatisticsMainWindow(KEduVocDocument *doc, ParleyMainWindow *parent)
Definition: statisticsmainwindow.cpp:42
Prefs::practiceMode
static EnumPracticeMode::type practiceMode()
Get The practice mode that is currently selected.
Definition: prefs.h:1243
ParleyMainWindow
Definition: parleymainwindow.h:68
ConfigurePracticeDialog
Definition: configurepracticedialog.h:32
QWidget
configurepracticedialog.h
Prefs::questionLanguage
static int questionLanguage()
Get The language that is displayed in a test.
Definition: prefs.h:1167
prefs.h
Prefs::setPracticeMode
static void setPracticeMode(EnumPracticeMode::type v)
Set The practice mode that is currently selected.
Definition: prefs.h:1233
lessonstatistics.h
parleyactions.h
Prefs::self
static Prefs * self()
Definition: prefs.cpp:17
ConjugationOptions::updateSettings
void updateSettings()
Definition: conjugationoptions.cpp:76
KXmlGuiWindow
StatisticsMainWindow::~StatisticsMainWindow
~StatisticsMainWindow()
Definition: statisticsmainwindow.cpp:68
Prefs::EnumPracticeMode::GenderPractice
Definition: prefs.h:26
conjugationoptions.h
ParleyActions::ConfigurePractice
Definition: parleyactions.h:36
ConjugationOptions
Definition: conjugationoptions.h:22
ConjugationOptions::setLanguages
void setLanguages(int from, int to)
Definition: conjugationoptions.cpp:43
StatisticsMainWindow::languagesChanged
void languagesChanged(int, int)
ParleyActions::StartPractice
Definition: parleyactions.h:36
parleymainwindow.h
ParleyActions::EnterEditMode
Definition: parleyactions.h:37
StatisticsModel
Definition: statisticsmodel.h:23
Prefs::setQuestionLanguage
static void setQuestionLanguage(int v)
Set The language that is displayed in a test.
Definition: prefs.h:1157
Prefs::EnumPracticeMode::ExampleSentencesPractice
Definition: prefs.h:26
statisticsmodel.h
Prefs::setSolutionLanguage
static void setSolutionLanguage(int v)
Set The language in which the user has to answer.
Definition: prefs.h:1176
Prefs::EnumPracticeMode::MixedLettersPractice
Definition: prefs.h:26
Editor::BasicContainerModel::setDocument
void setDocument(KEduVocDocument *doc)
Set the new source kvtml file.
Definition: basiccontainermodel.cpp:44
StatisticsMainWindow::setDocument
void setDocument(KEduVocDocument *doc)
Definition: statisticsmainwindow.cpp:86
StatisticsMainWindow::syncConfig
void syncConfig()
Definition: statisticsmainwindow.cpp:78
Prefs::EnumPracticeMode::FlashCardsPractice
Definition: prefs.h:26
Prefs::solutionLanguage
static int solutionLanguage()
Get The language in which the user has to answer.
Definition: prefs.h:1186
Prefs::EnumPracticeMode::WrittenPractice
Definition: prefs.h:26
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