ide: Refining incremental search

git-svn-id: svn://ultimatepp.org/upp/trunk@7494 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2014-07-08 07:38:58 +00:00
parent 6f3c5c0307
commit 41b7ad364a
5 changed files with 22 additions and 13 deletions

View file

@ -233,7 +233,7 @@ void CodeEditor::SelectionChanged()
Refresh();
}
if(!foundsel) {
if(!persistent_find_replace && !findreplace.incremental)
if(!persistent_find_replace)
CloseFindReplace();
found = false;
notfoundfw = notfoundbk = false;
@ -618,7 +618,7 @@ void CodeEditor::FindWord(bool back)
{
WString I = GetI();
if(!IsNull(I))
Find(back, I, true, false, false, false);
Find(back, I, true, false, false, false, false);
}
void CodeEditor::SetI(Ctrl *edit)

View file

@ -283,6 +283,7 @@ protected:
void ReplaceWildcard();
void InsertWildcard(int c);
void IncrementalFind();
void NoFindError();
void CheckSyntaxRefresh(int pos, const WString& text);
void SetFound(int fi, int type, const WString& text);
@ -328,6 +329,7 @@ public:
Callback WhenAnnotationMove;
Callback WhenAnnotationClick;
Callback WhenAnnotationRightClick;
Callback WhenOpenFindReplace;
FrameTop<Button> topsbbutton;
FrameTop<Button> topsbbutton1;
@ -345,8 +347,8 @@ public:
void FindReplace(bool pick_selection, bool pick_text, bool replace);
bool FindFrom(int pos, bool back, const wchar *text, bool wholeword, bool ignorecase, bool wildcards, bool block);
bool Find(bool back, const wchar *text, bool wholeword, bool ignorecase, bool wildcards,
bool block);
bool Find(bool back = false, bool blockreplace = false, bool replace = false);
bool block, bool incremental);
bool Find(bool back = false, bool blockreplace = false, bool replace = false, bool incremental = false);
bool GetStringRange(int cursor, int& b, int &e) const;
bool GetStringRange(int& b, int &e) const { return GetStringRange(GetCursor(), b, e); }
bool FindString(bool back);

View file

@ -166,7 +166,7 @@ int CodeEditor::Match(const wchar *f, const wchar *s, int line, bool we, bool ig
}
bool CodeEditor::Find(bool back, const wchar *text, bool wholeword, bool ignorecase,
bool wildcards, bool block)
bool wildcards, bool block, bool incremental)
{
if(notfoundfw) MoveTextBegin();
if(notfoundbk) MoveTextEnd();
@ -176,6 +176,8 @@ bool CodeEditor::Find(bool back, const wchar *text, bool wholeword, bool ignorec
else
GetSelection(cursor, pos);
pos = cursor;
if(incremental)
pos = 0;
return FindFrom(pos, back, text, wholeword, ignorecase, wildcards, block);
}
@ -274,12 +276,17 @@ void CodeEditor::FindReplaceAddHistory()
findreplace.replace.AddHistory();
}
bool CodeEditor::Find(bool back, bool blockreplace, bool replace)
void CodeEditor::NoFindError()
{
findreplace.find.Error(false);
findreplace.info.SetLabel("&Find");
}
bool CodeEditor::Find(bool back, bool blockreplace, bool replace, bool incremental)
{
NoFindError();
if(Find(back, (WString)~findreplace.find, findreplace.wholeword,
findreplace.ignorecase, findreplace.wildcards, blockreplace)) {
findreplace.ignorecase, findreplace.wildcards, blockreplace, incremental)) {
if(!blockreplace) {
if(!findreplace.IsOpen())
OpenNormalFindReplace(replace);
@ -468,6 +475,8 @@ void CodeEditor::OpenNormalFindReplace(bool replace)
findreplace.close <<= THISBACK(CloseFindReplace);
if(!findreplace.IsOpen())
AddFrame(findreplace);
WhenOpenFindReplace();
IncrementalFind();
}
void CodeEditor::FindReplace(bool pick_selection, bool pick_text, bool replace)
@ -641,14 +650,11 @@ void CodeEditor::CloseFindReplace()
void CodeEditor::IncrementalFind()
{
NoFindError();
findreplace.Sync();
if(!findreplace.incremental || findreplace.GetTopCtrl() == &findreplace) // || we are block replace
return;
int l, h;
GetSelection(l, h);
ClearSelection();
SetCursor(min(l, h));
Find();
Find(false, false, false, true);
}
void CodeEditor::DoFind()

View file

@ -195,7 +195,7 @@ void Ide::MacroFind(EscEscape& e)
bool whole_word = (n > 2 && e.Int(2) > 0);
bool ignore_case = (n > 3 && e.Int(3) > 0);
bool wildcards = (n > 4 && e.Int(4) > 0);
e = editor.Find(!down, text, whole_word, ignore_case, wildcards, false);
e = editor.Find(!down, text, whole_word, ignore_case, wildcards, false, false);
}
void Ide::MacroReplace(EscEscape& e)

View file

@ -408,6 +408,7 @@ Ide::Ide()
editor.WhenAction = THISBACK(AddHistory);
editor.WhenBar = THISBACK(EditorMenu);
editor.WhenFontScroll = THISBACK(EditorFontScroll);
editor.WhenOpenFindReplace = THISBACK(AddHistory);
macro_api = MacroEditor();