From 625243c57a62df6194f1bf668166fe348e6dde04 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 23 Aug 2014 17:04:54 +0000 Subject: [PATCH] ide: Redesigning Navigator git-svn-id: svn://ultimatepp.org/upp/trunk@7595 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CppBase/Pre.cpp | 9 + uppsrc/CtrlLib/ArrayCtrl.cpp | 6 +- uppsrc/CtrlLib/ArrayCtrl.h | 4 +- uppsrc/CtrlLib/EditField.cpp | 1 + uppsrc/CtrlLib/src.tpp/ArrayCtrl$en-us.tpp | 10 +- uppsrc/ide/Assist.cpp | 18 +- uppsrc/ide/Browser/Browser.iml | 136 +++++----- uppsrc/ide/Browser/ItemDisplay.cpp | 4 +- uppsrc/ide/Navigator.cpp | 284 +++++++++++++++++---- uppsrc/ide/ide.h | 51 ++-- 10 files changed, 373 insertions(+), 150 deletions(-) diff --git a/uppsrc/CppBase/Pre.cpp b/uppsrc/CppBase/Pre.cpp index 2a308bede..f782ccf46 100644 --- a/uppsrc/CppBase/Pre.cpp +++ b/uppsrc/CppBase/Pre.cpp @@ -26,6 +26,15 @@ const String& GetCppFile(int i) static String x; return x; } + +Vector GetCppFiles() +{ + INTERLOCKED_(cpp_file_mutex) { + return clone(cpp_file.GetKeys()); + } + return Vector(); +} + /* void CppPos::Serialize(Stream& s) { diff --git a/uppsrc/CtrlLib/ArrayCtrl.cpp b/uppsrc/CtrlLib/ArrayCtrl.cpp index 5658a3e51..0f4d5760b 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.cpp +++ b/uppsrc/CtrlLib/ArrayCtrl.cpp @@ -1328,7 +1328,7 @@ void ArrayCtrl::SetCursorEditFocus() } bool ArrayCtrl::SetCursor0(int i, bool dosel) { - if(nocursor || GetCount() == 0 || i >= 0 && i < array.GetCount() && !array[i].enabled) + if(nocursor || GetCount() == 0 || !IsLineEnabled(i)) return false; i = minmax(i, 0, GetCount() - 1); bool sel = false; @@ -1436,7 +1436,9 @@ void ArrayCtrl::EnableLine(int i, bool en) bool ArrayCtrl::IsLineEnabled(int i) const { - return i < 0 ? false : i < array.GetCount() ? array[i].enabled : true; + bool b = i < 0 ? false : i < array.GetCount() ? array[i].enabled : true; + WhenLineEnabled(i, b); + return b; } void ArrayCtrl::Select(int i, int count, bool sel) diff --git a/uppsrc/CtrlLib/ArrayCtrl.h b/uppsrc/CtrlLib/ArrayCtrl.h index 210d5f77f..9d7170cbf 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.h +++ b/uppsrc/CtrlLib/ArrayCtrl.h @@ -353,6 +353,8 @@ public: Callback WhenScroll; Callback WhenHeaderLayout; + Callback2 WhenLineEnabled; + Callback WhenDrag; Callback3 WhenDropCell; Callback2 WhenDropInsert; @@ -442,7 +444,7 @@ public: void EnableLine(int i, bool e); void DisableLine(int i) { EnableLine(i, false); } bool IsLineEnabled(int i) const; - bool IsLineDisabled(int i) const { return IsLineEnabled(i); } + bool IsLineDisabled(int i) const { return !IsLineEnabled(i); } Vector ReadRow(int i) const; // deprecated name Vector GetLine(int i) const { return ReadRow(i); } diff --git a/uppsrc/CtrlLib/EditField.cpp b/uppsrc/CtrlLib/EditField.cpp index f9f1d5592..c3bbf1f2a 100644 --- a/uppsrc/CtrlLib/EditField.cpp +++ b/uppsrc/CtrlLib/EditField.cpp @@ -790,6 +790,7 @@ void EditField::LeftDrag(Point p, dword flags) String EditField::GetSelectionData(const String& fmt) const { + if(password) return String(); if(fsell >= 0 && fselh >= 0 && fsell <= text.GetCount() && fselh <= text.GetCount()) return GetTextClip(text.Mid(fsell, fselh - fsell), fmt); return String(); diff --git a/uppsrc/CtrlLib/src.tpp/ArrayCtrl$en-us.tpp b/uppsrc/CtrlLib/src.tpp/ArrayCtrl$en-us.tpp index 7317fc878..fe6bd881e 100644 --- a/uppsrc/CtrlLib/src.tpp/ArrayCtrl$en-us.tpp +++ b/uppsrc/CtrlLib/src.tpp/ArrayCtrl$en-us.tpp @@ -2506,6 +2506,14 @@ in the cell editors and react to specific situations accordingly.&] [s4;%- &] [s5;:ArrayCtrl`:`:WhenHeaderLayout:%- [_^Callback^ Callback]_[* WhenHeaderLayout]&] [s2; Called when header changes.&] +[s3; &] +[s4;%- &] +[s5;:ArrayCtrl`:`:WhenLineEnabled:%- [_^Callback2^ Callback2]<[@(0.0.255) int], +[@(0.0.255) bool`&]>_[* WhenLineEnabled]&] +[s2; Provides additional means to enable/disable lines in addition +to `"EnableLine`" interface. This is especially useful when using +SetVirtualCount. First parameter is the line number, second is +reference to enable status.&] [s0; &] [s0;%- &] [ {{10000t/25b/25@3 [s0;%- [*@(229)4 ArrayCtrl`::IdInfo]]}}&] @@ -2528,7 +2536,7 @@ added to the array programmatically (e.g. using [* Add] or [* Insert]), these default values are not used.&] [s7; [%-*C@3 v]-|default source index value&] [s7; [*/ Return value]-|[* `*this]&] -[s3; &] +[s3;%- &] [s4;%- &] [s5;:ArrayCtrl`:`:IdInfo`:`:InsertValue`(ValueGen`&`):%- [_^ArrayCtrl`:`:IdInfo^ IdInfo ][@(0.0.255) `&]_[* InsertValue]([_^ValueGen^ ValueGen][@(0.0.255) `&]_[*@3 g])&] diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index adbdc9951..41dffe709 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -20,11 +20,11 @@ class IndexSeparatorFrameCls : public CtrlFrame { int CharFilterNavigator(int c) { - return c == '.' ? ':' : IsAlNum(c) || c == '_' || c == ':' ? ToUpper(c) : 0; + return c == ':' ? '.' : IsAlNum(c) || c == '_' || c == '.' ? ToUpper(c) : 0; } AssistEditor::AssistEditor() -: navidisplay(item) +: navidisplay(litem) { assist.NoHeader(); assist.NoGrid(); @@ -47,14 +47,22 @@ AssistEditor::AssistEditor() int cy = search.GetMinSize().cy; navigatorpane.Add(search.TopPos(0, cy).HSizePos()); - navigatorpane.Add(list.VSizePos(cy, 0).HSizePos()); + navigatorpane.Add(navigator_splitter.VSizePos(cy, 0).HSizePos()); + scope.NoHeader(); + scope.AddColumn().SetDisplay(Single()); + scope.NoWantFocus(); + scope.WhenSel = THISBACK(Scope); + navigator_splitter.Vert(scope, list); + navigator_splitter.SetPos(2000); + list.NoHeader(); list.AddRowNumColumn().SetDisplay(navidisplay); - list.SetLineCy(2 * GetStdFontCy()); + list.SetLineCy(max(16, GetStdFontCy())); list.NoWantFocus(); list.WhenSel = THISBACK(Navigate); + list.WhenLineEnabled = THISBACK(ListLineEnabled); - search <<= THISBACK(Search); + search <<= THISBACK(TriggerSearch); search.SetFilter(CharFilterNavigator); search.WhenEnter = THISBACK(NavigatorEnter); diff --git a/uppsrc/ide/Browser/Browser.iml b/uppsrc/ide/Browser/Browser.iml index d00d278c8..8757f38e6 100644 --- a/uppsrc/ide/Browser/Browser.iml +++ b/uppsrc/ide/Browser/Browser.iml @@ -31,76 +31,70 @@ IMAGE_ID(Ref) IMAGE_ID(Query) IMAGE_BEGIN_DATA -IMAGE_DATA(120,156,237,90,93,72,28,87,20,62,49,90,101,215,182,226,178,245,37,196,151,22,233,74,34,245,161,90,20,92,43,165) -IMAGE_DATA(88,104,197,159,209,152,60,164,37,84,17,130,186,41,132,164,133,236,82,74,108,17,219,7,87,23,242,131,74,3,150,73) -IMAGE_DATA(109,40,21,242,82,88,3,121,8,13,45,5,183,208,150,64,74,158,138,121,42,20,108,160,233,233,61,51,115,215,153,221) -IMAGE_DATA(59,51,119,118,76,226,110,246,192,225,238,189,243,125,231,156,123,231,236,153,59,63,16,128,0,216,139,162,232,42,146,88) -IMAGE_DATA(12,224,192,1,253,247,220,156,174,36,52,70,199,184,80,255,222,61,221,142,170,234,74,191,105,140,243,185,208,49,68,253) -IMAGE_DATA(24,41,253,166,49,46,237,237,186,109,142,51,43,141,209,49,194,200,226,100,253,122,153,135,236,186,72,172,179,243,201,177) -IMAGE_DATA(149,96,67,67,67,170,177,177,49,77,26,12,6,143,217,224,142,51,193,120,60,174,105,75,75,11,155,52,196,77,122,156) -IMAGE_DATA(227,86,87,59,240,238,221,37,161,206,207,135,182,25,102,144,112,233,244,18,178,165,19,234,212,20,160,97,115,215,113,215) -IMAGE_DATA(175,247,97,58,13,66,29,31,207,226,130,225,48,164,234,234,32,45,210,218,90,72,17,70,122,149,115,78,78,152,105,175) -IMAGE_DATA(161,201,166,166,38,236,100,122,16,224,1,235,143,25,227,26,70,81,20,76,38,231,112,120,184,31,103,207,156,193,63,223) -IMAGE_DATA(232,193,201,234,74,60,125,58,134,209,104,148,130,125,139,112,132,65,236,101,216,6,92,123,161,30,255,27,173,192,216,187) -IMAGE_DATA(251,240,230,205,87,112,112,240,109,142,75,146,29,194,12,15,3,174,31,1,252,227,62,224,235,147,128,177,88,16,15,29) -IMAGE_DATA(122,153,112,11,20,207,204,204,140,166,125,125,125,56,191,14,216,131,213,88,57,249,28,195,197,180,113,194,180,181,181,225) -IMAGE_DATA(198,198,134,166,211,211,211,248,252,122,53,86,224,20,86,77,191,143,43,43,43,218,120,123,123,59,178,4,123,48,52,52) -IMAGE_DATA(132,35,35,253,216,218,122,24,225,187,83,8,63,253,141,21,135,79,98,111,111,15,14,12,244,107,24,154,59,205,139,98) -IMAGE_DATA(166,120,224,252,58,214,188,250,47,214,215,143,225,226,226,65,236,238,238,68,190,62,52,119,154,23,197,92,93,251,45,142) -IMAGE_DATA(141,223,97,177,14,104,152,230,230,102,62,223,176,209,146,46,84,85,181,50,255,175,101,125,101,49,130,127,142,26,137,68) -IMAGE_DATA(180,5,206,85,118,12,205,184,68,34,145,93,4,179,150,2,142,198,220,112,38,140,45,142,99,68,246,204,235,76,199,194) -IMAGE_DATA(225,176,117,157,11,44,107,92,208,218,165,186,201,107,187,165,134,230,224,248,113,142,119,194,153,213,175,61,185,121,36,104) -IMAGE_DATA(49,153,198,141,22,196,170,73,132,57,37,12,181,160,171,25,163,8,48,92,20,51,134,251,229,62,53,191,133,156,156,151) -IMAGE_DATA(0,222,60,25,10,165,87,151,150,174,117,48,225,227,21,0,251,223,3,248,254,243,209,209,52,203,128,104,61,192,139,19) -IMAGE_DATA(0,183,63,11,4,240,214,194,194,118,55,147,125,12,115,4,224,235,111,70,70,240,82,42,181,188,159,9,113,171,88,158) -IMAGE_DATA(116,3,156,251,52,16,120,120,251,226,197,127,222,1,88,252,241,194,133,135,167,98,177,15,56,198,44,93,0,31,125,194) -IMAGE_DATA(38,176,220,209,129,31,78,78,158,23,197,73,254,207,2,220,191,118,244,40,158,13,133,126,251,121,109,237,175,78,38,102) -IMAGE_DATA(76,45,64,3,187,74,255,126,165,167,7,191,188,124,249,171,103,216,208,68,32,112,99,115,109,109,219,60,55,22,243,213) -IMAGE_DATA(37,86,10,127,221,220,188,83,199,132,198,170,1,158,253,184,171,235,198,165,100,242,10,199,177,122,244,197,213,217,217,31) -IMAGE_DATA(88,9,107,54,251,33,108,234,196,137,91,50,235,27,170,169,209,55,20,117,64,126,80,54,195,138,73,236,50,94,248,15) -IMAGE_DATA(16,242,109,183,10,134,150,249,165,205,247,151,63,197,39,229,98,96,207,119,73,165,50,191,196,249,146,90,58,82,46,6) -IMAGE_DATA(246,124,209,205,146,195,141,83,153,95,98,124,73,45,29,41,130,98,32,188,105,149,230,41,10,66,38,163,95,11,168,165) -IMAGE_DATA(190,156,157,29,94,174,210,184,115,34,40,154,31,167,235,146,30,135,93,12,246,190,229,98,112,223,34,59,111,147,253,250) -IMAGE_DATA(247,59,127,231,24,220,215,31,192,255,249,183,218,241,158,127,197,39,165,94,12,20,5,48,147,209,211,136,90,234,75,218) -IMAGE_DATA(201,242,114,149,198,193,165,24,144,31,167,191,162,17,135,109,49,176,243,45,25,131,76,41,112,228,251,244,239,119,254,142) -IMAGE_DATA(49,72,172,63,128,255,243,111,177,3,229,98,176,39,100,79,21,131,173,173,168,232,29,71,158,111,209,159,129,184,234,47) -IMAGE_DATA(42,70,183,182,92,119,6,185,190,45,92,137,157,129,35,87,98,103,192,253,219,114,93,118,6,52,127,91,174,228,206,128) -IMAGE_DATA(214,89,200,45,239,12,30,141,148,139,129,173,236,202,206,128,112,145,8,160,170,234,45,128,183,157,1,231,112,165,190,151) -IMAGE_DATA(157,1,249,53,243,169,239,101,103,80,160,127,191,243,183,196,80,222,25,60,38,41,23,3,91,177,36,99,2,10,43,6) -IMAGE_DATA(170,98,229,243,190,167,219,4,197,224,43,210,49,100,125,218,169,167,219,4,239,254,253,206,63,47,134,132,183,245,7,40) -IMAGE_DATA(23,3,239,82,234,197,128,62,71,90,94,94,214,158,30,83,107,250,60,201,181,24,112,94,174,210,56,184,20,3,242,227) -IMAGE_DATA(244,36,219,136,195,182,24,216,249,150,140,193,245,73,186,203,211,116,191,254,253,206,223,49,6,137,245,7,240,127,254,45) -IMAGE_DATA(118,160,92,12,128,190,53,83,32,193,22,129,107,68,114,49,56,143,182,169,84,201,209,104,85,9,59,116,76,53,225,121) -IMAGE_DATA(53,87,76,246,84,27,27,156,155,214,241,244,65,110,134,221,43,146,80,75,125,205,78,218,198,70,194,176,175,93,81,116) -IMAGE_DATA(94,174,100,180,123,79,3,151,48,37,37,247,173,234,126,157,68,139,67,205,137,65,194,183,99,12,9,99,157,181,171,168) -IMAGE_DATA(187,104,107,138,57,124,63,254,253,206,223,239,250,239,198,249,247,155,127,187,145,255,34,59,94,255,127,133,72,165,86,12) -IMAGE_DATA(236,197,148,56,194,62,236,84,76,97,255,73,243,61,201,99,218,38,229,125,180,235,133,75,217,172,170,170,158,213,222,108) -IMAGE_DATA(100,185,36,30,109,88,184,92,36,109,8,185,146,54,28,185,18,54,92,185,102,27,144,159,56,126,253,251,157,255,110,172) -IMAGE_DATA(191,208,134,223,28,42,128,155,181,1,197,176,197,114,171,140,224,94,121,246,122,95,94,30,77,101,244,99,143,114,152,38) -IMAGE_DATA(83,168,141,98,230,235,220,157,71,191,133,219,40,206,249,239,5,190,110,163,112,110,17,75,17,60,77,34,241,123,153,65) -IMAGE_DATA(117,72,184,37,144,242,173,68,216,205,80,156,221,244,68,10,186,76,98,102,34,163,241,169,245,24,131,238,251,28,106,124) -IMAGE_DATA(106,61,198,160,251,54,241,61,196,96,245,29,247,28,131,213,119,220,83,12,98,223,242,49,104,231,91,227,219,168,75,62) -IMAGE_DATA(160,7,45,29,121,106,138,129,90,240,201,203,190,51,145,120,55,34,244,109,126,207,225,49,134,188,47,89,60,198,144,247) -IMAGE_DATA(226,214,67,12,182,159,148,73,198,240,68,63,231,51,191,92,23,169,75,62,60,149,197,224,127,104,82,250,82,0,0,0) -IMAGE_END_DATA(1632, 22) +IMAGE_DATA(120,156,237,91,93,104,21,71,20,62,70,211,200,77,218,134,132,219,188,4,125,105,145,222,160,161,62,212,148,8,38,13) +IMAGE_DATA(165,164,208,6,53,155,248,243,96,139,84,81,36,230,90,16,109,193,13,165,104,75,72,251,96,98,192,31,18,169,96,185) +IMAGE_DATA(54,149,210,128,47,133,171,224,131,84,90,10,222,66,91,4,139,79,37,62,21,10,86,168,61,157,179,187,115,179,63,51) +IMAGE_DATA(179,51,27,99,246,234,253,224,176,187,179,223,156,115,230,204,158,153,189,103,19,200,64,6,228,176,44,87,68,200,231,1) +IMAGE_DATA(90,91,221,243,177,49,87,8,212,70,247,56,232,250,238,93,87,79,161,224,10,157,83,27,239,207,65,247,16,221,123,36) +IMAGE_DATA(116,78,109,28,29,29,174,110,206,243,11,181,209,61,226,232,242,116,237,154,140,67,55,46,26,113,86,79,142,20,245,45) +IMAGE_DATA(45,45,147,171,87,175,46,146,212,215,215,239,148,240,118,49,160,109,219,142,180,183,183,179,65,131,237,147,93,156,119,241) +IMAGE_DATA(98,39,222,185,51,37,148,147,39,155,239,51,206,86,226,21,139,83,200,66,39,148,131,7,1,61,157,143,156,119,229,74) +IMAGE_DATA(31,22,139,32,148,189,123,203,188,250,108,22,38,27,27,161,40,146,134,6,152,36,142,118,148,67,147,147,101,210,235,201) +IMAGE_DATA(248,154,53,107,112,35,147,85,0,15,216,245,30,175,221,225,88,150,133,227,227,99,56,48,176,25,71,143,28,193,63,223) +IMAGE_DATA(232,193,161,186,21,120,248,112,30,187,186,186,200,217,183,136,71,28,196,94,198,109,193,153,23,154,240,191,237,53,152,127) +IMAGE_DATA(119,25,94,191,254,10,110,221,250,54,231,141,147,30,226,12,12,0,206,110,3,252,227,30,224,235,67,128,249,124,61,174) +IMAGE_DATA(93,251,50,241,38,200,159,19,39,78,56,210,215,215,135,39,103,1,123,176,14,87,12,61,199,120,121,167,157,56,27,54) +IMAGE_DATA(108,192,171,87,175,58,50,60,60,140,207,207,214,97,13,30,196,218,225,247,241,252,249,243,78,123,71,71,7,178,7,236) +IMAGE_DATA(65,127,127,63,14,14,110,198,245,235,215,33,124,119,8,225,167,191,177,102,221,1,236,237,237,193,45,91,54,59,28,26) +IMAGE_DATA(59,141,139,124,38,127,224,248,44,174,124,245,95,108,106,218,131,167,78,173,194,238,238,141,200,227,67,99,167,113,145,207) +IMAGE_DATA(117,13,223,226,158,189,183,153,175,91,28,78,91,91,27,31,111,214,59,146,76,212,214,174,103,246,95,43,219,42,115,4) +IMAGE_DATA(153,83,200,229,114,78,128,195,194,238,161,159,55,50,50,82,14,130,95,158,4,30,181,197,241,124,28,41,143,115,68,250) +IMAGE_DATA(252,113,166,123,217,108,54,24,231,132,203,26,7,6,47,105,221,228,107,123,96,13,13,241,248,125,206,87,241,252,178,80) +IMAGE_DATA(125,122,227,24,161,96,50,177,189,35,136,197,65,142,25,37,14,29,193,21,63,199,18,112,56,44,63,135,219,229,54,29) +IMAGE_DATA(187,73,38,231,37,128,55,15,52,55,23,47,78,77,93,238,100,224,237,53,0,203,223,3,248,254,243,237,219,139,236,9) +IMAGE_DATA(232,106,2,120,113,31,192,205,207,50,25,188,49,49,113,191,155,97,25,227,108,3,248,250,155,193,65,60,59,57,57,189) +IMAGE_DATA(156,129,250,214,178,231,164,27,224,216,167,153,204,195,155,103,206,252,243,14,192,169,31,79,159,126,120,40,159,255,128,115) +IMAGE_DATA(252,216,4,240,209,39,108,0,211,157,157,248,225,208,208,113,145,159,100,255,40,192,189,203,59,118,224,209,230,230,223,126) +IMAGE_DATA(158,153,249,107,35,131,159,211,0,208,194,118,233,223,47,244,244,224,151,231,206,125,245,12,107,218,151,201,92,187,53,51) +IMAGE_DATA(115,223,63,54,230,243,165,41,182,20,254,122,235,214,237,70,6,106,171,3,120,246,227,77,155,174,157,29,31,191,192,121) +IMAGE_DATA(108,61,250,226,210,232,232,15,108,9,107,243,219,33,238,228,238,221,55,116,226,219,188,114,101,171,231,92,163,14,127,169) +IMAGE_DATA(32,123,106,133,79,177,115,46,221,222,61,169,242,23,151,111,54,95,233,194,147,150,12,49,83,87,229,47,50,223,112,190) +IMAGE_DATA(210,133,39,45,25,68,47,184,138,151,221,42,255,17,243,13,231,43,93,88,194,100,16,190,140,75,121,150,133,80,42,185) +IMAGE_DATA(235,17,29,233,90,220,111,158,23,22,106,15,78,134,229,232,81,173,125,174,29,43,86,183,216,70,252,107,70,240,85,195) +IMAGE_DATA(84,191,169,255,166,241,73,18,127,211,249,77,15,42,37,25,216,239,104,44,149,220,105,163,35,93,75,250,149,121,97,161) +IMAGE_DATA(118,8,37,3,233,81,61,170,158,29,43,78,183,196,134,78,42,4,248,134,250,77,253,55,141,79,146,248,155,206,111,122) +IMAGE_DATA(240,180,36,195,220,92,151,168,54,39,124,152,136,91,248,165,128,93,115,115,145,157,33,172,59,192,21,236,12,74,174,96) +IMAGE_DATA(103,224,250,165,220,208,206,64,254,75,185,146,157,129,226,32,228,86,119,134,167,35,25,226,118,6,8,61,184,252,90,181) +IMAGE_DATA(51,112,142,191,111,220,206,32,107,75,168,223,212,127,211,248,36,137,127,160,31,84,147,65,11,143,37,25,70,228,15,146) +IMAGE_DATA(163,155,63,76,5,43,200,231,215,202,215,36,203,227,91,82,27,101,157,50,81,190,38,197,235,55,245,223,52,62,73,226) +IMAGE_DATA(31,232,7,241,243,155,30,84,74,50,208,103,197,233,233,105,167,130,65,71,223,103,198,72,50,112,94,88,168,29,66,201) +IMAGE_DATA(64,122,84,213,18,207,142,21,167,91,98,35,182,26,19,170,200,152,234,55,245,223,52,62,73,226,111,58,191,233,65,165) +IMAGE_DATA(36,3,189,163,182,218,128,173,108,101,162,99,92,53,201,225,133,197,142,238,12,142,94,17,215,147,240,111,134,178,15,50) +IMAGE_DATA(9,218,80,115,185,13,63,223,76,191,169,255,106,27,209,248,36,137,191,233,252,166,7,203,53,146,1,67,63,242,252,231) +IMAGE_DATA(222,61,247,196,119,254,168,249,90,88,226,143,38,145,63,198,80,113,233,207,198,10,133,2,90,209,167,85,202,37,196,244) +IMAGE_DATA(9,112,57,36,125,132,92,69,31,41,215,223,7,2,239,112,70,250,77,253,79,18,159,36,241,47,247,129,74,201,106,130) +IMAGE_DATA(78,102,67,40,219,150,232,60,30,141,206,96,12,150,2,45,44,68,159,179,48,97,114,29,149,220,223,237,59,95,158,72) +IMAGE_DATA(174,163,50,199,159,134,254,174,142,228,125,43,24,21,180,205,19,176,208,95,208,93,237,44,43,103,33,218,136,116,212,176) +IMAGE_DATA(129,165,125,37,135,79,199,24,27,174,238,99,232,240,233,24,99,195,213,237,227,43,108,4,117,219,177,54,130,186,109,165) +IMAGE_DATA(13,177,110,185,13,39,222,14,95,34,161,249,64,3,73,31,42,46,25,10,218,193,44,215,0,5,181,62,161,110,127,29) +IMAGE_DATA(47,198,70,228,203,89,140,141,72,161,93,97,67,250,137,87,98,99,81,63,127,83,188,85,252,208,124,84,147,97,1,48) +IMAGE_DATA(78,6,73,249,65,168,155,38,182,213,32,25,2,165,11,141,100,240,151,69,226,146,33,82,78,145,219,136,232,142,177,97) +IMAGE_DATA(82,170,145,234,150,216,48,46,101,25,72,250,144,162,58,167,42,88,22,228,88,219,126,38,182,64,66,19,238,112,45,239) +IMAGE_DATA(222,72,72,194,117,66,21,55,202,159,247,65,196,21,241,85,220,197,230,219,158,191,58,124,219,139,67,46,152,12,210,24) +IMAGE_DATA(70,185,243,252,176,236,23,114,33,102,254,31,127,5,69,81,64,88,72,246,46,180,36,36,250,163,30,109,219,252,171,144) +IMAGE_DATA(224,235,143,150,109,255,151,30,67,31,34,95,164,12,125,64,197,63,41,106,245,87,72,21,85,168,241,152,119,70,211,85) +IMAGE_DATA(207,95,151,214,122,213,227,40,149,74,58,253,194,165,248,184,126,17,126,76,63,41,159,35,244,157,96,193,250,117,253,215) +IMAGE_DATA(141,143,105,252,53,121,169,196,255,106,31,193,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +IMAGE_END_DATA(1728, 26) IMAGE_BEGIN_DATA -IMAGE_DATA(120,156,237,153,203,145,195,32,12,64,117,223,61,164,14,87,145,38,220,68,154,48,165,228,236,91,42,216,20,65,63,44) -IMAGE_DATA(216,200,97,20,16,18,36,113,50,19,237,104,188,102,120,146,16,127,7,14,112,0,0,231,128,147,1,70,48,224,150,167) -IMAGE_DATA(86,2,51,123,214,122,157,149,54,144,253,243,58,198,167,198,134,137,126,61,59,207,209,70,120,15,229,82,223,94,71,207) -IMAGE_DATA(249,12,45,79,44,171,198,144,248,182,118,229,173,21,198,144,241,141,42,138,33,227,27,181,26,3,227,91,20,3,227,187) -IMAGE_DATA(26,131,192,55,27,3,233,111,142,207,142,7,228,135,229,189,174,3,225,211,177,46,249,203,205,9,156,107,82,109,153,147) -IMAGE_DATA(37,17,45,6,251,74,104,44,215,41,60,27,58,236,228,117,202,40,207,175,236,24,235,210,78,224,121,158,173,243,183,152) -IMAGE_DATA(75,131,160,198,115,236,222,252,20,219,215,194,79,49,175,235,132,45,77,132,114,159,213,217,27,79,245,36,98,1,248,241) -IMAGE_DATA(250,184,201,251,104,97,22,131,158,5,2,39,112,107,195,157,49,70,50,217,179,190,143,199,163,187,94,175,46,60,27,98) -IMAGE_DATA(112,231,243,121,225,195,83,25,195,230,27,85,25,195,210,238,148,87,230,161,117,209,252,202,87,222,246,100,208,187,138,250) -IMAGE_DATA(99,224,236,143,146,99,171,29,135,98,173,109,177,227,168,40,237,220,241,74,59,69,30,37,228,7,152,157,249,209,254,91) -IMAGE_DATA(219,223,154,255,222,254,111,228,62,91,158,184,24,228,118,38,205,110,181,237,142,41,159,41,43,250,37,117,139,101,37,191) -IMAGE_DATA(18,125,6,223,25,255,55,127,251,230,239,46,142,148,23,248,221,79,222,244,100,208,47,120,71,164,31,88,194,59,222,39) -IMAGE_DATA(57,193,122,169,141,92,153,198,134,134,205,197,171,97,233,125,215,192,253,29,248,153,124,111,252,41,219,146,191,222,254,235) -IMAGE_DATA(29,63,159,40,63,240,11,100,49,224,238,157,116,69,243,73,49,101,165,117,21,118,57,201,213,13,119,107,170,165,186,175) -IMAGE_DATA(180,27,142,185,53,187,225,72,75,142,181,69,187,107,189,97,253,26,206,212,197,227,53,126,85,111,234,139,23,236,20,221) -IMAGE_DATA(31,151,46,151,248,211,66,155,141,49,176,18,27,3,12,227,4,147,75,53,148,73,109,132,250,6,204,198,226,255,210,56) -IMAGE_DATA(82,159,105,44,76,91,82,221,236,165,108,140,255,46,31,233,79,49,116,160,213,216,154,255,76,220,162,246,51,162,98,137) -IMAGE_DATA(127,181,95,194,119,143,63,232,27,255,47,147,127,112,184,212,199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -IMAGE_END_DATA(576, 8) +IMAGE_DATA(120,156,237,85,203,13,131,48,12,245,189,28,152,35,251,100,158,100,30,110,108,192,16,236,147,198,148,164,198,205,23,171) +IMAGE_DATA(145,42,213,210,19,197,248,61,127,48,41,76,48,131,208,28,67,206,23,227,183,109,59,64,227,19,190,168,195,158,229,124) +IMAGE_DATA(23,157,18,36,241,157,245,252,251,45,247,11,132,223,186,63,223,179,249,248,24,220,184,132,163,204,250,33,26,15,5,250) +IMAGE_DATA(226,199,123,244,219,202,144,67,28,213,72,249,122,52,122,184,169,122,123,184,33,87,128,101,247,166,210,191,148,47,173,159) +IMAGE_DATA(114,239,204,79,250,254,164,251,243,139,246,128,9,216,97,192,79,165,20,222,177,214,230,145,56,245,91,117,75,150,138,181) +IMAGE_DATA(62,31,71,46,118,164,238,190,239,85,221,101,89,14,104,173,171,186,175,56,229,175,229,153,97,94,212,195,56,95,237,189) +IMAGE_DATA(119,49,224,159,66,159,201,218,79,136,171,185,117,5,223,232,109,13,141,220,22,13,5,74,27,48,142,2,125,173,26,24) +IMAGE_DATA(111,193,70,110,248,221,90,7,205,73,107,41,244,66,17,245,40,247,172,255,99,30,97,105,16,124,209,106,220,90,254,68) +IMAGE_DATA(221,77,253,23,172,139,203,242,119,231,101,124,241,254,129,108,255,135,217,19,238,168,233,164,0,0,0,0,0,0,0,0) +IMAGE_END_DATA(288, 4) diff --git a/uppsrc/ide/Browser/ItemDisplay.cpp b/uppsrc/ide/Browser/ItemDisplay.cpp index 10cc80f69..8a6217be8 100644 --- a/uppsrc/ide/Browser/ItemDisplay.cpp +++ b/uppsrc/ide/Browser/ItemDisplay.cpp @@ -49,7 +49,7 @@ void PaintCppItemImage(Draw& w, int& x, int ry, int access, int kind, bool focus Image()); if(!IsNull(img)) w.DrawImage(x, ry - img.GetHeight() / 2, img); - x += 4; + x += 3; img = BrowserImg::unknown(); Image bk; switch(kind) { @@ -144,7 +144,7 @@ int CppItemInfoDisplay::DoPaint(Draw& w, const Rect& r, const Value& q, for(int i = 1; i < min(m.inherited, 5); i++) w.DrawRect(x + 10, r.top + 7 + 2 * i, 7, 1, SColorText); } - x += 20; + x += 15; int y = ry - Draw::GetStdFontCy() / 2; int x0 = x; Vector n = ParseItemNatural(m); diff --git a/uppsrc/ide/Navigator.cpp b/uppsrc/ide/Navigator.cpp index 0d792206d..71f0848d6 100644 --- a/uppsrc/ide/Navigator.cpp +++ b/uppsrc/ide/Navigator.cpp @@ -1,5 +1,7 @@ #include "ide.h" +#define LTIMING(x) // RTIMING(x) + void AssistEditor::SyncNavigator() { if(navigating) @@ -16,15 +18,17 @@ void AssistEditor::SyncCursor() String k = "(" + GetKeyDesc(IdeKeys::AK_GOTO().key[0]) + ") "; search.NullText("Symbol/lineno " + k); search.Tip(IsNull(search) ? String() : "Clear " + k); - - if(IsNull(search)) { - int ii = 0; - int line = GetLine(GetCursor()); - for(int i = 0; i < item.GetCount(); i++) - if(item[i].line - 1 <= line) - ii = i; + + if(navigating) + return; + int q = linefo.Find(GetCppFileIndex(theide->editfile)); + if(q < 0) + return; + SortedVectorMap& m = linefo[q]; + q = m.FindUpperBound(GetLine(GetCursor()) + 1) - 1; + if(q >= 0 && q < m.GetCount()) { navigating = true; - list.SetCursor(ii); + list.SetCursor(m[q]); navigating = false; } } @@ -42,12 +46,12 @@ void AssistEditor::Navigate() return; navigating = true; int ii = list.GetCursor(); - if(theide && ii >= 0 && ii < item.GetCount()) { - const NavItem& m = item[ii]; + if(theide && ii >= 0 && ii < litem.GetCount()) { + const NavItem& m = *litem[ii]; if(m.kind == KIND_LINE || IsNull(search)) - theide->GotoPos(Null, item[ii].line); + theide->GotoPos(Null, m.line); else - theide->IdeGotoCodeRef(MakeCodeRef(item[ii].nest, item[ii].qitem)); + theide->IdeGotoCodeRef(MakeCodeRef(m.nest, m.qitem)); } navigating = false; } @@ -57,7 +61,7 @@ void AssistEditor::NavigatorEnter() if(list.GetCount()) { list.GoBegin(); Navigate(); - if(item[0].kind == KIND_LINE) { + if(litem[0]->kind == KIND_LINE) { search.Clear(); Search(); } @@ -76,14 +80,12 @@ void AssistEditor::Navigator(bool nav) void AssistEditor::SerializeNavigator(Stream& s) { - int version = 2; + int version = 3; s / version; s % navigatorframe; s % navigator; - if(version >= 1 && version < 2) { - Splitter scope_item; - s % scope_item; - } + if(version >= 1 && version < 2 || version >= 3) + s % navigator_splitter; Navigator(navigator); } @@ -137,23 +139,52 @@ void AssistEditor::NavItem::Set(const CppItem& m) impl = m.impl; } +void AssistEditor::NavigatorDisplay::PaintBackground(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const +{ + int ii = q; + if(ii < 0 || ii >= item.GetCount()) + return; + const NavItem& m = *item[ii]; + bool focuscursor = (style & (FOCUS|CURSOR)) == (FOCUS|CURSOR) || (style & SELECT); + if(findarg(m.kind, KIND_FILE, KIND_NEST) >= 0) + w.DrawRect(r, focuscursor ? paper : m.kind == KIND_NEST ? Blend(SColorMark, SColorPaper, 220) + : SColorFace); + else + w.DrawRect(r, paper); +} + + int AssistEditor::NavigatorDisplay::DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const { int ii = q; if(ii < 0 || ii >= item.GetCount()) return 0; - const NavItem& m = item[(int)q]; - w.DrawRect(r, paper); + const NavItem& m = *item[ii]; bool focuscursor = (style & (FOCUS|CURSOR)) == (FOCUS|CURSOR) || (style & SELECT); - if(IsNull(q)) - return 0; + int x = r.left; - int fcy = Draw::GetStdFontCy(); - int y = r.top + r.GetHeight() / 2 - fcy; + int ry = r.top + r.GetHeight() / 2; + int y = ry - Draw::GetStdFontCy() / 2; + + if(findarg(m.kind, KIND_FILE, KIND_NEST) >= 0) { + w.DrawRect(r, focuscursor ? paper : m.kind == KIND_NEST ? Blend(SColorMark, SColorPaper, 220) + : SColorFace); + if(m.kind == KIND_FILE) + return PaintFileName(w, r, m.type, ink); + w.DrawText(x, y, m.type, StdFont().Bold(), ink); + return GetTextSize(m.type, StdFont().Bold()).cx; + } + + w.DrawRect(r, paper); if(m.kind == KIND_LINE) { w.DrawText(x, y, m.type, StdFont().Bold(), ink); return GetTextSize(m.type, StdFont().Bold()).cx; } + + PaintCppItemImage(w, x, ry, m.access, m.kind, focuscursor); + + x += 15; + int x0 = x; Vector n = ParseItemNatural(m.name, m.natural, m.ptype, m.pname, m.type, m.tname, m.ctname, ~m.natural + m.at); int starti = 0; @@ -162,15 +193,14 @@ int AssistEditor::NavigatorDisplay::DoPaint(Draw& w, const Rect& r, const Value& starti = i; break; } - PaintText(w, x, y, ~m.natural, n, 0, starti, focuscursor, ink, false); - if(m.nest.GetCount()) { - String h = m.nest + "::"; - w.DrawText(x, y, h, BrowserFont().Bold(), Magenta()); + PaintText(w, x, y, m.natural, n, starti, n.GetCount(), focuscursor, ink, false); + if(starti) { + const char *h = " : "; + w.DrawText(x, y, h, BrowserFont(), SColorText); x += GetTextSize(h, BrowserFont()).cx; } - int x1 = r.left; - PaintText(w, x1, y + fcy, ~m.natural, n, starti, n.GetCount(), focuscursor, ink, false); - return max(x, x1) - r.left; + PaintText(w, x, y, m.natural, n, 0, starti, focuscursor, ink, false); + return x; } void AssistEditor::NavigatorDisplay::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const @@ -181,87 +211,239 @@ void AssistEditor::NavigatorDisplay::Paint(Draw& w, const Rect& r, const Value& Size AssistEditor::NavigatorDisplay::GetStdSize(const Value& q) const { NilDraw w; - return Size(DoPaint(w, Size(999999, 999999), q, White(), White(), 0), 2 * Draw::GetStdFontCy()); + return Size(DoPaint(w, Size(999999, 999999), q, White(), White(), 0), Draw::GetStdFontCy()); +} + +force_inline +bool AssistEditor::NavItem::operator<(const NavItem& b) const +{ + return CombineCompare(decl_file, b.decl_file)(decl_line, b.decl_line); +} + +void AssistEditor::TriggerSearch() +{ + search_trigger.KillSet(100, THISBACK(Search)); } void AssistEditor::Search() { - list.Clear(); - item.Clear(); + int sc = scope.GetScroll(); + String key = scope.GetKey(); String s = TrimBoth(~search); String search_name, search_nest; bool wholeclass = false; - if(s.Find(':') >= 0) { - Vector h = Split((String)~search, ':'); - if(*s.Last() == ':') + bool both = false; + navigator_global = false; + if(s.Find('.') >= 0) { + Vector h = Split((String)~search, '.'); + if(*s.Last() == '.') search_nest = Join(h, "::"); else { search_name = h.Pop(); if(h.GetCount()) search_nest = Join(h, "::"); } - wholeclass = *s == ':'; + wholeclass = *s == '.' && search_nest.GetCount(); } - else + else { search_name = search_nest = ~search; - s = Join(Split(s, ':'), "::") + (s.EndsWith(":") ? "::" : ""); + both = true; + } + s = Join(Split(s, '.'), "::") + (s.EndsWith(".") ? "::" : ""); int lineno = StrInt(s); + gitem.Clear(); + nitem.Clear(); if(!IsNull(lineno)) { - NavItem& m = item.Add(); + NavItem& m = nitem.Add(); m.type = "Go to line " + AsString(lineno); m.kind = KIND_LINE; m.line = lineno; + gitem.Add(Null).Add(&m); } else if(IsNull(s)) { int fileii = GetCppFileIndex(theide->editfile); const CppBase& b = CodeBase(); - ArrayMap imap; for(int i = 0; i < b.GetCount(); i++) { String nest = b.GetKey(i); const Array& ci = b[i]; for(int j = 0; j < ci.GetCount(); j++) { const CppItem& m = ci[j]; if(m.file == fileii) { - NavItem& n = item.Add(); + NavItem& n = nitem.Add(); n.Set(m); n.nest = nest; + n.decl_line = m.line; + n.decl_file = m.file; + n.decl = !m.impl; + n.linefo.Add(MakeTuple(m.file, m.line)); } } } - Sort(item, FieldRelation(&NavItem::line, StdLess())); + Sort(nitem, FieldRelation(&NavItem::line, StdLess())); + Vector& d = gitem.Add(Null); + for(int i = 0; i < nitem.GetCount(); i++) + d.Add(&nitem[i]); } else { + navigator_global = true; const CppBase& b = CodeBase(); ArrayMap imap; for(int i = 0; i < b.GetCount(); i++) { String nest = b.GetKey(i); - if(wholeclass ? ToUpper(nest) == search_nest : ToUpper(nest).Find(search_nest) >= 0) { + bool foundnest = wholeclass ? ToUpper(nest) == search_nest + : ToUpper(nest).Find(search_nest) >= 0; + if(foundnest || both) { const Array& ci = b[i]; for(int j = 0; j < ci.GetCount(); j++) { const CppItem& m = ci[j]; - if(m.uname.Find(search_name) >= 0) { + if(m.uname.Find(search_name) >= 0 || both && foundnest) { String key = nest + '\1' + m.qitem; int q = imap.Find(key); if(q < 0) { NavItem& ni = imap.Add(key); ni.Set(m); ni.nest = nest; + ni.decl_line = ni.line; + ni.decl_file = ni.file; + ni.decl = !ni.impl; + ni.linefo.Add(MakeTuple(ni.file, ni.line)); } else { NavItem& mm = imap[q]; String n = mm.natural; if(m.natural.GetCount() > mm.natural.GetCount()) mm.natural = m.natural; - if(CombineCompare(mm.impl, m.impl)(m.file, mm.file)(m.line, mm.line) < 0) - mm.Set(m); + if(!m.impl && + (!mm.decl + || CombineCompare(mm.decl_file, m.file)(mm.decl_line, m.line) < 0)) { + mm.decl = true; + mm.decl_line = m.line; + mm.decl_file = m.file; + } + mm.linefo.Add(MakeTuple(m.file, m.line)); } } } } } - item = imap.PickValues(); + nitem = imap.PickValues(); + { LTIMING("Group"); + for(int i = 0; i < nitem.GetCount(); i++) { + NavItem& m = nitem[i]; + String g = m.nest; + if(m.kind == TYPEDEF) + g.Trim(max(g.ReverseFind("::"), 0)); + if(IsNull(g)) + g = "\xff" + GetCppFile(m.decl_file); + gitem.GetAdd(g).Add(&m); + } + } + { LTIMING("Sort groups"); + SortByKey(gitem); + } + { LTIMING("Sort lines"); + for(int i = 0; i < gitem.GetCount(); i++) { + scope.Add(gitem.GetKey(i)); + Sort(gitem[i]); + } + } } - Sort(item); - list.SetVirtualCount(item.GetCount()); + scope.Clear(); + scope.Add(Null); + { + LTIMING("scope.Add"); + for(int i = 0; i < gitem.GetCount(); i++) + scope.Add(gitem.GetKey(i)); + } + scope.ScrollTo(sc); + if(!navigator_global || !scope.FindSetCursor(key)) + scope.GoBegin(); + if(navigator_global) + navigator_splitter.NoZoom(); + else + navigator_splitter.Zoom(1); } + +int AssistEditor::PaintFileName(Draw& w, const Rect& r, String h, Color ink) +{ + h.Remove(0, 1); + int x = 0; + String s = GetFileName(GetFileFolder(h)) + "/"; + w.DrawText(r.left, r.top, s, StdFont(), ink); + x += GetTextSize(s, StdFont()).cx; + s = GetFileName(h); + w.DrawText(r.left + x, r.top, s, StdFont().Bold(), ink); + return x + GetTextSize(s, StdFont().Bold()).cx; +} + +int AssistEditor::ScopeDisplay::DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const +{ + w.DrawRect(r, paper); + if(IsNull(q)) { + const char *txt = "All"; + w.DrawText(r.left, r.top, txt, StdFont().Bold().Italic(), + style & CURSOR ? ink : HighlightSetup::GetHlStyle(INK_KEYWORD).color); + return GetTextSize(txt, StdFont().Bold().Italic()).cx; + } + String h = q; + if(*h == '\xff') + return PaintFileName(w, r, h, ink); + w.DrawText(r.left, r.top, h, StdFont().Bold(), ink); + return GetTextSize(h, StdFont().Bold()).cx; +} + +void AssistEditor::ScopeDisplay::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const +{ + DoPaint(w, r, q, ink, paper, style); +} + +Size AssistEditor::ScopeDisplay::GetStdSize(const Value& q) const +{ + NilDraw w; + return Size(DoPaint(w, Size(999999, 999999), q, White(), White(), 0), StdFont().Bold().GetCy()); +} + +void AssistEditor::Scope() +{ + LTIMING("FINALIZE"); + litem.Clear(); + nest_item.Clear(); + linefo.Clear(); + bool all = scope.GetCursor() <= 0; + String sc = scope.GetKey(); + for(int i = 0; i < gitem.GetCount(); i++) { + String grp = gitem.GetKey(i); + int kind = KIND_NEST; + if(*grp == '\xff') + kind = KIND_FILE; + if(navigator_global) { + if(all) { + NavItem& m = nest_item.Add(); + m.kind = kind; + m.type = grp; + litem.Add(&m); + } + else + if(grp != sc) + continue; + } + const Vector& ia = gitem[i]; + for(int i = 0; i < ia.GetCount(); i++) { + NavItem *m = ia[i]; + for(int j = 0; j < m->linefo.GetCount(); j++) + linefo.GetAdd(m->linefo[j].a).Add(m->linefo[j].b, litem.GetCount()); + litem.Add(m); + } + } + list.SetVirtualCount(litem.GetCount()); +} + +void AssistEditor::ListLineEnabled(int i, bool& b) +{ + if(i >= 0 && i < litem.GetCount()) { + int kind = litem[i]->kind; + if(findarg(kind, KIND_FILE, KIND_NEST) >= 0) + b = false; + } +} \ No newline at end of file diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index 41e83b7fe..87aa085cc 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -294,7 +294,9 @@ struct AssistEditor : CodeEditor { bool navigator; SplitterFrame navigatorframe; StaticRect navigatorpane; + ArrayCtrl scope; ArrayCtrl list; + Splitter navigator_splitter; EditString search; struct NavItem { @@ -314,36 +316,51 @@ struct AssistEditor : CodeEditor { int line; int file; bool impl; + int decl_line; // header position + int decl_file; + bool decl; + Vector > linefo; - bool operator<(const NavItem& b) const { return CombineCompare(file, b.file)(line, b.line) < 0; } - + bool operator<(const NavItem& b) const; void Set(const CppItem& m); }; - enum { KIND_LINE = 123 }; - - struct NavigatorDisplay : Display { - const Array& item; + enum { KIND_LINE = 123, KIND_NEST, KIND_FILE }; + struct ScopeDisplay : Display { int DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; virtual void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; virtual Size GetStdSize(const Value& q) const; - - NavigatorDisplay(const Array& item) : item(item) {} }; - Array item; + struct NavigatorDisplay : Display { + const Vector& item; + + int DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; + virtual void PaintBackground(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; + virtual void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; + virtual Size GetStdSize(const Value& q) const; + + NavigatorDisplay(const Vector& item) : item(item) {} + }; + + static int PaintFileName(Draw& w, const Rect& r, String h, Color ink); + + Array nitem; + VectorMap > gitem; + Vector litem; + Array nest_item; + VectorMap > linefo; NavigatorDisplay navidisplay; bool navigating; - - void Search(); + TimeCallback search_trigger; + bool navigator_global; + + void TriggerSearch(); + void Search(); + void Scope(); + void ListLineEnabled(int i, bool& b); -/* - CodeBrowser browser; - ParentCtrl scopepane; - ParentCtrl itempane; - Splitter scope_item; -*/ Splitter popup; ArrayCtrl assist; ArrayCtrl type;