void _SortAndSetControlItems() { _av.Sort((c1, c2) => { int diff = c1.moveDown - c2.moveDown; if (diff != 0) { return(diff); } if (_groupsEnabled) { diff = c1.group - c2.group; if (diff != 0) { return(diff); } if (_groups[c1.group].NE()) { CiItemKind k1 = c1.kind, k2 = c2.kind; //let EnumMember be by Enum. In CiItemKind they are not adjacent, it would be not good. if (k1 > CiItemKind.Enum) { if (k1 == CiItemKind.EnumMember) { k1 = CiItemKind.Enum + 1; } else { k1++; } } if (k2 > CiItemKind.Enum) { if (k2 == CiItemKind.EnumMember) { k2 = CiItemKind.Enum + 1; } else { k2++; } } diff = k1 - k2; if (diff != 0) { return(diff); } } } int r = string.Compare(c1.ci.SortText, c2.ci.SortText, StringComparison.OrdinalIgnoreCase); if (r == 0) { r = CiSnippets.Compare(c1, c2); //if (r == 0) r = string.Compare(c1.Text, c2.Text, StringComparison.OrdinalIgnoreCase); } return(r); }); CiComplItem prev = null; foreach (var v in _av) { var group = _groupsEnabled && (prev == null || v.group != prev.group) ? _groups[v.group] : null; v.SetDisplayText(group); prev = v; } _tv.SetItems(_av); }
} //root public _Item(string text, CiItemKind kind, int pos) { _text = text; _pos = pos; _kind = kind; }