From 5e8fbcfab3a9259cc63e062125fcea71b2ed9e27 Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 18 Jul 2014 13:26:02 +0000 Subject: [PATCH] ide: Incremental find/replace from cursor improved git-svn-id: svn://ultimatepp.org/upp/trunk@7523 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CodeEditor/CInit.cpp | 4 ++-- uppsrc/CodeEditor/CRegister.icpp | 2 +- uppsrc/CodeEditor/CodeEditor.h | 2 +- uppsrc/CodeEditor/FindReplace.cpp | 19 +++++++------------ uppsrc/Core/Diag.h | 1 + uppsrc/Core/Util.h | 10 ++++++++++ 6 files changed, 22 insertions(+), 16 deletions(-) diff --git a/uppsrc/CodeEditor/CInit.cpp b/uppsrc/CodeEditor/CInit.cpp index 766d71a1b..0e461da03 100644 --- a/uppsrc/CodeEditor/CInit.cpp +++ b/uppsrc/CodeEditor/CInit.cpp @@ -213,9 +213,9 @@ void CSyntax::InitKeywords() "RLOG", "RLOGF", "RDUMP", "RDUMPC", "RDUMPCC", "RDUMPCCC", "RDUMPM", "LOGBEGIN", "LOGEND", "LOGBLOCK", "LOGHEXDUMP", "LOGSRCPOS", "RLOGBEGIN", "RLOGEND", "RLOGBLOCK", "RLOGHEXDUMP", "RLOGSRCPOS", "RQUOTE", - "RTIMING", "TIMING", "LTIMING", "DTIMING", + "RTIMING", "TIMING", "LTIMING", "DTIMING", "RTIMESTOP", "TIMESTOP", "LTIMESTOP", "LOGHEX", "DUMPHEX", "DLOGHEX", "DDUMPHEX", "RLOGHEX", "RDUMPHEX", "LLOGHEX", "LDUMPHEX", - "DEBUGCODE", + "DEBUGCODE", NULL }; static const char *sql_base[] = { diff --git a/uppsrc/CodeEditor/CRegister.icpp b/uppsrc/CodeEditor/CRegister.icpp index 009ecc2b7..a0b110d33 100644 --- a/uppsrc/CodeEditor/CRegister.icpp +++ b/uppsrc/CodeEditor/CRegister.icpp @@ -27,7 +27,7 @@ INITBLOCK { RegisterCSyntax("cs", CSyntax::HIGHLIGHT_CS, "*.cs", "C#"); RegisterCSyntax("json", CSyntax::HIGHLIGHT_JSON, "*.json", "JSON"); RegisterCSyntax("css", CSyntax::HIGHLIGHT_CSS, "*.css", "Cascading Style Sheet"); - RegisterCSyntax("sql", CSyntax::HIGHLIGHT_SQL, "*.sql", "SQL script"); + RegisterCSyntax("sql", CSyntax::HIGHLIGHT_SQL, "*.sql *.ddl", "SQL script"); RegisterCSyntax("lay", CSyntax::HIGHLIGHT_LAY, "*.lay", "U++ layout (.lay)"); RegisterCSyntax("sch", CSyntax::HIGHLIGHT_SCH, "*.sch", "U++ SQL schema (.sch)"); RegisterCSyntax("t", CSyntax::HIGHLIGHT_T, "*.t *.jt", "U++ translation (.t)"); diff --git a/uppsrc/CodeEditor/CodeEditor.h b/uppsrc/CodeEditor/CodeEditor.h index 58c6590ef..afc5ab035 100644 --- a/uppsrc/CodeEditor/CodeEditor.h +++ b/uppsrc/CodeEditor/CodeEditor.h @@ -235,7 +235,7 @@ protected: bool persistent_find_replace; bool do_ff_restore_pos; - int ff_restore_pos; + int ff_start_pos; FindReplaceDlg findreplace; diff --git a/uppsrc/CodeEditor/FindReplace.cpp b/uppsrc/CodeEditor/FindReplace.cpp index 28f655f7c..3c0e502af 100644 --- a/uppsrc/CodeEditor/FindReplace.cpp +++ b/uppsrc/CodeEditor/FindReplace.cpp @@ -18,7 +18,7 @@ void CodeEditor::InitFindReplace() findreplace.find <<= findreplace.wholeword <<= findreplace.wildcards <<= findreplace.incremental <<= findreplace.regexp <<= findreplace.ignorecase <<= THISBACK(IncrementalFind); - ff_restore_pos = -1; + ff_start_pos = -1; } FindReplaceDlg::FindReplaceDlg() @@ -538,7 +538,7 @@ void CodeEditor::FindReplace(bool pick_selection, bool pick_text, bool replace) if(findreplace.IsOpen()) CloseFindReplace(); - ff_restore_pos = GetCursor(); + ff_start_pos = GetCursor(); replacei = 0; WString find_text; @@ -693,9 +693,9 @@ void CodeEditor::CloseFindReplace() void CodeEditor::EscapeFindReplace() { CloseFindReplace(); - if(ff_restore_pos >= 0 && ff_restore_pos < GetLength() && findreplace.incremental && do_ff_restore_pos) { - SetCursor(ff_restore_pos); - ff_restore_pos = -1; + if(ff_start_pos >= 0 && ff_start_pos < GetLength() && findreplace.incremental && do_ff_restore_pos) { + SetCursor(ff_start_pos); + ff_start_pos = -1; } } @@ -705,13 +705,8 @@ void CodeEditor::IncrementalFind() findreplace.Sync(); if(!findreplace.incremental || findreplace.GetTopCtrl() == &findreplace) // || we are block replace return; - int pos = 0; - if(findreplace.incremental_from_cursor) { - int l, h; - if(GetSelection(l, h)) - pos = l; - } - if(!FindFrom(pos, false, false)) + if(!FindFrom(ff_start_pos >= 0 && ff_start_pos < GetLength() + && findreplace.incremental_from_cursor ? ff_start_pos : 0, false, false)) NotFound(); } diff --git a/uppsrc/Core/Diag.h b/uppsrc/Core/Diag.h index d9e0609ce..5f5de159c 100644 --- a/uppsrc/Core/Diag.h +++ b/uppsrc/Core/Diag.h @@ -69,6 +69,7 @@ void __LOGF__(const char *format, ...); #define HITCOUNT(x) RHITCOUNT(x) #define ACTIVATE_TIMING() UPP::TimingInspector::Activate(true); #define DEACTIVATE_TIMING() UPP::TimingInspector::Activate(false); +#define TIMESTOP(x) RTIMESTOP(x) #define DLOG(x) LOG(x) #define DDUMP(x) DUMP(x) diff --git a/uppsrc/Core/Util.h b/uppsrc/Core/Util.h index 54bf8da81..49ac1b6dc 100644 --- a/uppsrc/Core/Util.h +++ b/uppsrc/Core/Util.h @@ -23,6 +23,16 @@ public: TimeStop(); }; +struct TimeStopper { + const char *name; + TimeStop tm; + + TimeStopper(const char *name) : name(name) {} + ~TimeStopper() { RLOG(name << " " << tm); } +}; + +#define RTIMESTOP(name) TimeStopper COMBINE(sTmStop, __LINE__)(name); + void SetAssertFailedHook(void (*h)(const char *)); void ReloadIniFile();