gpt4 book ai didi

java - 有没有办法以编程方式定义 MToolbarElements 在 MToolBar 中的位置?

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:11 25 4
gpt4 key购买 nike

我正在开发一个 Eclipse rcp 应用程序,其中贡献了各种插件。每个插件都有自己的处理器,它以编程方式将更多元素插入可能现有的 MToolBar(使用现有的 MToolBarElements)。插入元素的顺序取决于插件的初始化顺序,除了插件之间的依赖关系之外,它是不确定的。但是,在插件之间创建人为依赖关系来强制插件的初始化顺序并不是一种替代方法。

是否有一种开箱即用的方式来排列元素之间的相对关系?例如,元素 X 必须始终插入到工具栏中 ID 为“foo.bar”的元素 Y 之后。或者我是否必须自己管理将元素添加到工具栏的顺序?

每个插件都定义自己的处理器

public class ApplicationModelProcessor {
@Execute
public void execute(
final MApplication application,
final ToolBarBuilder toolbarBuilder) {
// ToolBarBuilder is a class providing methods to configure toolbar
// elements and appending them to existing toolbars. So after the
// configuration of the builder "build" is called and toolbar elements
// are added to (existing) toolbars according to the configuration of
// the builder
toolbarBuilder.doSomeConfiguration();
toolbarBuilder.build();
}

在 ToolBarBuilder 类中存在一个 updateToolItem 方法,它可以有效地将 MToolBarElement 添加到 MToolBar

public class TooBarBuilder {
public MToolBarElement build() {
// The code happening here basically searches for existing MToolBar or
// creates a new MToolBar according to a given configuration of the
// builder
MToolBar toolbar = findOrCreateToolBar();

// and adds a new MToolBarElement to the given MToolBar
return updateToolItem(toolbar);
}


// This method is invoked at some point during the execution of the provided processor. The toolBar is looked up before and provided to the method-
private MToolBarElement updateToolItem(final MToolBar toolBar) {
final MToolBarElement result = createHandleToolItem();

// At this point I could manage the order by myself but is there a better way to do this?
toolBar.getChildren().add(result);

return result;
}
}

某些插件通过在“org.eclipse.e4.workbench.model”扩展点注册的自己的 ApplicationModelProcessor 向同一个 MToolBar 提供 MToolBarElements。

GIVEN 提供工具栏项目 1 和 2 的插件

另一个提供工具栏项目 3 的插件

何时启动应用程序

THEN工具栏项目的顺序必须保持不变(项目的绝对顺序并不那么重要,但顺序应始终保持不变)

目前有时是 1,2,3 或 3,2,1

最佳答案

最终的解决方案是将实现从直接将 MToolBarElements 添加到 MToolBar 更改为添加 MToolBarContributions,并让 Eclipse 负责将 MToolBarContripution 引用的 MToolBarElements 添加到 MToolBar 中的正确位置:

@Creatable
public class TooBarBuilder {

@Inject
private MApplication application;

private String positionInParent;

// The positionInParent is an expression that represents a position
// relative to another element in the MToolBar, for example:
// "after=another.toolbar.item.id"
public ToolBarBuilder positionInParent(final String positionInParent) {
this.positionInParent = positionInParent;
return this;
}

public MToolBarElement build() {
// The code happening here basically searches for existing MToolBar or
// creates a new MToolBar according to a given configuration of the
// builder
MToolBar toolbar = findOrCreateToolBar();

// and adds a new MToolBarElement to the given MToolBar
return updateToolItem(toolbar);
}


// This method is invoked at some point during the execution of the provided processor.
// The toolBar is looked up before and provided to the method.
private MToolBarElement updateToolItem(final MToolBar toolBar) {
final MToolBarElement result = createHandleToolItem();
MToolBarContribution contribution = MMenuFactory.INSTANCE.createToolBarContribution();
contribution.setElementId(getContributionId()); // any elementId is ok, details how the id is created are not of interest for the solution
contribution.setParentId(toolbar.getElementId());
contribution.setPositionInParent(positionInParent);

// after all model processors have been executed the MToolBarContribtions
// are evaluated. MToolBarElements in the created MToolBarContributions
// are added to the MToolBars referenced by the parentId. During this process
// the MToolBarElements are positioned relatively to each other according to
// "positionInParent"
application.getToolBarContributions().add(contribution);
}
}

关于java - 有没有办法以编程方式定义 MToolbarElements 在 MToolBar 中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com