当前位置: 首页 > 知识库问答 >
问题:

如何在eclipse 4 RCP应用程序中防止浮动编辑器窗口?

澹台季萌
2023-03-14

Eclipse 4 RCP应用程序支持浮动编辑器窗口。

使用兼容性层,我将一组RCP应用程序从Eclipse 3.8移植到Eclipse 4.4。这些应用程序不是为浮动编辑器设计的。我想把重新设计的费用推迟到以后。

在注释40中,浮动编辑器窗口的Eclipse增强请求提到了控制编辑器窗口策略的可取性:

在e4中,理想情况下,我们能够在布局的任何地方“托管”当前的编辑器或视图。将其位置限制在编辑器区域的选择应该通过一些“策略”来强制执行。

请注意,这其实并没有那么简单,主要是由于编辑器处理菜单/TB的方式存在根深蒂固的差异(即任何托管编辑器的地方都需要一个“主”工具栏来托管编辑器工具)。

问题:

  • 如何关闭浮动编辑器窗口的功能

共有1个答案

姬俊能
2023-03-14

我有一个解决方案,但它并不漂亮,还有一些问题。

该解决方案需要复制Eclipse DnDAddon的整个包,并在DetachedDropAgent中进行一个小的更改。(在@greg-449的初步评论和一些初步研究之后,我原本希望用我自己的类替换DndAddon,该类安装了DnDManager的子类。然而,DnDManager和其他关键类是受包保护的。)

这个工作想法来自Eclipse e4的开发负责人Eric Moffat,这是对我禁用浮动编辑器的增强请求的响应。他在这里列出了另外两个选项,其中一个类似于@christoph。keimel的选项a。

以下是一些细节。这至少适用于Eclipse 4.4。

首先,您需要一个应用程序模型文件。如果您还没有,请提取文件LegacyIDE。e4xmi来自Eclipse插件组织。日食用户界面。工作台*。罐子使用新名称将其复制到您自己的插件中(在本例中为myApp.e4xmi)。然后通过向应用程序插件中的产品扩展添加属性applicationXMI来使用它。xml文件。

   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="com.mycompany.myapp"
            name="MyApplicationName">
         ...
         <property
               name="applicationXMI"
               value="com.my.plugin/myApp.e4xmi">
         </property>
      </product>
   </extension>

接下来,复制整个包。日食e4.ui。工作台。插件。来自插件组织的dndaddon。日食e4.ui。工作台。插件。swt*。jar到您自己的包中。用户界面。工作台。插件。dndaddon。

包名称的后缀很重要。不要更改附加类DnDAddon的名称也很重要。如果您更改其中一个,您会发现标准的DnDAddOn被添加到修改后的DnDAddOn之外,这要归功于org。日食e4.ui。工作台。插件。swt。DnDProcessor和编辑器仍然可以浮动。

接下来,在myApp. e4xmi中,修改“DnD Addon”行以指向您的版本。贡献URI包括包含您的DnDAddon版本的插件的名称,以及它的类路径。例如:

最后,在DetachedDropAgent类中,修改canDrop()方法以使兼容性编辑器失败。(我在下面编写了添加的代码。)

public class DetachedDropAgent extends DropAgent {
...
@Override
public boolean canDrop(MUIElement dragElement, DnDInfo info) {
    if (info.curElement != null)
        return false;

    // Add this code to disable floating of editors using the compatibility layer.
    String elementId = dragElement.getElementId();
    if ( "org.eclipse.e4.ui.compatibility.editor".equals( elementId )) {
        return false;
    }

            ...
}

 类似资料:
  • 我想在显示(打开)弹出编辑器之前得到确认,单击剑道网格中的编辑命令按钮与删除确认相同。 我使用了网格的编辑事件。它成功地显示了确认对话框,但其后面也打开了弹出编辑器窗口。 是否有任何方法我只能在用户确认后显示弹出编辑器窗口?

  • 问题内容: 我在某些设备(带有Android 7的Nexus 5x)上遇到非常奇怪的情况:当我清理其数据并卸载它,然后与Studio一起安装时,该应用并未统一,但它使用的是1月24日的数据!我在平板电脑上尝试了相同的步骤,但该应用程序没有数据。 我已经重复了很多次此过程,我清理了我的项目,多次对其进行了重建,并且始终以1月24日的数据(包括数据库和共享首选项)开始。 我什至尝试了adb shell

  • 我发现Atom编辑器是Sublime文本编辑器的免费替代品。无法找到在Atom编辑器中运行程序的简单方法。在我的例子中,我试图运行一个java程序。如果可能的话请告诉我如果是,请说明应采取的步骤。

  • 在前面的MDI程序中,当应用程序启动时,都会自动创建一个空白窗口。但有时我们并不希望创建这样的空白窗口。比如,对于一个文件浏览器来说,空白窗口就没有什么意义。 要防止空白窗口的创建,首先就要明白这个窗口是如何被创建的。在InitInstance()中,有一个命令行的执行过程,当命令行上没有参数时,函数ParseCommandLine(cmdInfo)会将CCommandLineInfo::m_nS

  • 问题内容: 以下是开始对话的几种可能性: 初始化后转义所有输入。 转义每个值,最好在生成SQL时转义。 第一种解决方案是次优的,因为如果要在除SQL之外的其他任何方式中使用每个值,则需要取消转义每个值,例如在网页上输出它。 第二种解决方案更有意义,但是手动转义每个值是一件痛苦的事情。 我知道已准备好的语句,但是我发现MySQLi麻烦。另外,将查询与输入分离也使我感到担忧,因为尽管正确执行订单至关重

  • 问题内容: 我尝试使用以下代码在关闭浏览器窗口时收到警报: 它可以工作,但是如果页面包含一个超链接,则单击该超链接会引发相同的警报。仅在关闭浏览器窗口时才需要显示警报,而在单击超链接时则不需要。 问题答案: 保持您的代码不变,并使用jQuery处理链接: