3

我正在开发两个 Eclipse 插件,我遇到了下一个问题:

我有两个管理相同文件的视角。我想在文件扩展名 - 编辑器 - 透视之间建立关联。

我的意思是,如果我在透视 1 中打开文件扩展名 .XXX,它使用编辑器 A,但如果我在透视 2 中打开相同的文件扩展名 .XXX,它使用编辑器 B。

可能吗?从现在开始,我使用了启动器,但现在我需要更多的差异化。

谢谢。

4

4 回答 4

4

(对不起,这是“不要那样做!”非答案之一。:))

正如评论中提到的,我建议不要根据当前的观点打开不同的编辑器。我认为这违背了用户的期望,并且会产生一些不直观的后果,例如当我创建自己的观点时。

例如,我建议使用 Eclipse 的 XML/Plug-in 清单编辑器。底部的选项卡允许用户在不同的视图之间进行选择,而与任何透视选择或配置无关。

Eclipse 插件清单编辑器

于 2011-07-28T10:26:45.933 回答
2

虽然我同意这似乎有点奇怪,让默认编辑器基于打开的视角对同一个文件有所不同,但您可以这样做。

  1. 创建两个新的内容类型扩展
  2. 将您的第一个编辑器注册为第一个新内容类型的默认编辑器
  3. 将您的第二个编辑器注册为第二个新内容类型的默认编辑器
  4. 对于每种内容类型,您都有一个“内容类型描述器”。在这些描述器类中,让它检查当前透视 ID 的活动工作台页面,如果它与预期值匹配,则为 VALID,如果透视 ID 不匹配,则返回 INVALID。
  5. 对于这两个编辑器,您需要将这些编辑器与内容类型相关联,而不是文件扩展名或文件名
  6. 现在,根据打开的视角,一次只能匹配一种内容类型。确保其中一种内容类型是“默认”,以便在用户打开其他透视图时始终匹配。

更新 #1 添加了一些示例

有一些在线 教程。但这里有一些示例代码,可以更轻松地查看需要哪些工作。这是您声明内容类型的方式(您需要其中两个)

<plugin>
   <extension
         point="org.eclipse.core.contenttype.contentTypes">
      <content-type
            base-type="org.eclipse.core.runtime.xml"
            describer="com.liferay.ide.core.FirstContentTypeDescriber"
            id="com.liferay.ide.core.contentType1"
            name="First Content Type"
            priority="normal">
      </content-type>
   </extension>
</plugin>

然后在Describer 类中,您将执行匹配逻辑。然后在编辑器扩展点中引用内容类型而不是文件名或扩展名,如下所示:

   <extension
         point="org.eclipse.ui.editors">
      <editor
            class="com.liferay.ide.ui.FirstEditor"
            default="false"
            id="com.liferay.ide.ui.editor1"
            name="My First Editor">
         <contentTypeBinding
               contentTypeId="com.liferay.ide.core.firstContentType">
         </contentTypeBinding>
      </editor>
   </extension>
于 2013-12-26T07:19:56.073 回答
1

我建议重新考虑您的方法,并从 WindowBuilder 中获取一些提示:有一个与打开选项卡式编辑器的文件类型相关联的编辑器;如果添加了第二个插件,让它在同一个编辑器上创建一个单独的选项卡。

于 2011-07-28T10:21:55.123 回答
0

其他选项可能是以编程方式更改文件类型与 Java 代码的关联,如

Eclipse RCP:以编程方式将文件类型与编辑器关联?

然后只有一个问题,如何在透视更改事件中执行该代码。

于 2013-12-26T10:37:09.547 回答