在 Eclipse 中以编程方式调整视图大小

2024-02-25

我正在测试一个non-e4使用 SWTBot 的 RCP 应用程序,我需要更改视图的大小。 (移动窗框)

我尝试失败

  • 使用 SWTBot 调整我的视图大小(没有这样的 api)
  • 使用 Eclipse 3 API 调整我的视图大小(不支持)
  • 使用底层 e4 模型调整我的视图大小(调整大小不起作用)

e4 模型看起来很有前途,但我缺少一些东西,所以它不起作用。

I can

  • 获取我的部分观点:view = ePartService.findPart(ID)
  • 获取 MTrimmedWindow:window = (view as EObject).eContainer as MTrimmedWindow

I can't

  • 区域设置正确的 MPartSashContainer
  • 移动窗框setContainerData()

我想知道

  • 如何从 Part 移动到其直接父级(例如 MPartStack)
  • 为什么 M... 对象上不存在常见的 EObject 方法(例如 eContainer())?

好吧,我自己找到了解决方案。

问题是,该视图不是 e4 UI-Tree 的一部分。view.eContainer直接是MWindow。要放置在正确的位置,视图将连接到MPlaceholder,这是 e4 UI-Tree 的一部分,并且具有getParent() != null.

为了调整视图大小,步骤如下:

  • 显示视图
  • Find MPlaceholder视图的
  • Find MPartStack和“MPartSashContainer”对象
  • Set containerData
  • 重绘小部件(是的,自动更新接缝在这种情况下不起作用)

Example:

EModelService modelService = PlatformUI.getWorkbench().getService(EModelService.class);
EPartService  partService  = PlatformUI.getWorkbench().getService(EPartService.class);

// Show view
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.showView(MyView.ID, null, IWorkbenchPage.VIEW_ACTIVATE);

MPart view = partService.findPart(MyView.ID);
// view.getParent() => null, because 'view' is not a part of the e4 UI-model!
// It is connected to the Model using MPlaceholder

// Let's find the placeholder
MWindow window = (MWindow)(((EObject)eView).eContainer);
MPlaceholder placeholder = modelService.findPlaceholderFor(window, view);

MUIElement element = placeholder;
MPartStack partStack = null;
while (element != null) {
    // This may not suite your configuration of views/stacks/sashes
    if (element instanceof MPartStack && ((Object)element.parent) instanceof MPartSashContainer) {
            partStack = (MPartStack)element;
            break;
        }
        element = element.parent;
    }
}
if (partStack == null) { /* handle error */ }

// Now let's change the width weights
for (MUIElement element : partStack.getParent().getChildren()) {
    if (element == partStack) {
        element.setContainerData("50"); // Width for my view
    } else {
        element.setContainerData("25"); // Widths for other views & editors
    }
}

// Surprisingly I had to redraw tho UI manually
// There is for sure a better way to do it. Here is my (quick & very dirty):
partStack.toBeRendered = false
partStack.toBeRendered = true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Eclipse 中以编程方式调整视图大小 的相关文章

