//
//
//
//
// $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;
if (this.description != null)
this.description = this.description.Replace("!#","");
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