-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadaptedstringlistmodel.cpp
83 lines (70 loc) · 2.93 KB
/
adaptedstringlistmodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*Copyright (C) 2024 Teg Miles
This file is part of Movar.
Movar is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License,
or any later version.
Movar is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Movar. If not, see <https://www.gnu.org/licenses/>.*/
#include "adaptedstringlistmodel.h"
AdaptedStringListModel::AdaptedStringListModel(QObject* parent)
:QStringListModel(parent)
{
set_adapted_role(Qt::UserRole + 10);
}
QVariant AdaptedStringListModel::data(const QModelIndex& index, int role) const
{
return role == adapted_role()
? cleared_word(QStringListModel::data(index, Qt::DisplayRole).toString())
: QStringListModel::data(index, role);
}
void AdaptedStringListModel::set_adapted_role(int role)
{
current_adapted_role = role;
}
int AdaptedStringListModel::adapted_role() const
{
return current_adapted_role;
}
QString AdaptedStringListModel::cleared_word(const QString& value)
{
//Метод, що прибирає діакритичні знаки й апостроф,
//дозволяючи знайти потрібне слово не вводячи їх.
const auto& diacritic_letters =
QString("ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØ"
"ÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ");
QStringList not_diacritic_letters{"S", "OE", "Z", "s", "oe",
"z", "Y", "Y", "u", "A",
"A", "A", "A", "A", "A",
"AE", "C", "E", "E", "E",
"E", "I", "I", "I", "I", "D",
"N", "O", "O", "O", "O", "O",
"O", "U", "U", "U", "U", "Y",
"s", "a", "a", "a", "a", "a",
"a", "ae", "c", "e", "e", "e",
"e", "i", "i", "i", "i", "o", "n", "o",
"o", "o", "o", "o", "o", "u", "u", "u",
"u", "y", "y"};
const auto& value_lower = value.toLower();
QString cleared_string;
for (const auto &character : std::as_const(value_lower))
{
const auto& diacritic_index = diacritic_letters.indexOf(character);
if (diacritic_index < 0)
{
if (character.isLetter())
{
cleared_string.push_back(character);
}
}
else
{
cleared_string.push_back(not_diacritic_letters.at(diacritic_index));
}
}
return cleared_string;
}