diff --git a/uppsrc/CppBase/CppBase.h b/uppsrc/CppBase/CppBase.h index de413e40d..e72ad92a4 100644 --- a/uppsrc/CppBase/CppBase.h +++ b/uppsrc/CppBase/CppBase.h @@ -217,6 +217,7 @@ struct CppItem { String qitem; String item; String name; + String uname; String natural; String type; String qtype; diff --git a/uppsrc/CppBase/Qualify.cpp b/uppsrc/CppBase/Qualify.cpp index 2fe09480f..e6ee0956e 100644 --- a/uppsrc/CppBase/Qualify.cpp +++ b/uppsrc/CppBase/Qualify.cpp @@ -241,6 +241,8 @@ void QualifyPass2(CppBase& base) bool sort = false; for(int i = 0; i < n.GetCount(); i++) { CppItem& m = n[i]; + if(m.uname.GetCount() == 0 && m.name.GetCount()) + m.uname = ToUpper(m.name); if(m.serial != base.serial && !m.IsType()) { sort = true; m.serial = base.serial; diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index 1db8f322d..9054255c3 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -47,7 +47,8 @@ AssistEditor::AssistEditor() scopepane.Add(browser.search_scope.HSizePos().TopPos(0, cy)); scopepane.Add(browser.scope.HSizePos().VSizePos(cy + 2, 0)); itempane.Add(browser.search_item.HSizePos().TopPos(0, cy)); - itempane.Add(browser.item.HSizePos().VSizePos(cy + 2, 0)); + itempane.Add(browser.item.HSizePos().VSizePos(cy + 2, cy + 2)); + itempane.Add(browser.search.HSizePos().BottomPos(0, cy)); scope_item.Vert(scopepane, itempane); scope_item.SetPos(3000); navigatorpane.Add(scope_item); diff --git a/uppsrc/ide/Browser/Browser.h b/uppsrc/ide/Browser/Browser.h index 1b796f7a5..22e824bf9 100644 --- a/uppsrc/ide/Browser/Browser.h +++ b/uppsrc/ide/Browser/Browser.h @@ -134,6 +134,7 @@ public: ArrayCtrl item; EditString search_scope; EditString search_item; + EditString search; void Load(); void LoadScope(); diff --git a/uppsrc/ide/Browser/CodeBrowser.cpp b/uppsrc/ide/Browser/CodeBrowser.cpp index 7dda7ef5d..0e92db60b 100644 --- a/uppsrc/ide/Browser/CodeBrowser.cpp +++ b/uppsrc/ide/Browser/CodeBrowser.cpp @@ -1,21 +1,52 @@ #include "Browser.h" +bool MatchCib(const String& s, const String& match) +{ + int q = ToUpper(s).Find(match); + return q > 0 && !iscid(s[q - 1]) || q == 0; +} + +bool HasItem(const Array& n, const String& m) +{ + if(IsNull(m)) + return true; + for(int i = 0; i < n.GetCount(); i++) + if(n[i].uname.StartsWith(m)) + return true; + return false; +} + +bool HasItem(int file, const String& m) +{ + if(IsNull(m)) + return true; + int q = BrowserBase().Find(""); + if(q < 0) + return false; + const Array& n = BrowserBase()[q]; + for(int i = 0; i < n.GetCount(); i++) + if(n[i].file == file && n[i].uname.StartsWith(m)) + return true; + return false; +} + void CodeBrowser::Load() { + String find = ToUpper((String)~search); String match = ToUpper((String)~search_scope); Vector txt; Vector ndx; Index fi; for(int i = 0; i < BrowserBase().GetCount(); i++) { String s = BrowserBase().GetKey(i); + const Array& n = BrowserBase()[i]; if(s.GetCount()) { - if(ToUpper(s).Find(match) >= 0) { + if(MatchCib(s, match) && HasItem(n, find)) { txt.Add(s); ndx.Add(s); } } else { - const Array& n = BrowserBase()[i]; int i = 0; while(i < n.GetCount()) { fi.FindAdd(n[i].file); @@ -26,7 +57,7 @@ void CodeBrowser::Load() for(int i = 0; i < fi.GetCount(); i++) { String s = GetCppFile(fi[i]); s = '<' + GetFileName(GetFileFolder(s)) + '/' + GetFileName(s) + '>'; - if(ToUpper(s).Find(match) >= 0) { + if(MatchCib(s, match) && HasItem(fi[i], find)) { txt.Add(s); ndx.Add(fi[i]); } @@ -72,7 +103,8 @@ void GatherMethods(const String& type, VectorMap& inherited, bool void CodeBrowser::LoadScope() { - String match = ~search_item; + String find = ToUpper((String)~search); + String match = ToUpper((String)~search_item); Value key = item.GetKey(); int sc = item.GetCursorSc(); item.Clear(); @@ -90,7 +122,7 @@ void CodeBrowser::LoadScope() for(int i = 0; i < n.GetCount(); i = FindNext(n, i)) { CppItemInfo m; (CppItem&) m = n[i]; - if((file < 0 || m.file == file) && ToUpper(m.name).Find(match) >= 0) { + if((file < 0 || m.file == file) && m.uname.StartsWith(match) && m.uname.StartsWith(find)) { int q = inherited.Find(m.qitem); if(q >= 0) { m.over = true; @@ -163,6 +195,9 @@ CodeBrowser::CodeBrowser() item.NoHeader(); item.SetLineCy(BrowserFont().Info().GetHeight() + 3); search_item.SetFilter(SearchItemFilter); - search_item.NullText("Search id "); + search_item.NullText("Search in scope "); search_item <<= THISBACK(LoadScope); + search.NullText("Find "); + search.SetFilter(SearchItemFilter); + search <<= THISBACK(Load); }