1 /*
2     SPDX-FileCopyrightText: 2007-2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #include "vocabularyfilter.h"
7 
8 #include "vocabularymodel.h"
9 
VocabularyFilter(QObject * parent)10 VocabularyFilter::VocabularyFilter(QObject *parent)
11     : QSortFilterProxyModel(parent)
12     , m_model(0)
13 {
14     // do not use capitalization for searches
15     setSortCaseSensitivity(Qt::CaseInsensitive);
16     setFilterCaseSensitivity(Qt::CaseInsensitive);
17     // sort locale aware: at least puts umlauts and accents in the right position.
18     // Not sure about languages that are more different.
19     // Also depends on the current locale.
20     setSortLocaleAware(true);
21 
22     // eventually accept only one language if so desired...
23     setFilterKeyColumn(-1);
24 }
25 
appendEntry(KEduVocExpression * expression)26 QModelIndex VocabularyFilter::appendEntry(KEduVocExpression *expression)
27 {
28     if (!m_model) {
29         return QModelIndex();
30     }
31     return mapFromSource(m_model->appendEntry(expression));
32 }
33 
setSourceModel(VocabularyModel * model)34 void VocabularyFilter::setSourceModel(VocabularyModel *model)
35 {
36     QSortFilterProxyModel::setSourceModel(model);
37     m_model = model;
38 }
39 
setSearchString(const QString & expression)40 void VocabularyFilter::setSearchString(const QString &expression)
41 {
42     m_filterString = expression;
43     invalidateFilter();
44 }
45 
filterAcceptsRow(int sourceRow,const QModelIndex & sourceParent) const46 bool VocabularyFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
47 {
48     if (m_filterString.isEmpty()) {
49         return true;
50     }
51 
52     int columns = m_model->columnCount(QModelIndex());
53     for (int i = 0; i < columns; i += VocabularyModel::EntryColumnsMAX) {
54         QModelIndex index = sourceModel()->index(sourceRow, i, sourceParent);
55         if (sourceModel()->data(index).toString().contains(m_filterString, Qt::CaseInsensitive)) {
56             return true;
57         }
58     }
59     return false;
60 }
61 
lesson()62 KEduVocLesson *VocabularyFilter::lesson()
63 {
64     if (m_model) {
65         return m_model->lesson();
66     }
67     return 0;
68 }
69