📄 menuitemdoozer.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision: 915 $</version>
// </file>
using System;
using System.Windows.Forms;
using System.Collections;
namespace ICSharpCode.Core
{
/// <summary>
/// Creates menu items from a location in the addin tree.
/// </summary>
/// <attribute name="label" use="required">
/// Label of the menu item.
/// </attribute>
/// <attribute name="type" use="optional" enum="Separator;CheckBox;Item;Command;Menu;Builder">
/// This attribute must be one of these values:
/// Separator, CheckBox, Item=Command, Menu (=with subitems),
/// Builder (=class implementing ISubmenuBuilder).
/// Default: Command.
/// </attribute>
/// <attribute name="loadclasslazy" use="optional">
/// Only for the type "Item"/"Command".
/// When set to false, the command class is loaded
/// immediately instead of the usual lazy-loading.
/// </attribute>
/// <attribute name="icon" use="optional">
/// Icon of the menu item.
/// </attribute>
/// <attribute name="class" use="optional">
/// Command class that is run when item is clicked.
/// </attribute>
/// <attribute name="link" use="optional">
/// Only for the type "Item"/"Command". Opens a webpage instead of running a command when
/// clicking the item.
/// </attribute>
/// <attribute name="shortcut" use="optional">
/// Shortcut that activates the command (e.g. "Control|S").
/// </attribute>
/// <children childTypes="MenuItem">
/// If "type" is "Menu", the item can have sub-menuitems.
/// </children>
/// <usage>Any menu strip paths or context menu paths, e.g. /SharpDevelop/Workbench/MainMenu</usage>
/// <returns>
/// Any ToolStrip* object, depending on the type attribute.
/// </returns>
/// <conditions>Conditions are handled by the item, "Exclude" maps to "Visible = false", "Disable" to "Enabled = false"</conditions>
public class MenuItemDoozer : IDoozer
{
/// <summary>
/// Gets if the doozer handles codon conditions on its own.
/// If this property return false, the item is excluded when the condition is not met.
/// </summary>
public bool HandleConditions {
get {
return true;
}
}
public object BuildItem(object caller, Codon codon, ArrayList subItems)
{
string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command";
bool createCommand = codon.Properties["loadclasslazy"] == "false";
switch (type) {
case "Separator":
return new MenuSeparator(codon, caller);
case "CheckBox":
return new MenuCheckBox(codon, caller);
case "Item":
case "Command":
return new MenuCommand(codon, caller, createCommand);
case "Menu":
return new Menu(codon, caller, subItems);
case "Builder":
return codon.AddIn.CreateObject(codon.Properties["class"]);
default:
throw new System.NotSupportedException("unsupported menu item type : " + type);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -