如何创建我自己的 shell 来替换 e4 RCP 中 MTrimmedWindow 中创建的 shell?

2024-03-03

有没有办法用用户定义的窗口替换 Eclipse RCP 为 MTrimmedWindow 生成的 shell?

Eclipse 创建一个具有特定样式类型的 shell,该样式类型只能在创建时提供。我想从为 MTrimmedWindow 创建的 shell 元素中删除最大化和调整大小。如果有人有解决上述问题的方法,请回复。


外壳的样式在创建后无法更改,外壳本身在渲​​染器创建后也无法更改。但情况并非毫无希望。

Eclipse 4 使用渲染器从应用程序模型生成 UI 元素。这些渲染器can可以通过使用渲染框架进行交换,这是创建与默认样式不同的 shell 的一种可能方法。

该解决方案涉及为 MWindow 类型的 UIElements 编写自己的渲染器,提供 WorkbenchRendererFactory 来为 MWindows 创建新的 SWT 渲染器,以及向产品注册新工厂。

默认值:由 WBWRenderer 创建外壳

WBWRenderer(工作台窗口渲染器)是 MWindow 类型的 SWT 元素的标准渲染器。

In WBWRenderer#createWidget,外壳是用样式创建的SWT.SHELL_TRIM,这是一种方便的风格SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE:

wbwShell = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | rtlStyle);

这将导致 TrimmedWindow 可以最大化并调整大小,但在创建后无法更改此行为。

通过新渲染器创建外壳

为了解决上述限制,您可以使用 WBWRenderer 作为模板来提供不同的渲染器。这允许您更改 shell 创建的代码,例如

wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
                         SWT.MIN | rtlStyle);

该渲染器需要由 WorkbenchRendererFactory 返回,作为用于显示 MWindows 的渲染器。此外,渲染器工厂必须作为产品属性添加到plugin.xml 中。

这些更改将导致 TrimmedWindow 无法最大化或调整大小。

可以找到如何编写和注册 WorkbenchRendererFactory 的示例here http://www.vogella.com/articles/Eclipse4Renderer/article.html#renderer_own.

更好的解决方案?

实际上,可能有更好的方法来设置 SWT shell 的样式,因为 WBWRenderer 已经使用标签来确定 MWindow 行为:shellMaximized and shellMinimized。这些标签可以在应用程序模型编辑器中修剪窗口的补充选项卡中设置。

如果可以以类似的方式设置 swt 样式标签,则它们可以用于设置 shell 样式。这将是对 Eclipse 的功能请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建我自己的 shell 来替换 e4 RCP 中 MTrimmedWindow 中创建的 shell? 的相关文章

随机推荐

  • Haskell 中的验证

    我有一些需要验证的嵌套记录 我想知道惯用的 Haskell 方法是什么 简化一下 data Record Record recordItemsA ItemA recordItemB ItemB deriving Show data Item
  • 打开 JSX 文件时如何使 VS Code 将语言更改为 JavaScript React

    目前 当我打开一个 jsx文件的默认语言是纯 JavaScript 有没有办法设置编辑器根据文件扩展名更改语言 理想情况下 我可以将此设置放入本地设置配置文件或工作区特定配置文件中 我使用的版本是Version 1 15 0 insider
  • 更改 API 级别 Android Studio

    我想将 Android Studio 中的最低 SDK 版本从 API 12 更改为 API 14 我尝试在清单文件中更改它 即
  • Eclipse 中的“Android Private Libraries”文件夹是什么?

    我最初以为它是专门用于像支持库这样的官方库的 然而 每当我使用 添加到构建路径 菜单项添加自定义 JAR 时 它都会自动显示在 引用库 和 Android 私有库 中 其中之一是多余的 因为在构建时导出两者是没有意义的 此外 Android
  • 命令不同步,您现在无法运行此命令

    我正在尝试使用 mysqldb 创建一些表 问题是当执行python脚本时db pymysql 抛出错误 mysql exceptions ProgrammingError 2014 命令不同步 您现在无法运行此命令 db py impor
  • 如何使用 Dagger2 将 Activity 范围内的依赖项替换为模拟

    我的 Activity 中有范围依赖项 我想用一些模拟来测试该 Activity 我读过有关建议在测试期间用测试组件替换应用程序组件的不同方法 但我想要的是替换活动组件 例如 我想在 MVP 设置中针对模拟演示者测试活动 我相信通过在 Ac
  • PHP:如何将无穷大或 NaN 数字编码为 JSON?

    显然 无穷大和 NaN 不是 JSON 规范的一部分 因此这个 PHP 代码 numbers array numbers positive infinity INF numbers negative infinity INF numbers
  • 大数组上的分段错误

    以下代码在 2GB 机器上运行时出现分段错误 但在 4GB 机器上运行 int main int c 1000000 cout lt lt done n return 0 数组的大小仅为 4Mb C 中可以使用的数组的大小是否有限制 您可能
  • Ehcache - 找不到生成器的缓存名称

    我已经浏览了这里提出的很多类似问题 但我仍然无法找到解决方案 所以这是我的问题 我正在尝试在 Spring Boot 中设置 Ehcache Spring 2 2 6 RELEASE Ehcache 3 8 1 缓存服务 I ve got
  • data-* 属性可以包含 HTML 标签吗?

    I E img src world jpg 据我了解 它基本上是有效的 但最好使用 HTML 实体 来自HTML 4 参考 http www w3 org TR WD html40 970708 charset html 您还应该在属性值中
  • 如何显示外部 PostgreSQL 连接的 WORK_MEM?

    我知道我可以使用SHOW WORK MEM 在psql中查看当前使用的连接的值 但其他连接呢 我有一个应用程序可以打开许多连接并动态更改WORK MEM基于上下文 我想监控这些WORK MEM进行更改以确保它们得到应用 换句话说 我想 调整
  • 有效的 MFC ID 范围

    这让我很困惑 我正在读这个技术说明 https learn microsoft com en gb cpp mfc tn020 id naming and numbering conventions它指出 Prefix Resource t
  • 如何在 .xib 文件上创建的 UIViewController 中设置 UITableView

    我有一堂这样的课 interface ExerciseLogDetails UIViewController
  • AVURLAsset获取视频大小

    这真是令人沮丧 我正在尝试获取 AVURLasset 的大小 但尽量避免naturalSize因为 Xcode 告诉我 这在 iOS5 中已被弃用 但是 替代品是什么 我找不到任何关于如何在不使用 naturalsize 的情况下获取视频尺
  • CRT 库类型

    我试图更好地掌握 Visual Studio 2013 中的 CRT 库选项 C gt 代码生成 gt 运行时库 以及如何知道选择哪个选项 以及何时更改默认值 From MSDN http support microsoft com en
  • 如何在java应用程序中使用webRTC特定模块

    我有一个简单的java应用程序应用程序客户端可以向服务器发送 接收纯音频 UDP 数据包 服务器将音频数据包转发给除发送者之外的所有人 现在我该如何使用webRTC 回声消除我的应用程序端的模块或其他功能模块 我发现可以使用 JNI 和 w
  • .htaccess 拒绝子文件夹中的文件

    我想阻止对 sub folder index php 的访问 但不阻止对其他任何地方的 index php 的访问
  • 在 Jade 视图中使用 javascript 代码 - if(variable) 显示未定义而不是传递

    所以这是一个反复出现的问题 我还没有找到另一个例子 所以这里是 渲染 Jade 模板时我得到 variableName undefined即使在使用时 if variableName 在模板中 示例 我使用它作为 信息 闪存消息的一部分 i
  • 具有不同 ID 的列的总和?

    我有一个包含多个 ID 的表 需要一个查询来返回每个 ID 的列之和 Calls 表看起来像这样 EmployeeID TypeOfCall InvoiceAmount John NC 50 john NC 100 Joe NC 76 Jo
  • 如何创建我自己的 shell 来替换 e4 RCP 中 MTrimmedWindow 中创建的 shell?

    有没有办法用用户定义的窗口替换 Eclipse RCP 为 MTrimmedWindow 生成的 shell Eclipse 创建一个具有特定样式类型的 shell 该样式类型只能在创建时提供 我想从为 MTrimmedWindow 创建的