diff --git a/src/settings/documentsettings.kcfg b/src/settings/documentsettings.kcfg
--- a/src/settings/documentsettings.kcfg
+++ b/src/settings/documentsettings.kcfg
@@ -16,5 +16,10 @@
Visible columns in the main editor window.
-
+
+
+ Collapsed tree view items of statistics view window.
+
+
+
diff --git a/src/statistics/lessonstatisticsview.h b/src/statistics/lessonstatisticsview.h
--- a/src/statistics/lessonstatisticsview.h
+++ b/src/statistics/lessonstatisticsview.h
@@ -28,7 +28,10 @@
public:
LessonStatisticsView(QWidget *parent);
+ ~LessonStatisticsView();
void setModel(ContainerModel *model) Q_DECL_OVERRIDE;
+ void saveExpandedStatus() const;
+ void restoreExpandedStatus();
public Q_SLOTS:
void adjustColumnWidths();
@@ -45,6 +48,10 @@
void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE {
Q_UNUSED(model)
}
+ void getCollapsedItems(QStringList &collapsedItems, const QModelIndex &item,
+ QString name) const;
+ void setCollapsedItems(const QStringList &collapsedItems, const QModelIndex &item,
+ QString name);
};
#endif
diff --git a/src/statistics/lessonstatisticsview.cpp b/src/statistics/lessonstatisticsview.cpp
--- a/src/statistics/lessonstatisticsview.cpp
+++ b/src/statistics/lessonstatisticsview.cpp
@@ -34,6 +34,7 @@
#include "statisticsmodel.h"
#include "keduvoclesson.h"
#include "utils.h"
+#include "documentsettings.h"
// GradeDelegate shows the graphic colored bar in the statistics,
@@ -115,6 +116,11 @@
this, &LessonStatisticsView::sectionResized);
}
+LessonStatisticsView::~LessonStatisticsView()
+{
+ saveExpandedStatus();
+}
+
void LessonStatisticsView::setModel(ContainerModel *model)
{
ContainerView::setModel(model);
@@ -173,3 +179,76 @@
KEduVocLesson *lesson = static_cast(selectedIndex.internalPointer());
lesson->resetGrades(-1, KEduVocContainer::Recursive);
}
+
+void LessonStatisticsView::saveExpandedStatus() const
+{
+ auto statisticsModel = qobject_cast(model());
+ Q_ASSERT(statisticsModel != nullptr);
+
+ QStringList collapsedItems;
+ getCollapsedItems(collapsedItems, statisticsModel->index(0, 0, QModelIndex()), QString());
+
+ const KEduVocDocument *doc = statisticsModel->document();
+ if (doc != nullptr) {
+ DocumentSettings documentSettings(doc->url().url());
+ documentSettings.setCollapsedStatisticsViewItems(collapsedItems);
+ documentSettings.save();
+ }
+}
+
+void LessonStatisticsView::getCollapsedItems(QStringList &collapsedItems, const QModelIndex &item,
+ QString name) const
+{
+ if (!item.isValid()) {
+ return;
+ }
+
+ int rowCount = model()->rowCount(item);
+ if (rowCount > 0) {
+ // Item has children and therefore expandable
+ name += item.data().toString();
+ if (!isExpanded(item)) {
+ collapsedItems << name;
+ }
+ for (int row = 0; row < rowCount; ++row) {
+ getCollapsedItems(collapsedItems, model()->index(row, 0, item), name + '/');
+ }
+ }
+}
+
+void LessonStatisticsView::restoreExpandedStatus()
+{
+ auto statisticsModel = qobject_cast(model());
+ Q_ASSERT(statisticsModel != nullptr);
+
+ const KEduVocDocument *doc = statisticsModel->document();
+ if (doc != nullptr) {
+ DocumentSettings documentSettings(doc->url().url());
+ documentSettings.load();
+ QStringList collapsedItems = documentSettings.collapsedStatisticsViewItems();
+ setCollapsedItems(collapsedItems, statisticsModel->index(0, 0, QModelIndex()), QString());
+ }
+}
+
+void LessonStatisticsView::setCollapsedItems(const QStringList &collapsedItems,
+ const QModelIndex &item, QString name)
+{
+ if (!item.isValid()) {
+ return;
+ }
+
+ int rowCount = model()->rowCount(item);
+ if (rowCount > 0) {
+ // Item has children and therefore expandable
+ name += item.data().toString();
+ if (collapsedItems.contains(name)) {
+ collapse(item);
+ } else {
+ expand(item);
+ }
+ for (int row = 0; row < rowCount; ++row) {
+ setCollapsedItems(collapsedItems, model()->index(row, 0, item), name + '/');
+ }
+ }
+}
+
diff --git a/src/statistics/statisticsmainwindow.cpp b/src/statistics/statisticsmainwindow.cpp
--- a/src/statistics/statisticsmainwindow.cpp
+++ b/src/statistics/statisticsmainwindow.cpp
@@ -88,7 +88,7 @@
m_doc = doc;
m_statisticsModel->setDocument(doc);
m_ui->lessonStatistics->setModel(m_statisticsModel);
- m_ui->lessonStatistics->expandAll();
+ m_ui->lessonStatistics->restoreExpandedStatus();
m_ui->lessonStatistics->resizeColumnToContents(0);
}
@@ -330,7 +330,8 @@
void StatisticsMainWindow::updateModelSettings()
{
+ m_ui->lessonStatistics->saveExpandedStatus();
m_statisticsModel->updateDocumentSettings();
- m_ui->lessonStatistics->expandAll();
+ m_ui->lessonStatistics->restoreExpandedStatus();
}
diff --git a/src/statistics/statisticsmodel.h b/src/statistics/statisticsmodel.h
--- a/src/statistics/statisticsmodel.h
+++ b/src/statistics/statisticsmodel.h
@@ -55,6 +55,7 @@
Qt::DropActions supportedDragActions() const Q_DECL_OVERRIDE;
void updateDocumentSettings();
+ const KEduVocDocument *document() const;
public slots:
virtual void setDocument(KEduVocDocument *doc) Q_DECL_OVERRIDE;
diff --git a/src/statistics/statisticsmodel.cpp b/src/statistics/statisticsmodel.cpp
--- a/src/statistics/statisticsmodel.cpp
+++ b/src/statistics/statisticsmodel.cpp
@@ -199,3 +199,9 @@
endResetModel();
}
+
+const KEduVocDocument *StatisticsModel::document() const
+{
+ return m_doc;
+}
+