• 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
lessonstatisticsview.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  Copyright 2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
4 
5  ***************************************************************************/
6 
7 /***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 // Own
17 #include "lessonstatisticsview.h"
18 
19 // Qt
20 #include <QApplication>
21 #include <QHeaderView>
22 #include <QItemDelegate>
23 #include <QPainter>
24 
25 // KDE
26 #include <KLocalizedString>
27 #include <KMessageBox>
28 #include <KInputDialog>
29 #include <KAction>
30 #include <KActionCollection>
31 
32 // Parley
33 #include "statisticslegendwidget.h"
34 #include "statisticsmodel.h"
35 #include "keduvoclesson.h"
36 #include "utils.h"
37 
38 
39 // GradeDelegate shows the graphic colored bar in the statistics,
40 // showing how far the student has come on the way to enlightenment.
41 
42 class GradeDelegate: public QItemDelegate
43 {
44 public:
45  GradeDelegate(QObject *parent = 0)
46  : QItemDelegate(parent) {
47  }
48 
49  virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
50  const QModelIndex &index) const
51  {
52  QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0);
53 
54  // empty lesson? If so, paint nothing.
55  if (!index.data(StatisticsModel::TotalCount).toInt()) {
56  return;
57  }
58 
59  // Draw the colored bar.
60  KEduVocContainer *container = index.data(StatisticsModel::Container).value<KEduVocContainer*>();
61  WordCount wordCount;
62  wordCount.fillFromContainer(*container, index.column() - ContainerModel::FirstDataColumn);
63  ConfidenceColors colors(ConfidenceColors::ProgressiveColorScheme);
64 
65  paintColorBar(*painter, option.rect, wordCount, colors); // in utils
66 
67  // Draw the text telling the percentage on top of the bar.
68  painter->drawText(option.rect, Qt::AlignCenter,
69  QString("%1%").arg(index.data(StatisticsModel::TotalPercent).toInt()));
70  }
71 };
72 
73 
74 // ----------------------------------------------------------------
75 
76 
77 LessonStatisticsView::LessonStatisticsView(QWidget *parent)
78  : ContainerView(parent)
79 {
80  header()->setVisible(true);
81  header()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignBottom);
82 
83  // inherits context menu policy - so action will show up in right click menu
84  KAction *removeGradesAction = new KAction(this);
85  removeGradesAction->setText(i18n("Remove confidence levels from this unit"));
86  removeGradesAction->setIcon(KIcon("edit-clear"));
87  removeGradesAction->setWhatsThis(i18n("Remove confidence levels from this unit"));
88  removeGradesAction->setToolTip(removeGradesAction->whatsThis());
89  removeGradesAction->setStatusTip(removeGradesAction->whatsThis());
90 
91  connect(removeGradesAction, SIGNAL(triggered()), SLOT(removeGrades()));
92  addAction(removeGradesAction);
93 
94  KAction *removeGradesChildrenAction = new KAction(this);
95  removeGradesChildrenAction->setText(i18n("Remove confidence levels from this unit and all sub-units"));
96  removeGradesChildrenAction->setIcon(KIcon("edit-clear"));
97  removeGradesChildrenAction->setWhatsThis(i18n("Remove confidence level from this unit and all sub-units"));
98  removeGradesChildrenAction->setToolTip(removeGradesChildrenAction->whatsThis());
99  removeGradesChildrenAction->setStatusTip(removeGradesChildrenAction->whatsThis());
100 
101  connect(removeGradesChildrenAction, SIGNAL(triggered()), SLOT(removeGradesChildren()));
102  addAction(removeGradesChildrenAction);
103 
104  connect(header(), SIGNAL(geometriesChanged()),
105  this, SLOT(adjustColumnWidths()));
106  connect(header(), SIGNAL(sectionResized(int,int,int)),
107  this, SLOT(sectionResized(int,int,int)));
108 }
109 
110 void LessonStatisticsView::setModel(ContainerModel *model)
111 {
112  ContainerView::setModel(model);
113 
114  GradeDelegate *delegate = new GradeDelegate(this);
115  for (int i = ContainerModel::FirstDataColumn; i < model->columnCount(QModelIndex()); i++) {
116  setItemDelegateForColumn(i, delegate);
117  }
118 
119  adjustColumnWidths();
120 }
121 
122 void LessonStatisticsView::resizeEvent(QResizeEvent *event)
123 {
124  adjustColumnWidths();
125  ContainerView::resizeEvent(event);
126 }
127 
128 void LessonStatisticsView::sectionResized(int index,
129  int /*oldSize*/, int /*newSize*/)
130 {
131  if (index < ContainerModel::FirstDataColumn) {
132  adjustColumnWidths();
133  }
134 }
135 
136 void LessonStatisticsView::adjustColumnWidths()
137 {
138  int firstWidth = columnWidth(0) + columnWidth(1);
139  // Subtract 5 here otherwise we get a horizontal scrollbar.
140  int totalWidth = width() - firstWidth - 5;
141  int columnCount = model()->columnCount(QModelIndex());
142  int visibleColumns = 0;
143  for (int i = ContainerModel::FirstDataColumn; i < columnCount; ++i) {
144  if (!isColumnHidden(i))
145  visibleColumns++;
146  }
147  int columnWidth = visibleColumns > 0 ? totalWidth / visibleColumns : 150;
148  for (int i = ContainerModel::FirstDataColumn; i < model()->columnCount(QModelIndex()); i++) {
149  setColumnWidth(i, columnWidth);
150  }
151 // header()->resizeSections(QHeaderView::ResizeToContents);
152  header()->setResizeMode(QHeaderView::Interactive);
153  header()->setStretchLastSection(true);
154 }
155 
156 void LessonStatisticsView::removeGrades()
157 {
158  QModelIndex selectedIndex = selectionModel()->currentIndex();
159  KEduVocLesson *lesson = static_cast<KEduVocLesson*>(selectedIndex.internalPointer());
160  lesson->resetGrades(-1, KEduVocContainer::NotRecursive);
161 }
162 
163 void LessonStatisticsView::removeGradesChildren()
164 {
165  QModelIndex selectedIndex = selectionModel()->currentIndex();
166  KEduVocLesson *lesson = static_cast<KEduVocLesson*>(selectedIndex.internalPointer());
167  lesson->resetGrades(-1, KEduVocContainer::Recursive);
168 }
169 
170 #include "lessonstatisticsview.moc"
QModelIndex
QResizeEvent
QWidget
ConfidenceColors::ProgressiveColorScheme
Definition: utils.h:53
QItemSelectionModel::currentIndex
QModelIndex currentIndex() const
StatisticsModel::Container
Definition: statisticsmodel.h:38
QAbstractItemView::selectionModel
QItemSelectionModel * selectionModel() const
QWidget::addAction
void addAction(QAction *action)
paintColorBar
void paintColorBar(QPainter &painter, const QRect &rect, const WordCount &wordCount, const ConfidenceColors &colors)
Definition: utils.cpp:171
QWidget::setVisible
virtual void setVisible(bool visible)
QVariant::value
T value() const
StatisticsModel::TotalCount
Definition: statisticsmodel.h:29
ContainerView
View for containers (KEduVocContainer).
Definition: containerview.h:31
QItemDelegate::paint
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemView::resizeEvent
virtual void resizeEvent(QResizeEvent *event)
ContainerView::setModel
virtual void setModel(ContainerModel *model)
Set the model for the view.
Definition: containerview.cpp:42
QTreeView::isColumnHidden
bool isColumnHidden(int column) const
ContainerModel::FirstDataColumn
Definition: containermodel.h:41
WordCount
Definition: utils.h:30
QWidget::width
int width() const
utils.h
QTreeView::columnWidth
int columnWidth(int column) const
QTreeView::setColumnWidth
void setColumnWidth(int column, int width)
QVariant::toInt
int toInt(bool *ok) const
QStyleOptionViewItem
ContainerModel
Model for the tree of containers (lessons, word types).
Definition: containermodel.h:33
QObject
QPainter
StatisticsModel::TotalPercent
Definition: statisticsmodel.h:28
QHeaderView::setDefaultAlignment
void setDefaultAlignment(QFlags< Qt::AlignmentFlag > alignment)
QItemDelegate
LessonStatisticsView::setModel
void setModel(ContainerModel *model)
Set the model for the view.
Definition: lessonstatisticsview.cpp:110
QPainter::drawText
void drawText(const QPointF &position, const QString &text)
QModelIndex::internalPointer
void * internalPointer() const
LessonStatisticsView::resizeEvent
virtual void resizeEvent(QResizeEvent *event)
Definition: lessonstatisticsview.cpp:122
QString
LessonStatisticsView::LessonStatisticsView
LessonStatisticsView(QWidget *parent)
Definition: lessonstatisticsview.cpp:77
statisticslegendwidget.h
QModelIndex::data
QVariant data(int role) const
QApplication::style
QStyle * style()
QHeaderView::setResizeMode
void setResizeMode(ResizeMode mode)
ContainerModel::columnCount
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
Definition: containermodel.cpp:187
QAbstractItemModel::columnCount
virtual int columnCount(const QModelIndex &parent) const =0
ConfidenceColors
Definition: utils.h:50
QModelIndex::column
int column() const
QStyle::drawPrimitive
virtual void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const =0
statisticsmodel.h
QTreeView::header
QHeaderView * header() const
lessonstatisticsview.h
QAbstractItemView::setItemDelegateForColumn
void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)
QAbstractItemView::model
QAbstractItemModel * model() const
QHeaderView::setStretchLastSection
void setStretchLastSection(bool stretch)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject::parent
QObject * parent() const
WordCount::fillFromContainer
void fillFromContainer(KEduVocContainer &container, int translationIndex, KEduVocContainer::EnumEntriesRecursive recursive=KEduVocContainer::Recursive)
Definition: utils.cpp:75
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