[LyX/master] Add GUI for search-ignore
Juergen Spitzmueller
spitz at lyx.org
Sat Apr 30 11:45:45 UTC 2022
commit c0a3d654ff1b5bfadb4195015fc82a7fefe000eb
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sat Apr 30 14:23:54 2022 +0200
Add GUI for search-ignore
---
src/frontends/qt/FindAndReplace.cpp | 81 +++++++++++++++-
src/frontends/qt/FindAndReplace.h | 7 ++
src/frontends/qt/ui/FindAndReplaceUi.ui | 157 +++++++++++++++++++++++++------
3 files changed, 212 insertions(+), 33 deletions(-)
diff --git a/src/frontends/qt/FindAndReplace.cpp b/src/frontends/qt/FindAndReplace.cpp
index ab61e1a..d72fa92 100644
--- a/src/frontends/qt/FindAndReplace.cpp
+++ b/src/frontends/qt/FindAndReplace.cpp
@@ -421,7 +421,7 @@ bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool
/// Return true if a match was found
bool FindAndReplaceWidget::findAndReplace(
bool casesensitive, bool matchword, bool backwards,
- bool expandmacros, bool ignoreformat, bool replace,
+ bool expandmacros, bool adhereformat, bool replace,
bool keep_case, bool replace_all)
{
Buffer & find_buf = find_work_area_->bufferView().buffer();
@@ -460,19 +460,59 @@ bool FindAndReplaceWidget::findAndReplace(
<< ", matchword=" << matchword
<< ", backwards=" << backwards
<< ", expandmacros=" << expandmacros
- << ", ignoreformat=" << ignoreformat
+ << ", adhereformat=" << adhereformat
<< ", repl_buf_name" << repl_buf_name
<< ", keep_case=" << keep_case
<< ", scope=" << scope
<< ", restr=" << restr);
FindAndReplaceOptions opt(find_buf_name, casesensitive, matchword,
- !backwards, expandmacros, ignoreformat,
+ !backwards, expandmacros, !adhereformat,
repl_buf_name, keep_case, scope, restr);
+
+ if (adhereformat) {
+ // Formats to adhere
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("language",
+ !adhereLanguageCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("color",
+ !adhereColorCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("family",
+ !adhereFFamilyCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("series",
+ !adhereFSeriesCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("shape",
+ !adhereFShapeCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("size",
+ !adhereFSizeCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("markup",
+ !adhereMarkupCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("underline",
+ !adhereUnderlineCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("strike",
+ !adhereStrikeCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("deleted",
+ !adhereDeletedCB->isChecked())));
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("sectioning",
+ !adhereSectioningCB->isChecked())));
+ }
+ lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("non-output-content",
+ ignoreNonOutputCB->isChecked())));
+
return findAndReplaceScope(opt, replace_all);
}
+docstring const FindAndReplaceWidget::checkState(string const s, bool const b)
+{
+ docstring res = from_ascii(s) + from_ascii(" ");
+ if (b)
+ res += from_ascii("true");
+ else
+ res += from_ascii("false");
+ return res;
+}
+
+
bool FindAndReplaceWidget::findAndReplace(bool backwards, bool replace, bool replace_all)
{
if (! view_.currentMainWorkArea()) {
@@ -492,7 +532,7 @@ bool FindAndReplaceWidget::findAndReplace(bool backwards, bool replace, bool rep
wordsCB->isChecked(),
backwards,
expandMacrosCB->isChecked(),
- ignoreFormatCB->isChecked(),
+ adhereFormatGB->isChecked(),
replace,
keepCaseCB->isChecked(),
replace_all);
@@ -532,6 +572,34 @@ void FindAndReplaceWidget::on_searchbackCB_clicked()
}
+void FindAndReplaceWidget::setFormatIgnores(bool const b)
+{
+ adhereLanguageCB->setChecked(b);
+ adhereColorCB->setChecked(b);
+ adhereFFamilyCB->setChecked(b);
+ adhereFSeriesCB->setChecked(b);
+ adhereFShapeCB->setChecked(b);
+ adhereFSizeCB->setChecked(b);
+ adhereMarkupCB->setChecked(b);
+ adhereUnderlineCB->setChecked(b);
+ adhereStrikeCB->setChecked(b);
+ adhereDeletedCB->setChecked(b);
+ adhereSectioningCB->setChecked(b);
+}
+
+
+void FindAndReplaceWidget::on_selectAllPB_clicked()
+{
+ setFormatIgnores(true);
+}
+
+
+void FindAndReplaceWidget::on_deselectAllPB_clicked()
+{
+ setFormatIgnores(false);
+}
+
+
// Copy selected elements from bv's BufferParams to the dest_bv's
static void copy_params(BufferView const & bv, BufferView & dest_bv) {
Buffer const & doc_buf = bv.buffer();
@@ -584,8 +652,9 @@ void FindAndReplace::updateView()
FindAndReplace::FindAndReplace(GuiView & parent,
- Qt::DockWidgetArea area, Qt::WindowFlags flags)
- : DockView(parent, "findreplaceadv", qt_("Advanced Find and Replace"),
+ Qt::DockWidgetArea area,
+ Qt::WindowFlags flags)
+ : DockView(parent, "findreplaceadv", qt_("Advanced Find and Replace"),
area, flags)
{
widget_ = new FindAndReplaceWidget(parent);
diff --git a/src/frontends/qt/FindAndReplace.h b/src/frontends/qt/FindAndReplace.h
index 0ffc39d..7ea70a9 100644
--- a/src/frontends/qt/FindAndReplace.h
+++ b/src/frontends/qt/FindAndReplace.h
@@ -16,6 +16,7 @@
// This is needed so that ui_FindAndReplaceUi.h can find qt_()
#include "qt_helpers.h"
#include "ui_FindAndReplaceUi.h"
+#include "support/docstring.h"
#include <string>
@@ -65,12 +66,18 @@ private:
void virtual hideEvent(QHideEvent *ev) override;
void hideDialog();
+
+ void setFormatIgnores(bool const b);
+
+ docstring const checkState(std::string const s, bool const b);
protected Q_SLOTS:
void on_findNextPB_clicked();
void on_replacePB_clicked();
void on_replaceallPB_clicked();
void on_searchbackCB_clicked();
+ void on_selectAllPB_clicked();
+ void on_deselectAllPB_clicked();
};
diff --git a/src/frontends/qt/ui/FindAndReplaceUi.ui b/src/frontends/qt/ui/FindAndReplaceUi.ui
index 58a16eb..6713723 100644
--- a/src/frontends/qt/ui/FindAndReplaceUi.ui
+++ b/src/frontends/qt/ui/FindAndReplaceUi.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>374</width>
- <height>380</height>
+ <height>664</height>
</rect>
</property>
<property name="windowTitle">
@@ -263,7 +263,7 @@
<attribute name="title">
<string>Settin&gs</string>
</attribute>
- <layout class="QVBoxLayout" name="dynamicLayoutAdvanced_" stretch="0,0,1">
+ <layout class="QVBoxLayout" name="dynamicLayoutAdvanced_" stretch="0,0,0,1">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="enabled">
@@ -365,42 +365,26 @@
<enum>QLayout::SetMinimumSize</enum>
</property>
<item row="3" column="0">
- <widget class="QCheckBox" name="OnlyMaths">
- <property name="toolTip">
- <string>Restrict search to math environments only</string>
- </property>
- <property name="text">
- <string>Search on&ly in maths</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="ignoreFormatCB">
+ <widget class="QCheckBox" name="expandMacrosCB">
<property name="enabled">
- <bool>true</bool>
- </property>
- <property name="toolTip">
- <string>If unchecked, the search will be limited to occurrences of the selected text and paragraph style</string>
+ <bool>false</bool>
</property>
<property name="text">
- <string>I&gnore format</string>
- </property>
- <property name="checked">
- <bool>true</bool>
+ <string>E&xpand macros</string>
</property>
</widget>
</item>
- <item row="4" column="0">
- <widget class="QCheckBox" name="expandMacrosCB">
- <property name="enabled">
- <bool>false</bool>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="OnlyMaths">
+ <property name="toolTip">
+ <string>Restrict search to math environments only</string>
</property>
<property name="text">
- <string>E&xpand macros</string>
+ <string>Search on&ly in maths</string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="1" column="0">
<widget class="QCheckBox" name="keepCaseCB">
<property name="toolTip">
<string>Keep the case of the replacement's first letter as in each matching text first letter</string>
@@ -423,9 +407,128 @@
</property>
</spacer>
</item>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="ignoreNonOutputCB">
+ <property name="toolTip">
+ <string>Do not search in content that is not output (e.g., notes)</string>
+ </property>
+ <property name="text">
+ <string>Ignore &non-output content</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
+ <widget class="QGroupBox" name="adhereFormatGB">
+ <property name="toolTip">
+ <string>If the search string is formatted in a non-default way, only find strings formatted like the search string in the checked respects</string>
+ </property>
+ <property name="title">
+ <string>Ad&here to search string formatting of</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="adhereStrikeCB">
+ <property name="text">
+ <string>Strike-through</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QCheckBox" name="adhereFSeriesCB">
+ <property name="text">
+ <string>Font series</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="adhereColorCB">
+ <property name="text">
+ <string>Font color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="adhereMarkupCB">
+ <property name="text">
+ <string>Emph/noun</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QPushButton" name="deselectAllPB">
+ <property name="text">
+ <string>Deselect all</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="adhereFFamilyCB">
+ <property name="text">
+ <string>Font family</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="adhereLanguageCB">
+ <property name="text">
+ <string>Language</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QCheckBox" name="adhereSectioningCB">
+ <property name="text">
+ <string>Sectioning markup</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="adhereDeletedCB">
+ <property name="text">
+ <string>Deletion (change)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="adhereUnderlineCB">
+ <property name="text">
+ <string>Underlining</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="adhereFShapeCB">
+ <property name="text">
+ <string>Font shape</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QPushButton" name="selectAllPB">
+ <property name="text">
+ <string>Select all</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QCheckBox" name="adhereFSizeCB">
+ <property name="text">
+ <string>Font size</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
More information about the lyx-cvs
mailing list