mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
ide: Redesigning Navigator
git-svn-id: svn://ultimatepp.org/upp/trunk@7595 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
efdd51b714
commit
625243c57a
10 changed files with 373 additions and 150 deletions
|
|
@ -26,6 +26,15 @@ const String& GetCppFile(int i)
|
|||
static String x;
|
||||
return x;
|
||||
}
|
||||
|
||||
Vector<String> GetCppFiles()
|
||||
{
|
||||
INTERLOCKED_(cpp_file_mutex) {
|
||||
return clone(cpp_file.GetKeys());
|
||||
}
|
||||
return Vector<String>();
|
||||
}
|
||||
|
||||
/*
|
||||
void CppPos::Serialize(Stream& s)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -353,6 +353,8 @@ public:
|
|||
Callback WhenScroll;
|
||||
Callback WhenHeaderLayout;
|
||||
|
||||
Callback2<int, bool&> WhenLineEnabled;
|
||||
|
||||
Callback WhenDrag;
|
||||
Callback3<int, int, PasteClip&> WhenDropCell;
|
||||
Callback2<int, PasteClip&> 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<Value> ReadRow(int i) const; // deprecated name
|
||||
Vector<Value> GetLine(int i) const { return ReadRow(i); }
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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])&]
|
||||
|
|
|
|||
|
|
@ -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<ScopeDisplay>());
|
||||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<ItemTextPart> n = ParseItemNatural(m);
|
||||
|
|
|
|||
|
|
@ -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<int, int>& 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<ItemTextPart> 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<String> h = Split((String)~search, ':');
|
||||
if(*s.Last() == ':')
|
||||
bool both = false;
|
||||
navigator_global = false;
|
||||
if(s.Find('.') >= 0) {
|
||||
Vector<String> 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<String, NavItem> imap;
|
||||
for(int i = 0; i < b.GetCount(); i++) {
|
||||
String nest = b.GetKey(i);
|
||||
const Array<CppItem>& 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<int>()));
|
||||
Sort(nitem, FieldRelation(&NavItem::line, StdLess<int>()));
|
||||
Vector<NavItem *>& 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<String, NavItem> 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<CppItem>& 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<NavItem *>& 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Tuple2<int, int> > 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<NavItem>& 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<NavItem>& item) : item(item) {}
|
||||
};
|
||||
|
||||
Array<NavItem> item;
|
||||
struct NavigatorDisplay : Display {
|
||||
const Vector<NavItem *>& 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<NavItem *>& item) : item(item) {}
|
||||
};
|
||||
|
||||
static int PaintFileName(Draw& w, const Rect& r, String h, Color ink);
|
||||
|
||||
Array<NavItem> nitem;
|
||||
VectorMap<String, Vector<NavItem *> > gitem;
|
||||
Vector<NavItem *> litem;
|
||||
Array<NavItem> nest_item;
|
||||
VectorMap<int, SortedVectorMap<int, int> > 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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue