• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • pim API Reference
  • KDE Home
  • Contact Us
 

KPIMTextedit Library

  • kde-4.x
  • pim
  • kpimtextedit
  • src
  • texteditor
  • commonwidget
textfindreplacewidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2013-2019 Laurent Montel <[email protected]>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include "textfindreplacewidget.h"
21 
22 #include <KLocalizedString>
23 #include <QPushButton>
24 #include <KColorScheme>
25 
26 #include <QLineEdit>
27 #include <QLabel>
28 #include <QMenu>
29 #include <QHBoxLayout>
30 #include <QRegularExpression>
31 
32 using namespace KPIMTextEdit;
33 
34 TextReplaceWidget::TextReplaceWidget(QWidget *parent)
35  : QWidget(parent)
36 {
37  QHBoxLayout *lay = new QHBoxLayout(this);
38  QLabel *label = new QLabel(i18nc("Replace text", "Replace:"), this);
39  lay->addWidget(label);
40  const int marg1 = lay->contentsMargins().left();
41  const int marg2 = lay->contentsMargins().right();
42  lay->setContentsMargins(marg1, 0, marg2, 0);
43 
44  mReplace = new QLineEdit(this);
45  mReplace->setClearButtonEnabled(true);
46  lay->addWidget(mReplace);
47 
48  mReplaceBtn = new QPushButton(i18n("Replace"), this);
49  connect(mReplaceBtn, &QPushButton::clicked, this, &TextReplaceWidget::replaceText);
50  lay->addWidget(mReplaceBtn);
51 
52  mReplaceAllBtn = new QPushButton(i18n("Replace All"), this);
53  connect(mReplaceAllBtn, &QPushButton::clicked, this, &TextReplaceWidget::replaceAllText);
54  lay->addWidget(mReplaceAllBtn);
55 }
56 
57 TextReplaceWidget::~TextReplaceWidget()
58 {
59 }
60 
61 QLineEdit *TextReplaceWidget::replaceLineEdit() const
62 {
63  return mReplace;
64 }
65 
66 void TextReplaceWidget::slotSearchStringEmpty(bool isEmpty)
67 {
68  mReplaceBtn->setDisabled(isEmpty);
69  mReplaceAllBtn->setDisabled(isEmpty);
70 }
71 
72 TextFindWidget::TextFindWidget(QWidget *parent)
73  : QWidget(parent)
74 {
75  QHBoxLayout *lay = new QHBoxLayout(this);
76  const int marg1 = lay->contentsMargins().left();
77  const int marg2 = lay->contentsMargins().right();
78  lay->setContentsMargins(marg1, 0, marg2, 0);
79  QLabel *label = new QLabel(i18nc("Find text", "F&ind:"), this);
80  lay->addWidget(label);
81 
82  mSearch = new QLineEdit(this);
83  mSearch->setToolTip(i18n("Text to search for"));
84  mSearch->setClearButtonEnabled(true);
85  label->setBuddy(mSearch);
86  lay->addWidget(mSearch);
87 
88  mFindNextBtn = new QPushButton(QIcon::fromTheme(QStringLiteral("go-down-search")), i18nc("Find and go to the next search match", "Next"), this);
89  mFindNextBtn->setToolTip(i18n("Jump to next match"));
90  lay->addWidget(mFindNextBtn);
91  mFindNextBtn->setEnabled(false);
92 
93  mFindPrevBtn = new QPushButton(QIcon::fromTheme(QStringLiteral("go-up-search")), i18nc("Find and go to the previous search match", "Previous"), this);
94  mFindPrevBtn->setToolTip(i18n("Jump to previous match"));
95  lay->addWidget(mFindPrevBtn);
96  mFindPrevBtn->setEnabled(false);
97 
98  QPushButton *optionsBtn = new QPushButton(this);
99  optionsBtn->setText(i18n("Options"));
100  optionsBtn->setToolTip(i18n("Modify search behavior"));
101  QMenu *optionsMenu = new QMenu(optionsBtn);
102  mCaseSensitiveAct = optionsMenu->addAction(i18n("Case sensitive"));
103  mCaseSensitiveAct->setCheckable(true);
104 
105  mWholeWordAct = optionsMenu->addAction(i18n("Whole word"));
106  mWholeWordAct->setCheckable(true);
107 
108  mRegExpAct = optionsMenu->addAction(i18n("Regular Expression"));
109  mRegExpAct->setCheckable(true);
110 
111  optionsBtn->setMenu(optionsMenu);
112  lay->addWidget(optionsBtn);
113 
114  connect(mFindNextBtn, &QPushButton::clicked, this, &TextFindWidget::findNext);
115  connect(mFindPrevBtn, &QPushButton::clicked, this, &TextFindWidget::findPrev);
116  connect(mCaseSensitiveAct, &QAction::toggled, this, &TextFindWidget::updateSearchOptions);
117  connect(mWholeWordAct, &QAction::toggled, this, &TextFindWidget::updateSearchOptions);
118  connect(mRegExpAct, &QAction::toggled, this, &TextFindWidget::updateSearchOptions);
119  connect(mSearch, &QLineEdit::textChanged, this, &TextFindWidget::slotAutoSearch);
120 }
121 
122 TextFindWidget::~TextFindWidget()
123 {
124 }
125 
126 void TextFindWidget::setFoundMatch(bool match)
127 {
128 #ifndef QT_NO_STYLE_STYLESHEET
129  QString styleSheet;
130 
131  if (!mSearch->text().isEmpty()) {
132  KColorScheme::BackgroundRole bgColorScheme;
133 
134  if (match) {
135  bgColorScheme = KColorScheme::PositiveBackground;
136  } else {
137  bgColorScheme = KColorScheme::NegativeBackground;
138  }
139 
140  KStatefulBrush bgBrush(KColorScheme::View, bgColorScheme);
141 
142  styleSheet = QStringLiteral("QLineEdit{ background-color:%1 }")
143  .arg(bgBrush.brush(mSearch).color().name());
144  }
145 
146  mSearch->setStyleSheet(styleSheet);
147 #endif
148 }
149 
150 void TextFindWidget::slotAutoSearch(const QString &str)
151 {
152  const bool isNotEmpty = (!str.isEmpty());
153  mFindPrevBtn->setEnabled(isNotEmpty);
154  mFindNextBtn->setEnabled(isNotEmpty);
155  Q_EMIT searchStringEmpty(!isNotEmpty);
156  Q_EMIT autoSearch(str);
157  if (str.isEmpty()) {
158  Q_EMIT clearSearch();
159  }
160 }
161 
162 QLineEdit *TextFindWidget::searchLineEdit() const
163 {
164  return mSearch;
165 }
166 
167 bool TextFindWidget::isRegularExpression() const
168 {
169  return mRegExpAct->isChecked();
170 }
171 
172 QString TextFindWidget::searchText() const
173 {
174  return mSearch->text();
175 }
176 
177 #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0)
178 QRegExp TextFindWidget::searchRegExp() const
179 {
180  QRegExp reg;
181  if (mCaseSensitiveAct->isChecked()) {
182  reg.setCaseSensitivity(Qt::CaseSensitive);
183  } else {
184  reg.setCaseSensitivity(Qt::CaseInsensitive);
185  }
186  QString searchTextString = mSearch->text();
187  if (mWholeWordAct->isChecked()) {
188  searchTextString = QLatin1String("\\b") + searchTextString + QLatin1String("\\b");
189  }
190  reg.setPattern(searchTextString);
191  return reg;
192 }
193 
194 #else
195 QRegularExpression TextFindWidget::searchRegExp() const
196 {
197  QRegularExpression reg;
198  if (!mCaseSensitiveAct->isChecked()) {
199  reg.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
200  }
201  QString searchTextString = mSearch->text();
202  if (mWholeWordAct->isChecked()) {
203  searchTextString = QLatin1String("\\b") + searchTextString + QLatin1String("\\b");
204  }
205  reg.setPattern(searchTextString);
206  return reg;
207 }
208 
209 #endif
210 QTextDocument::FindFlags TextFindWidget::searchOptions() const
211 {
212  QTextDocument::FindFlags opt = {};
213  if (mCaseSensitiveAct->isChecked()) {
214  opt |= QTextDocument::FindCaseSensitively;
215  }
216  if (mWholeWordAct->isChecked()) {
217  opt |= QTextDocument::FindWholeWords;
218  }
219  return opt;
220 }
KPIMTextEdit::TextFindWidget::findNext
void findNext()
QPushButton::setMenu
void setMenu(QMenu *menu)
QWidget::styleSheet
QString styleSheet() const
QWidget
QLayout::setContentsMargins
void setContentsMargins(int left, int top, int right, int bottom)
KPIMTextEdit::TextReplaceWidget::~TextReplaceWidget
~TextReplaceWidget()
Definition: textfindreplacewidget.cpp:57
QMargins::right
int right() const
QLineEdit::text
text
QAction::isChecked
bool isChecked() const
QMargins::left
int left() const
QMenu::addAction
void addAction(QAction *action)
QHBoxLayout
KPIMTextEdit::TextFindWidget::~TextFindWidget
~TextFindWidget()
Definition: textfindreplacewidget.cpp:122
QLineEdit::textChanged
void textChanged(const QString &text)
KPIMTextEdit::TextFindWidget::searchOptions
Q_REQUIRED_RESULT QTextDocument::FindFlags searchOptions() const
Definition: textfindreplacewidget.cpp:210
QAction::toggled
void toggled(bool checked)
KPIMTextEdit::TextFindWidget::searchText
Q_REQUIRED_RESULT QString searchText() const
Definition: textfindreplacewidget.cpp:172
QRegExp::setPattern
void setPattern(const QString &pattern)
QLabel::setBuddy
void setBuddy(QWidget *buddy)
QRegExp
QWidget::setEnabled
void setEnabled(bool)
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
KPIMTextEdit::TextFindWidget::searchStringEmpty
void searchStringEmpty(bool)
KPIMTextEdit::TextFindWidget::clearSearch
void clearSearch()
KPIMTextEdit::TextFindWidget::setFoundMatch
void setFoundMatch(bool match)
Definition: textfindreplacewidget.cpp:126
QString::isEmpty
bool isEmpty() const
QAbstractButton::clicked
void clicked(bool checked)
KPIMTextEdit::TextReplaceWidget::slotSearchStringEmpty
void slotSearchStringEmpty(bool)
Definition: textfindreplacewidget.cpp:66
QString
KPIMTextEdit::TextFindWidget::TextFindWidget
TextFindWidget(QWidget *parent=nullptr)
Definition: textfindreplacewidget.cpp:72
QMenu
QRegExp::setCaseSensitivity
void setCaseSensitivity(Qt::CaseSensitivity cs)
KPIMTextEdit::TextFindWidget::autoSearch
void autoSearch(const QString &)
QAction::setCheckable
void setCheckable(bool)
KPIMTextEdit::TextFindWidget::isRegularExpression
bool isRegularExpression() const
Definition: textfindreplacewidget.cpp:167
QLayout::contentsMargins
QMargins contentsMargins() const
KPIMTextEdit::TextFindWidget::updateSearchOptions
void updateSearchOptions()
QLatin1String
KPIMTextEdit::TextFindWidget::searchRegExp
Q_REQUIRED_RESULT QRegularExpression searchRegExp() const
Definition: textfindreplacewidget.cpp:195
QAbstractButton::setText
void setText(const QString &text)
textfindreplacewidget.h
QPushButton
QIcon::fromTheme
QIcon fromTheme(const QString &name, const QIcon &fallback)
KPIMTextEdit::TextReplaceWidget::replaceLineEdit
QLineEdit * replaceLineEdit() const
Definition: textfindreplacewidget.cpp:61
QLineEdit
QWidget::setToolTip
void setToolTip(const QString &)
QWidget::setDisabled
void setDisabled(bool disable)
KPIMTextEdit::TextReplaceWidget::replaceAllText
void replaceAllText()
KPIMTextEdit::TextFindWidget::searchLineEdit
QLineEdit * searchLineEdit() const
Definition: textfindreplacewidget.cpp:162
KPIMTextEdit::TextReplaceWidget::replaceText
void replaceText()
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
KPIMTextEdit::TextFindWidget::findPrev
void findPrev()
KPIMTextEdit::TextReplaceWidget::TextReplaceWidget
TextReplaceWidget(QWidget *parent=nullptr)
Definition: textfindreplacewidget.cpp:34
QTextDocument::FindFlags
typedef FindFlags
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Sat Dec 14 2019 01:49:23 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KPIMTextedit Library

Skip menu "KPIMTextedit Library"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

pim API Reference

Skip menu "pim API Reference"
  • akonadi-calendar-tools
  •   konsolekalendar
  • akregator
  •   src
  • kalarmcal
  •   src
  •     lib
  • kdepim-runtime
  •   agents
  •   src
  • kleopatra
  •   src
  • kmailtransport
  • knotes
  • kontact
  • kontactinterface
  • kpimtextedit
  • ksmtp
  • ktnef
  • libkgapi
  • libkleo
  •   src
  •     src
  •     src

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