using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace AutocompleteMenuNS
{
///
/// Item of autocomplete menu
///
public class AutocompleteItem
{
public object Tag;
string toolTipTitle;
string toolTipText;
string menuText;
///
/// Parent AutocompleteMenu
///
public AutocompleteMenu Parent { get; internal set; }
///
/// Text for inserting into textbox
///
public string Text { get; set; }
///
/// Image index for this item
///
public int ImageIndex{get; set; }
///
/// Alignment. The direction the text shows.
///
public StringAlignment Alignment { get; set; }
///
/// Title for tooltip.
///
/// Return null for disable tooltip for this item
public virtual string ToolTipTitle
{
get { return toolTipTitle; }
set { toolTipTitle = value; }
}
///
/// Tooltip text.
///
/// For display tooltip text, ToolTipTitle must be not null
public virtual string ToolTipText
{
get { return toolTipText; }
set { toolTipText = value; }
}
///
/// Menu text. This text is displayed in the drop-down menu.
///
public virtual string MenuText
{
get { return menuText; }
set { menuText = value; }
}
public AutocompleteItem()
{
ImageIndex = -1;
}
public AutocompleteItem(string text):this()
{
Text = text;
Alignment = StringAlignment.Near;
}
public AutocompleteItem(string text, int imageIndex)
: this(text)
{
this.ImageIndex = imageIndex;
}
public AutocompleteItem(string text, int imageIndex, string menuText)
: this(text, imageIndex)
{
this.menuText = menuText;
}
public AutocompleteItem(string text, int imageIndex, string menuText, string toolTipTitle, string toolTipText)
: this(text, imageIndex, menuText)
{
this.toolTipTitle = toolTipTitle;
this.toolTipText = toolTipText;
}
///
/// Returns text for inserting into Textbox
///
public virtual string GetTextForReplace()
{
return Text;
}
///
/// Compares fragment text with this item
///
public virtual CompareResult Compare(string fragmentText)
{
if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) &&
Text != fragmentText)
return CompareResult.VisibleAndSelected;
return CompareResult.Hidden;
}
///
/// Returns text for display into popup menu
///
public override string ToString()
{
return menuText ?? Text;
}
///
/// This method is called after item was inserted into text
///
public virtual void OnSelected(SelectedEventArgs e)
{
}
public virtual void OnPaint(PaintItemEventArgs e)
{
using(var brush = new SolidBrush(e.IsSelected ? e.Colors.SelectedForeColor : e.Colors.ForeColor))
e.Graphics.DrawString(ToString(), e.Font, brush, e.TextRect, new StringFormat() {Alignment = Alignment});
}
}
public enum CompareResult
{
///
/// Item do not appears
///
Hidden,
///
/// Item appears
///
Visible,
///
/// Item appears and will selected
///
VisibleAndSelected
}
}