// // // // // $Revision: 2533 $ // using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using ICSharpCode.TextEditor; namespace ICSharpCode.TextEditor.Gui.CompletionWindow { public class UserDefaultCompletionData : ICompletionData { string text; string description; int imageIndex; bool isExtension; public bool IsOnOverrideWindow=false; public bool FirstInsert = false; public bool IsExtension { get { return isExtension; } set { isExtension = value; } } public int ImageIndex { get { return imageIndex; } } public string Text { get { return text; } set { text = value; } } public string Description { get { return description; } set { description = value; } } double priority; public double Priority { get { return priority; } set { priority = value; } } public virtual bool InsertAction(TextArea textArea, char ch) { textArea.InsertString(text); return false; } public UserDefaultCompletionData(string text, string description, int imageIndex, bool is_in_override_window, bool is_extension=false) { this.text = text; this.description = description; this.imageIndex = imageIndex; this.IsOnOverrideWindow = is_in_override_window; this.isExtension = is_extension; } public int CompareTo(object obj) { if (obj == null || !(obj is UserDefaultCompletionData)) { return -1; } return string.Compare(text,((UserDefaultCompletionData)obj).Text,true); } } /// /// Description of CodeCompletionListView. /// public class PABCNETCodeCompletionListView: System.Windows.Forms.UserControl { ICompletionData[] completionData; int firstItem = 0; int selectedItem = -1; ImageList imageList; //Dictionary cache = new Dictionary(); Hashtable cache = new Hashtable(); public bool FirstInsert = false; public ImageList ImageList { get { return imageList; } set { imageList = value; } } public int FirstItem { get { return firstItem; } set { if (firstItem != value) { firstItem = value; OnFirstItemChanged(EventArgs.Empty); } } } public ICompletionData SelectedCompletionData { get { if (selectedItem < 0) { return null; } return completionData[selectedItem]; } } public int ItemHeight { get { return Math.Max(imageList.ImageSize.Height, (int)(Font.Height * 1.1)); } } public int MaxVisibleItem { get { return Height / ItemHeight; } } private ICompletionData[] SortByGroup(ICompletionData[] compData) { UserDefaultCompletionData ddd = null; List consts = new List(); List meths = new List(); List extension_meths = new List(); List props = new List(); List fields = new List(); List vars = new List(); List events = new List(); List others = new List(); List res = new List(); foreach (ICompletionData data in compData) { if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberLocal) vars.Add(data); else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberConstant) consts.Add(data); else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedMethod) { if (!data.Description.Contains("(" + PascalABCCompiler.StringResources.Get("CODE_COMPLETION_EXTENSION") + ")")) meths.Add(data); else extension_meths.Add(data); } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedProperty) props.Add(data); else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedField) fields.Add(data); else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedEvent) events.Add(data); else others.Add(data); } meths.Sort(); extension_meths.Sort(); props.Sort(); fields.Sort(); vars.Sort(); consts.Sort(); events.Sort(); others.Sort(); res.AddRange(vars); res.AddRange(consts); res.AddRange(fields); res.AddRange(props); res.AddRange(meths); res.AddRange(events); res.AddRange(others); res.AddRange(extension_meths); return res.ToArray(); } public PABCNETCodeCompletionListView(ICompletionData[] completionData, bool is_by_dot) { if (VisualPascalABC.VisualPABCSingleton.MainForm.UserOptions.ShowCompletionInfoByGroup && is_by_dot) completionData = SortByGroup(completionData); else Array.Sort(completionData); this.completionData = completionData; for (int i=0; i= completionData.Length - MaxVisibleItem) this.FirstItem = completionData.Length - MaxVisibleItem; else this.FirstItem = firstItem; if (this.FirstItem != oldFirstItem) { Invalidate(); } } public void CalcWidth() { int len = Width; Graphics g = Graphics.FromHwnd(this.Handle); for (int i=0; i