配置XML
IDE插件允许您更改XMLSpy的用户界面(UI)。这是通过使用一个XML数据流来描述每个单独的修改来实现的。XML配置通过IXMLSpyPlugIn接口的GetUIModifications方法传递给XMLSpy。
包含IDE插件的UI修改的XML文件必须具有以下结构:
<ConfigurationData>
<ImageFile>Path to image file</ImageFile>
<Modifications>
<Modification>
...
</Modification>
...
</Modifications>
</ConfigurationData>
您可以为插件添加到XMLSpy的用户界面的新菜单项定义图标或工具栏按钮。包含图像的文件的路径是用ImageFile元素设置的。每个图像都必须为16x16像素,最多可使用256种颜色。图像引用必须在单个<ImageFile>元素中从左到右排列。最右边的图像索引值为0。
Modifications元素可以具有任意数量的Modification子元素。每个Modification元素都定义了对XMLSpy的标准用户界面的一个特定更改。您可以执行的修改将在下一部分进行介绍。
Modification元素的结构
Modification元素具有两个子元素:
<Modification>
<Action>Type of action</Action>
<UIElement Type="Type of UI element" />
</Modification>
Action元素的有效值为:
Add: 将以下UI元素添加到XMLSpy
Hide: 在XMLSpy中隐藏以下UI元素
Remove: 在“自定义”对话框中从“命令”列表框中删除UI元素
多个修改可以合并到一个Action元素中,例如:"Add Hide"
UIElement元素定义任何新的或现有的UI元素,并且可以是以下类型之一:工具栏、按钮、菜单或菜单项。type特性指定UI元素所属的类型。UIElement的结构在下面的部分中进行了说明。
常见的UIElement子元素
ID和Name元素是为所有类型的UI元素定义的。然而,在某些类型的情况下,这些元素中的一个被忽略了。例如,对于分隔符,Name是被忽略的。
<ID></ID>
<Name></Name>
如果UIElement描述一个现有的UI元素,则ID元素的值是由XMLSpy预定义的。通常这些ID值不为公众所知。如果XML片段描述了UI的一个新部分,则ID是任意的,其值应小于1000。Name元素设置了文本值。现有的UI元素可以仅通过名称标识;例如,具有子菜单的菜单和菜单项。对于新的UI元素,Name元素将设置标题(例如,工具栏的标题)或菜单项的文本。
工具栏和菜单
要定义工具栏,有必要指定工具栏的ID和/或名称。可以仅使用名称或ID(如果后者是已知的)指定现有的工具栏。要创建一个新的工具栏,必须设置这两个值。type特性的值必须是ToolBar。
<UIElement Type="ToolBar">
<ID>1</ID>
<Name>TestPlugIn</Name>
</UIElement>
要指定XMLSpy菜单,您需要两个参数:
•包含该菜单的菜单栏的ID。如果主窗口中没有打开任何XML文档,则菜单栏ID为128。如果打开了一个或多个XML文档,则菜单栏ID为129。
•菜单名称。菜单没有相关联的ID值。下方示例定义了在至少打开一个XML文档时处于活动状态的菜单栏的“编辑”菜单:
<UIElement Type="Menu">
<ID>129</ID>
<Name>Edit</Name>
</UIElement>
如果要创建一个新菜单,还会用到一个额外的元素。Place元素指定新菜单在菜单栏中的位置:
<UIElement Type="Menu">
<ID>129</ID>
<Name>PlugIn Menu</Name>
<Place>12</Place>
</UIElement>
Place元素的值-1将新按钮或菜单项设置在菜单或工具栏的末尾。
命令
如果您添加一个新的命令(通过工具栏按钮或菜单项),UIElement片段可以包含以下任何一个子元素:
<MacroName></MacroName>
<Info></Info>
<ImageID></ImageID>
如果指定了MacroName,则XMLSpy会在脚本环境中搜索同名的宏,并在每次处理该命令时执行它。Info元素包含一个描述字符串,当鼠标指针悬停在相关命令(按钮或菜单项)上时,会显示在状态栏中。ImageID定义图标在图像文件中的索引。请注意,所有图标都存储在一个图像文件中。
要定义工具栏按钮,请使用以下结构创建一个UIElement:
<UIElement Type="ToolBarItem">
<!--don't reuse local IDs even the commands do the same-->
<ID>5</ID>
<Name>Open file from repository...</Name>
<!--Set Place To -1 If this is the first button To be inserted-->
<Place>-1</Place>
<ImageID>0</ImageID>
<ToolBarID>1</ToolBarID>
<!--instead of the toolbar ID the toolbar name could be used-->
<ToolBarName>TestPlugIn</ToolBarName>
</UIElement>
用于声明工具栏按钮的其他元素是Place、ToolBarID和ToolBarName。ToolBarID和ToolBarName元素用于标识包含新按钮或现有按钮的工具栏。ToolBarName的文本值是区分大小写的。(UIElement) type 特性必须是ToolBarItem。
要定义一个菜单项,除了用于声明命令的标准元素外,还可以使用MenuID、Place和Parent。MenuID元素的内容可以是128或129。有关更多信息,请参见上方的“工具栏和菜单”部分。
Parent元素用于标识应插入新菜单条目的菜单。子菜单项没有唯一的Windows ID,因此我们需要使用其他方式来识别菜单项的父项。为此,我们将Parent元素的内容设为该菜单项的路径。路径中的步骤用冒号表示。该模式将是ParentMenu:SubMenu。如果菜单没有父菜单(因为它不是子菜单),请在名称开头处添加一个冒号(参见下方示例)。Type 特性必须设为MenuItem。
下方示例定义了一个菜单项,其中包含的菜单不是子菜单:
<UIElement Type="MenuItem">
<!--the following element is a Local command ID-->
<ID>3</ID>
<Name>Open file from repository...</Name>
<Place>-1</Place>
<MenuID>129</MenuID>
<Parent>:PlugIn Menu</Parent>
<ImageID>0</ImageID>
</UIElement>
如果ID元素的值设为0,则可以添加工具栏分隔符和菜单。