145 lines
4.6 KiB
C#
145 lines
4.6 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Represents the base class that provides link between DotNetBar BaseItem commands and typed code representation for them.
|
|
/// </summary>
|
|
[ToolboxItem(false), DesignTimeVisible(false), DefaultEvent("Click")]
|
|
public class CommandLink : Component
|
|
{
|
|
#region Private Variables
|
|
private string m_Name = "";
|
|
private DotNetBarManager m_Manager = null;
|
|
private static string CommandPrefix = "cmd";
|
|
#endregion
|
|
|
|
#region Events
|
|
/// <summary>
|
|
/// Occurs when item connected to the command link is clicked.
|
|
/// </summary>
|
|
public event EventHandler Click;
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Returns name of the item that can be used to identify item from the code. You should not set this property directly since it is populated by DotNetBar designer.
|
|
/// </summary>
|
|
[Browsable(false), Category("Design"), Description("Indicates the name used to identify item command link is connected to.")]
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
if (this.Site != null)
|
|
m_Name = this.Site.Name;
|
|
return m_Name;
|
|
}
|
|
set
|
|
{
|
|
if (this.Site != null)
|
|
this.Site.Name = value;
|
|
if (value == null)
|
|
m_Name = "";
|
|
else
|
|
m_Name = value;
|
|
}
|
|
}
|
|
|
|
protected virtual BaseItem GetItem(Type expectedItemType)
|
|
{
|
|
if (this.Manager == null)
|
|
throw new InvalidOperationException("Manager property is not assigned to the instance of DotNetBarManager this CommandLink is linking to.");
|
|
|
|
string itemName = GetItemName(this.Name);
|
|
if (itemName == "")
|
|
{
|
|
throw new InvalidOperationException("Command link name is not in expected format. Could not retrive item.");
|
|
}
|
|
|
|
BaseItem item = this.Manager.GetItem(itemName, true);
|
|
|
|
if (item == null)
|
|
throw new InvalidOperationException("Item '" + itemName + "' cannot be found. DotNetBarManager definition might not be loaded. Try moving your code to Load event.");
|
|
|
|
if (item.GetType() != expectedItemType)
|
|
throw new InvalidOperationException("This CommandLink type can only by connected to " + expectedItemType.Name + " type. Currently link is connecting to " + item.GetType().ToString());
|
|
|
|
return item;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Disconnects the CommandLink object to the DotNetBarManager.
|
|
/// </summary>
|
|
protected virtual void DisconnectManager()
|
|
{
|
|
if (m_Manager == null)
|
|
return;
|
|
m_Manager.ItemClick -= new EventHandler(ItemClick);
|
|
m_Manager.CommandLinks.Remove(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Connects the CommandLink object to the DotNetBarManager.
|
|
/// </summary>
|
|
protected virtual void ConnectManager()
|
|
{
|
|
if (m_Manager == null)
|
|
return;
|
|
m_Manager.ItemClick += new EventHandler(ItemClick);
|
|
m_Manager.CommandLinks.Add(this);
|
|
}
|
|
|
|
private void ItemClick(object sender, EventArgs e)
|
|
{
|
|
if(sender is BaseItem)
|
|
{
|
|
BaseItem item = sender as BaseItem;
|
|
if(item.Name == GetItemName(this.Name))
|
|
{
|
|
if (Click != null)
|
|
Click(sender, e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the instance of DotNetBarManager associated with the command link.
|
|
/// </summary>
|
|
[Browsable(false), DefaultValue(null)]
|
|
public DotNetBarManager Manager
|
|
{
|
|
get { return m_Manager; }
|
|
set
|
|
{
|
|
if (m_Manager != null)
|
|
DisconnectManager();
|
|
m_Manager = value;
|
|
|
|
if (m_Manager != null)
|
|
ConnectManager();
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
this.Manager = null;
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
internal static string GetCommandLinkName(string itemName)
|
|
{
|
|
return CommandPrefix + itemName;
|
|
}
|
|
|
|
internal static string GetItemName(string commandLinkName)
|
|
{
|
|
if (commandLinkName.StartsWith(CommandPrefix))
|
|
return commandLinkName.Substring(CommandPrefix.Length);
|
|
|
|
return "";
|
|
}
|
|
}
|
|
}
|