Altova XMLSpy 2024 Professional Edition

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子元素

IDName元素是为所有类型的UI元素定义的。然而,在某些类型的情况下,这些元素中的一个被忽略了。例如,对于分隔符,Name是被忽略的。

 

<ID></ID>

<Name></Name>

 

如果UIElement描述一个现有的UI元素,则ID元素的值是由XMLSpy预定义的。通常这些ID值不为公众所知。如果XML片段描述了UI的一个新部分,则ID是任意的,其值应小于1000Name元素设置了文本值。现有的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>

 

用于声明工具栏按钮的其他元素是PlaceToolBarIDToolBarNameToolBarIDToolBarName元素用于标识包含新按钮或现有按钮的工具栏。ToolBarName的文本值是区分大小写的。(UIElement) type 特性必须是ToolBarItem

 

要定义一个菜单项,除了用于声明命令的标准元素外,还可以使用MenuIDPlaceParentMenuID元素的内容可以是128129有关更多信息,请参见上方的“工具栏和菜单”部分。

 

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,则可以添加工具栏分隔符和菜单。

 

© 2017-2023 Altova GmbH