随机推荐

  • 使用组合框查询数据库

    我将一周中的所有天都放在组合框中 但是当选择一天时 所有天都显示在我的数据网格中 如何使用组合框中选定的一个值来搜索该值 Private Sub btnViewTimeTable Click sender As Object e As Ev
  • Azure Pipelines 如何为“仅手动”触发版本筛选每个阶段的工件

    假设我有这 3 个阶段 开发 QC 生产 我的要求是 仅来自特定分支 release 的工件可以部署到 QC Prod 所有分支的工件都可以部署到 Dev 我可以使用它来实现我想要的伪影过滤器对于 后期 触发版本 但我需要这个 仅手动 是否
  • F#编译器和运行时版本号混淆

    我无法确定哪个版本的 F Core 运行时库应与 Mono 平台 NET 3 5 结合使用 随 Microsoft Net 4 5 一起安装的有两个版本的 FSharp Core 运行时 2 3 0 0 和 4 3 0 0 我的猜测是 第一
  • 如何在 Android 上使用 whereArrayContains() 过滤器查询包含 Firestore 集合中的对象数组的文档?

    我在 firestore 中有一个集合 其中每个文档都包含一组联系人 我想查询那些联系人的电子邮件 ID 为特定值的文档 我遇到了 whereArrayContains 过滤器https firebase google com docs r
  • R 在 data.table 的 write.csv() 上崩溃[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 参考问题在特定数据集上调用 write table 时导致 R 崩溃 https stackoverflow com questi
  • DrawerLayout ListView 未以 GLSurfaceView 作为内容绘制

    我的Android应用程序是全屏OpenGL ES 2 0应用程序 因此主要内容是GLSurfaceView的自定义扩展 活动布局如下所示
  • R 将索引列移动到第一列[重复]

    这个问题在这里已经有答案了 我有以下数据框 RMSE A 0 03655830 B 0 24513014 C 0 02009853 D 0 02223135 我想将包含 A B C D 的列移动为第一列 并向 data frame 添加索引
  • Angular 5 应用程序的 Angular 材质版本

    我正在为此构建一个 Angular5 应用程序 我需要 Angular 材料 哪个版本的 Angular 材料与 Angular 5 应用程序兼容以及如何安装它 有了Angular 5 就可以使用Angular Material 5 执行以
  • 开发可以处理 HTTPS 连接的代理 servlet

    我开发了一个 Java servlet 它可以代理来自浏览器的 HTTP 请求 我在代理 HTTPS 请求时遇到问题 该 servlet 似乎没有从浏览器接收任何 HTTPS 请求 经过进一步调查 我注意到 HTTP 请求似乎以简单的 GE
  • 如何在Oracle SQL Developer中创建用户

    我是 Oracle sql Developer 3 1 07 42 的新手 刚刚将其安装在我的计算机上 我想建立一个新的连接 但它需要一个我不知道的用户名和密码 我已经用谷歌搜索很多天了 并且了解到有一些命令可以创建用户 但我不知道应该在哪
  • ng-bootstrap ngbDropdown 不起作用 Angular 4

    ng 下拉菜单不起作用 注 我遵循了答案here https stackoverflow com questions 43111633 ng bootstrap ngbdropdown not working in angular 4并将
  • Livereload 在 gulp 中不起作用

    我使用了 gulp webapp 来自 yeoman 的生成器 并添加了一些其他任务 如 gulp sass 和 gulp coffee 但现在 Livereload 没有启动 我需要看到这样的东西 gulp Live reload ser
  • 如何正确捕获 Aero/DWM 上的特定窗口

    背景资料 我编写了这个 MFC 应用程序并使用了很长时间 当用户按下 Print Screen Alt Print Screen 键时 它几乎会自动将屏幕截图保存到硬盘 我一直推迟使用任何与 Aero 相关的东西 直到现在我已经使用 Win
  • Django 缩进错误

    我是 Django 新手 正在教程中尝试这段代码 但现在我无法运行我的程序 因为出现以下错误 IndentationError at unexpected indent D django workspace django bookmarks
  • geb.driver.DriverCreationException:无法从回调创建驱动程序

    我正在设置一些 Geb 测试 但收到 geb driver DriverCreationException 无法从回调创建驱动程序 错误 Geb 将尝试启动测试浏览器窗口 但一旦启动 我的任何测试都不会运行 并且出现上述错误 我刚刚将 Fi
  • Volley JsonObjectRequest Post 请求不起作用

    我正在使用 android Volley 来发出请求 所以我使用这段代码 我不明白一件事 我检查我的服务器 参数始终为空 我认为 getParams 不起作用 我应该怎么做才能解决这个问题 RequestQueue queue MyVoll
  • 单击图像时选择单选按钮

    我想在单击他的图像时选择单选按钮 但它不起作用 这是我尝试过的 ul class options list li a class mydata href img class small image preview src value id
  • 如何将自定义类保存/序列化到设置文件?

    我有一个小类 包含两个字符串 如下所示 public class ReportType private string displayName public string DisplayName get return displayName
  • 如何组合目标文件(.o)来创建iOS静态库(.a)?

    我已经编译了一个库并且有目标文件 o 现在我想使用 ar 将它们组合到静态库中 我可以做到这一点 但是当我在 iOS 项目中添加该文件时 它说该库是存档类型 而链接架构是arm7 我该如何解决这个问题 Solved ar crs libst
  • 在 Eclipse 中以编程方式调整视图大小

    我正在测试一个non e4使用 SWTBot 的 RCP 应用程序 我需要更改视图的大小 移动窗框 我尝试失败 使用 SWTBot 调整我的视图大小 没有这样的 api 使用 Eclipse 3 API 调整我的视图大小 不支持 使用底层