• 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
  • 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 
28 #include "practice/configure/configurepracticedialog.h"
29 #include "lessonstatisticsview.h"
30 #include "statisticsmodel.h"
31 #include "parleymainwindow.h"
32 #include "parleyactions.h"
33 
34 #include "prefs.h"
35 
36 
37 #include "ui_statisticsmainwindow.h"
38 #include "prefs.h"
39 #include "conjugationoptions.h"
40 
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 confidence levels for a document"
57  // "Statistics for \"%1\"", m_doc->title()));
58  m_statisticsModel = new StatisticsModel(this);
59 
60  setDocument(doc);
61  initActions();
62  initPracticeModeSelection();
63  initLanguages();
64  initPracticeMode();
65 
66  KConfigGroup cfg(KSharedConfig::openConfig("parleyrc"), objectName());
67  applyMainWindowSettings(cfg);
68 }
69 
70 StatisticsMainWindow::~StatisticsMainWindow()
71 {
72  if (m_conjugationOptions) {
73  m_conjugationOptions->updateSettings();
74  }
75  KConfigGroup cfg(KSharedConfig::openConfig("parleyrc"), objectName());
76  saveMainWindowSettings(cfg);
77  delete m_ui;
78 }
79 
80 void StatisticsMainWindow::syncConfig()
81 {
82  //kDebug() << "save tenses";
83  if (m_conjugationOptions) {
84  m_conjugationOptions->updateSettings();
85  }
86 }
87 
88 void StatisticsMainWindow::setDocument(KEduVocDocument* doc)
89 {
90  m_doc = doc;
91  m_statisticsModel->setDocument(doc);
92  m_ui->lessonStatistics->setModel(m_statisticsModel);
93  m_ui->lessonStatistics->expandAll();
94  m_ui->lessonStatistics->resizeColumnToContents(0);
95 }
96 
97 void StatisticsMainWindow::initActions()
98 {
99  ParleyActions::create(ParleyActions::EnterEditMode, m_mainWindow, SLOT(showEditor()), actionCollection());
100  ParleyActions::create(ParleyActions::StartPractice, m_mainWindow, SLOT(startPractice()), actionCollection());
101  ParleyActions::create(ParleyActions::ConfigurePractice, m_mainWindow, SLOT(configurePractice()), actionCollection());
102 }
103 
104 void StatisticsMainWindow::initPracticeModeSelection()
105 {
106  switch (Prefs::practiceMode()) {
107  case Prefs::EnumPracticeMode::FlashCardsPractice:
108  m_ui->flashCard->setChecked(true);
109  break;
110  case Prefs::EnumPracticeMode::MixedLettersPractice:
111  m_ui->mixedLetters->setChecked(true);
112  break;
113  case Prefs::EnumPracticeMode::MultipleChoicePractice:
114  m_ui->multipleChoice->setChecked(true);
115  break;
116  case Prefs::EnumPracticeMode::WrittenPractice:
117  m_ui->written->setChecked(true);
118  break;
119  case Prefs::EnumPracticeMode::ExampleSentencesPractice:
120  m_ui->exampleSentence->setChecked(true);
121  break;
122  case Prefs::EnumPracticeMode::GenderPractice:
123  m_ui->gender->setChecked(true);
124  break;
125  case Prefs::EnumPracticeMode::ComparisonPractice:
126  m_ui->comparisonForms->setChecked(true);
127  break;
128  case Prefs::EnumPracticeMode::ConjugationPractice:
129  m_ui->conjugations->setChecked(true);
130  showConjugationOptions();
131  break;
132  default:
133  break;
134  }
135  QSignalMapper* mapper = new QSignalMapper(this);
136  mapper->setMapping(m_ui->flashCard, Prefs::EnumPracticeMode::FlashCardsPractice);
137  mapper->setMapping(m_ui->mixedLetters, Prefs::EnumPracticeMode::MixedLettersPractice);
138  mapper->setMapping(m_ui->multipleChoice, Prefs::EnumPracticeMode::MultipleChoicePractice);
139  mapper->setMapping(m_ui->written, Prefs::EnumPracticeMode::WrittenPractice);
140  mapper->setMapping(m_ui->exampleSentence, Prefs::EnumPracticeMode::ExampleSentencesPractice);
141  mapper->setMapping(m_ui->gender, Prefs::EnumPracticeMode::GenderPractice);
142  mapper->setMapping(m_ui->comparisonForms, Prefs::EnumPracticeMode::ComparisonPractice);
143  mapper->setMapping(m_ui->conjugations, Prefs::EnumPracticeMode::ConjugationPractice);
144  connect(m_ui->flashCard, SIGNAL(clicked(bool)), mapper, SLOT(map()));
145  connect(m_ui->mixedLetters, SIGNAL(clicked(bool)), mapper, SLOT(map()));
146  connect(m_ui->multipleChoice, SIGNAL(clicked(bool)), mapper, SLOT(map()));
147  connect(m_ui->written, SIGNAL(clicked(bool)), mapper, SLOT(map()));
148  connect(m_ui->exampleSentence, SIGNAL(clicked(bool)), mapper, SLOT(map()));
149  connect(m_ui->gender, SIGNAL(clicked(bool)), mapper, SLOT(map()));
150  connect(m_ui->comparisonForms, SIGNAL(clicked(bool)), mapper, SLOT(map()));
151  connect(m_ui->conjugations, SIGNAL(clicked(bool)), mapper, SLOT(map()));
152  connect(mapper, SIGNAL(mapped(int)), this, SLOT(practiceModeSelected(int)));
153 }
154 
155 void StatisticsMainWindow::initLanguages()
156 {
157  //kDebug() << "init languages: " << Prefs::learningLanguage() << Prefs::knownLanguage();
158  const int totalNumLanguages = m_doc->identifierCount();
159 
160  if ( Prefs::knownLanguage() < 0 || totalNumLanguages <= Prefs::knownLanguage() ) {
161  Prefs::setKnownLanguage(0);
162  }
163  if ( Prefs::learningLanguage() < 0 || totalNumLanguages <= Prefs::learningLanguage() ) {
164  Prefs::setLearningLanguage(0);
165  }
166 
167  if (Prefs::knownLanguage() >= totalNumLanguages
168  || Prefs::learningLanguage() >= totalNumLanguages
169  || Prefs::learningLanguage() == Prefs::knownLanguage())
170  {
171  Prefs::setKnownLanguage(0);
172  Prefs::setLearningLanguage(1);
173  //kDebug() << "Invalid language selection.";
174  }
175 
176  // Insert data into the comboboxes.
177  for (int i = 0; i < totalNumLanguages; ++i) {
178  m_ui->learnedLanguage->insertItem(i, m_doc->identifier(i).name());
179  m_ui->knownLanguage->insertItem(i, m_doc->identifier(i).name());
180  }
181  m_ui->learnedLanguage->setCurrentIndex(Prefs::learningLanguage());
182  m_ui->knownLanguage->setCurrentIndex(Prefs::knownLanguage());
183 
184  connect(m_ui->learnedLanguage, SIGNAL(currentIndexChanged(int)), SLOT(languagesChanged()));
185  connect(m_ui->knownLanguage, SIGNAL(currentIndexChanged(int)), SLOT(languagesChanged()));
186 
187  languagesChanged();
188 }
189 
190 void StatisticsMainWindow::languagesChanged()
191 {
192  int knownLanguage = m_ui->knownLanguage->currentIndex();
193  int learningLanguage = m_ui->learnedLanguage->currentIndex();
194  Prefs::setLearningLanguage(learningLanguage);
195  Prefs::setKnownLanguage(knownLanguage);
196 
197  emit languagesChanged(knownLanguage, learningLanguage);
198 
199  updateVisibleColumns();
200 }
201 
202 void StatisticsMainWindow::initPracticeMode()
203 {
204  m_ui->practiceDirection->insertItem(0, i18n("Known to Learning"));
205  m_ui->practiceDirection->insertItem(1, i18n("Learning to Known"));
206  m_ui->practiceDirection->insertItem(2, i18n("Mixed Directions"));
207  //m_ui->practiceDirection->insertItem(3, i18n("Mixed Directions with Sound"));
208 
209  if (Prefs::practiceDirection() < 0 || 3 < Prefs::practiceDirection())
210  Prefs::setPracticeDirection(Prefs::EnumPracticeDirection::MixedDirectionsWordsOnly);
211 
212  m_ui->practiceDirection->setCurrentIndex(Prefs::practiceDirection());
213 
214  connect(m_ui->practiceDirection, SIGNAL(currentIndexChanged(int)),
215  this, SLOT(practiceDirectionChanged(int)));
216 }
217 
218 void StatisticsMainWindow::practiceModeSelected(int mode)
219 {
220  Prefs::setPracticeMode(static_cast<Prefs::EnumPracticeMode::type>(mode));
221  //kDebug() << "mode: " << mode << Prefs::practiceMode();
222 
223  showConjugationOptions(mode == Prefs::EnumPracticeMode::ConjugationPractice);
224 }
225 
226 void StatisticsMainWindow::practiceDirectionChanged(int mode)
227 {
228  //kDebug() << "new practice direction:" << mode;
229  Prefs::setPracticeDirection(static_cast<Prefs::EnumPracticeDirection::type>(mode));
230 }
231 
232 void StatisticsMainWindow::updateVisibleColumns()
233 {
234  bool isHidden;
235  for (int i = ContainerModel::FirstDataColumn; i < m_ui->lessonStatistics->header()->count(); i++) {
236  int iLang = i - ContainerModel::FirstDataColumn;
237 
238  switch (Prefs::practiceDirection()) {
239  case Prefs::EnumPracticeDirection::LearningToKnown:
240  isHidden = iLang != Prefs::knownLanguage();
241  break;
242  case Prefs::EnumPracticeDirection::MixedDirectionsWordsOnly:
243  case Prefs::EnumPracticeDirection::MixedDirectionsWithSound:
244  isHidden = iLang != Prefs::knownLanguage() && iLang != Prefs::learningLanguage();
245  break;
246  case Prefs::EnumPracticeDirection::KnownToLearning:
247  // Use KnownToLearning as default.
248  default:
249  isHidden = iLang != Prefs::learningLanguage();
250  break;
251  }
252 
253  m_ui->lessonStatistics->setColumnHidden(i, isHidden);
254  }
255 }
256 
257 void StatisticsMainWindow::showConjugationOptions(bool visible)
258 {
259  if (!m_conjugationOptions && !visible) {
260  return;
261  }
262 
263  if (!m_conjugationOptions) {
264  m_conjugationOptions = new ConjugationOptions(m_doc, m_ui->modeSpecificOptions);
265  QHBoxLayout* layout = new QHBoxLayout(m_ui->modeSpecificOptions);
266  layout->setMargin(0);
267  layout->addWidget(m_conjugationOptions);
268  connect(this, SIGNAL(languagesChanged(int, int)), m_conjugationOptions, SLOT(setLanguages(int, int)));
269  m_conjugationOptions->setLanguages(Prefs::knownLanguage(), Prefs::learningLanguage());
270  }
271  m_conjugationOptions->setVisible(visible);
272 }
273 
274 void StatisticsMainWindow::configurePractice()
275 {
276  ConfigurePracticeDialog dialog(m_doc, this, "practice settings", Prefs::self());
277  dialog.exec();
278 }
279 
280 #include "statisticsmainwindow.moc"
statisticsmainwindow.h
QWidget
Prefs::EnumPracticeMode::MultipleChoicePractice
Definition: prefs.h:26
ParleyActions::create
KAction * create(ParleyAction id, const QObject *recvr, const char *slot, QObject *parent)
Definition: parleyactions.cpp:64
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 method that is currently selected.
Definition: prefs.h:1324
ParleyMainWindow
Definition: parleymainwindow.h:41
ConfigurePracticeDialog
Definition: configurepracticedialog.h:34
Prefs::setKnownLanguage
static void setKnownLanguage(int v)
Set The language that you know already.
Definition: prefs.h:1257
configurepracticedialog.h
QWidget::setVisible
virtual void setVisible(bool visible)
QHBoxLayout
prefs.h
Prefs::setPracticeMode
static void setPracticeMode(EnumPracticeMode::type v)
Set The practice method that is currently selected.
Definition: prefs.h:1314
ContainerModel::FirstDataColumn
Definition: containermodel.h:41
Prefs::EnumPracticeDirection::MixedDirectionsWithSound
Definition: prefs.h:31
parleyactions.h
Prefs::self
static Prefs * self()
Definition: prefs.cpp:17
QSignalMapper::setMapping
void setMapping(QObject *sender, int id)
ConjugationOptions::updateSettings
void updateSettings()
Definition: conjugationoptions.cpp:76
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
KXmlGuiWindow
StatisticsMainWindow::~StatisticsMainWindow
~StatisticsMainWindow()
Definition: statisticsmainwindow.cpp:70
Prefs::EnumPracticeMode::GenderPractice
Definition: prefs.h:26
conjugationoptions.h
ParleyActions::ConfigurePractice
Definition: parleyactions.h:37
Prefs::setLearningLanguage
static void setLearningLanguage(int v)
Set The language that you are learning.
Definition: prefs.h:1238
Prefs::practiceDirection
static EnumPracticeDirection::type practiceDirection()
Get The practice mode that is currently selected.
Definition: prefs.h:1343
ConjugationOptions
Definition: conjugationoptions.h:22
ConjugationOptions::setLanguages
void setLanguages(int from, int to)
Definition: conjugationoptions.cpp:43
QtConcurrent::map
QFuture< void > map(Sequence &sequence, MapFunction function)
QLayout::setMargin
void setMargin(int margin)
StatisticsMainWindow::languagesChanged
void languagesChanged(int, int)
ParleyActions::StartPractice
Definition: parleyactions.h:37
parleymainwindow.h
ParleyActions::EnterEditMode
Definition: parleyactions.h:38
Prefs::knownLanguage
static int knownLanguage()
Get The language that you know already.
Definition: prefs.h:1267
Prefs::EnumPracticeDirection::LearningToKnown
Definition: prefs.h:31
StatisticsModel
Definition: statisticsmodel.h:22
Prefs::setPracticeDirection
static void setPracticeDirection(EnumPracticeDirection::type v)
Set The practice mode that is currently selected.
Definition: prefs.h:1333
Prefs::EnumPracticeMode::ExampleSentencesPractice
Definition: prefs.h:26
ReadonlyContainerModel::setDocument
void setDocument(KEduVocDocument *doc)
Set the new source kvtml file.
Definition: readonlycontainermodel.cpp:43
statisticsmodel.h
Prefs::EnumPracticeMode::MixedLettersPractice
Definition: prefs.h:26
Prefs::learningLanguage
static int learningLanguage()
Get The language that you are learning.
Definition: prefs.h:1248
lessonstatisticsview.h
StatisticsMainWindow::setDocument
void setDocument(KEduVocDocument *doc)
Definition: statisticsmainwindow.cpp:88
Prefs::EnumPracticeDirection::KnownToLearning
Definition: prefs.h:31
StatisticsMainWindow::syncConfig
void syncConfig()
Definition: statisticsmainwindow.cpp:80
QSignalMapper
Prefs::EnumPracticeMode::FlashCardsPractice
Definition: prefs.h:26
QtConcurrent::mapped
QFuture< T > mapped(const Sequence &sequence, MapFunction function)
Prefs::EnumPracticeDirection::MixedDirectionsWordsOnly
Definition: prefs.h:31
Prefs::EnumPracticeMode::WrittenPractice
Definition: prefs.h:26
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