qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
searchtypes.h
Go to the documentation of this file.
1 /*
2  Copyright © 2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 
22 #include <QDate>
23 #include <QRegularExpression>
24 
25 enum class FilterSearch {
26  None,
27  Register,
28  WordsOnly,
29  Regular,
32 };
33 
34 enum class PeriodSearch {
35  None,
36  WithTheEnd,
38  AfterDate,
40 };
41 
42 enum class SearchDirection {
43  Up,
44  Down
45 };
46 
50  QDate date;
51  bool isUpdate{false};
52 
53  bool operator ==(const ParameterSearch& other) {
54  return filter == other.filter &&
55  period == other.period &&
56  date == other.date;
57  }
58 
59  bool operator !=(const ParameterSearch& other) {
60  return !(*this == other);
61  }
62 };
63 
65 public:
72  static QString generateFilterWordsOnly(const QString &phrase) {
73  QString filter = QRegularExpression::escape(phrase);
74 
75  const QString symbols = QStringLiteral("\\[]/^$.|?*+(){}");
76 
77  if (filter != phrase) {
78  if (filter.left(1) != QLatin1String("\\")) {
79  filter = QLatin1String("\\b") + filter;
80  } else {
81  filter = QLatin1String("(^|\\s)") + filter;
82  }
83  if (!symbols.contains(filter.right(1))) {
84  filter += QLatin1String("\\b");
85  } else {
86  filter += QLatin1String("($|\\s)");
87  }
88  } else {
89  filter = QStringLiteral("\\b%1\\b").arg(filter);
90  }
91 
92  return filter;
93  }
94 };
SearchDirection::Down
@ Down
FilterSearch
FilterSearch
Definition: searchtypes.h:25
FilterSearch::Register
@ Register
ParameterSearch::date
QDate date
Definition: searchtypes.h:50
SearchDirection
SearchDirection
Definition: searchtypes.h:42
FilterSearch::RegisterAndWordsOnly
@ RegisterAndWordsOnly
ParameterSearch::filter
FilterSearch filter
Definition: searchtypes.h:48
PeriodSearch::AfterDate
@ AfterDate
PeriodSearch::BeforeDate
@ BeforeDate
SearchDirection::Up
@ Up
ParameterSearch
Definition: searchtypes.h:47
ParameterSearch::operator==
bool operator==(const ParameterSearch &other)
Definition: searchtypes.h:53
PeriodSearch::WithTheEnd
@ WithTheEnd
FilterSearch::None
@ None
PeriodSearch::None
@ None
ParameterSearch::period
PeriodSearch period
Definition: searchtypes.h:49
PeriodSearch::WithTheFirst
@ WithTheFirst
SearchExtraFunctions
Definition: searchtypes.h:64
FilterSearch::WordsOnly
@ WordsOnly
ParameterSearch::isUpdate
bool isUpdate
Definition: searchtypes.h:51
FilterSearch::RegisterAndRegular
@ RegisterAndRegular
SearchExtraFunctions::generateFilterWordsOnly
static QString generateFilterWordsOnly(const QString &phrase)
generateFilterWordsOnly generate string for filter "Whole words only" for correct search phrase conta...
Definition: searchtypes.h:72
ParameterSearch::operator!=
bool operator!=(const ParameterSearch &other)
Definition: searchtypes.h:59
FilterSearch::Regular
@ Regular
PeriodSearch
PeriodSearch
Definition: searchtypes.h:34