Implements functionality of the replaceAll button on Advanced F&R.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37853 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Tommaso Cucinotta 2011-03-04 22:19:19 +00:00
parent aa431bf8bf
commit a17d3460f6
2 changed files with 20 additions and 13 deletions

View File

@ -170,7 +170,7 @@ static bool nextDocumentBuffer(Buffer * & buf)
LYXERR(Debug::FIND, "children.size()=" << children.size()); LYXERR(Debug::FIND, "children.size()=" << children.size());
ListOfBuffers::const_iterator it = ListOfBuffers::const_iterator it =
find(children.begin(), children.end(), buf); find(children.begin(), children.end(), buf);
LASSERT(it != children.end(), /**/) LASSERT(it != children.end(), /**/);
++it; ++it;
if (it == children.end()) { if (it == children.end()) {
buf = *children.begin(); buf = *children.begin();
@ -293,11 +293,12 @@ docstring getQuestionString(FindAndReplaceOptions const & opt)
} }
void FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt) /// Return true if a match was found
bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool replace_all)
{ {
BufferView * bv = view_.documentBufferView(); BufferView * bv = view_.documentBufferView();
if (!bv) if (!bv)
return; return false;
Buffer * buf = &bv->buffer(); Buffer * buf = &bv->buffer();
Buffer * buf_orig = &bv->buffer(); Buffer * buf_orig = &bv->buffer();
DocIterator cur_orig(bv->cursor()); DocIterator cur_orig(bv->cursor());
@ -331,8 +332,10 @@ void FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt)
LYXERR(Debug::FIND, "dispatched"); LYXERR(Debug::FIND, "dispatched");
if (bv->cursor().result().dispatched()) { if (bv->cursor().result().dispatched()) {
// New match found and selected (old selection replaced if needed) // New match found and selected (old selection replaced if needed)
if (replace_all)
continue;
view_.setBusy(false); view_.setBusy(false);
return; return true;
} }
// No match found in current buffer (however old selection might have been replaced) // No match found in current buffer (however old selection might have been replaced)
@ -375,20 +378,22 @@ void FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt)
cur_orig.pos() = cur_orig.lastpos(); cur_orig.pos() = cur_orig.lastpos();
bv->cursor().setCursor(cur_orig); bv->cursor().setCursor(cur_orig);
view_.setBusy(false); view_.setBusy(false);
return false;
} }
void FindAndReplaceWidget::findAndReplace( /// Return true if a match was found
bool FindAndReplaceWidget::findAndReplace(
bool casesensitive, bool matchword, bool backwards, bool casesensitive, bool matchword, bool backwards,
bool expandmacros, bool ignoreformat, bool replace, bool expandmacros, bool ignoreformat, bool replace,
bool keep_case) bool keep_case, bool replace_all)
{ {
Buffer & find_buf = find_work_area_->bufferView().buffer(); Buffer & find_buf = find_work_area_->bufferView().buffer();
docstring const & find_buf_name = find_buf.fileName().absoluteFilePath(); docstring const & find_buf_name = find_buf.fileName().absoluteFilePath();
if (find_buf.text().empty()) { if (find_buf.text().empty()) {
view_.message(_("Nothing to search")); view_.message(_("Nothing to search"));
return; return false;
} }
Buffer & repl_buf = replace_work_area_->bufferView().buffer(); Buffer & repl_buf = replace_work_area_->bufferView().buffer();
@ -420,15 +425,15 @@ void FindAndReplaceWidget::findAndReplace(
FindAndReplaceOptions opt(find_buf_name, casesensitive, matchword, FindAndReplaceOptions opt(find_buf_name, casesensitive, matchword,
!backwards, expandmacros, ignoreformat, !backwards, expandmacros, ignoreformat,
repl_buf_name, keep_case, scope); repl_buf_name, keep_case, scope);
findAndReplaceScope(opt); return findAndReplaceScope(opt, replace_all);
} }
void FindAndReplaceWidget::findAndReplace(bool backwards, bool replace) bool FindAndReplaceWidget::findAndReplace(bool backwards, bool replace, bool replace_all)
{ {
if (! view_.currentMainWorkArea()) { if (! view_.currentMainWorkArea()) {
view_.message(_("No open document(s) in which to search")); view_.message(_("No open document(s) in which to search"));
return; return false;
} }
// Finalize macros that are being typed, both in main document and in search or replacement WAs // Finalize macros that are being typed, both in main document and in search or replacement WAs
if (view_.currentWorkArea()->bufferView().cursor().macroModeClose()) if (view_.currentWorkArea()->bufferView().cursor().macroModeClose())
@ -439,13 +444,14 @@ void FindAndReplaceWidget::findAndReplace(bool backwards, bool replace)
// FIXME: create a Dialog::returnFocus() // FIXME: create a Dialog::returnFocus()
// or something instead of this: // or something instead of this:
view_.setCurrentWorkArea(view_.currentMainWorkArea()); view_.setCurrentWorkArea(view_.currentMainWorkArea());
findAndReplace(caseCB->isChecked(), return findAndReplace(caseCB->isChecked(),
wordsCB->isChecked(), wordsCB->isChecked(),
backwards, backwards,
expandMacrosCB->isChecked(), expandMacrosCB->isChecked(),
ignoreFormatCB->isChecked(), ignoreFormatCB->isChecked(),
replace, replace,
keepCaseCB->isChecked()); keepCaseCB->isChecked(),
replace_all);
} }
@ -471,6 +477,7 @@ void FindAndReplaceWidget::on_replacePB_clicked()
void FindAndReplaceWidget::on_replaceallPB_clicked() void FindAndReplaceWidget::on_replaceallPB_clicked()
{ {
findAndReplace(searchbackCB->isChecked(), true, true);
replace_work_area_->setFocus(); replace_work_area_->setFocus();
} }

View File

@ -140,7 +140,7 @@
<item row="6" column="1" > <item row="6" column="1" >
<widget class="QPushButton" name="replaceallPB" > <widget class="QPushButton" name="replaceallPB" >
<property name="enabled" > <property name="enabled" >
<bool>false</bool> <bool>true</bool>
</property> </property>
<property name="sizePolicy" > <property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >