gpt4 book ai didi

java - 使用上下文菜单添加图形 - Eclipse GEF

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:06 24 4
gpt4 key购买 nike

全部,

我正在创建一个无调色板的 Eclipse 插件,其中通过上下文菜单将图形添加到自定义编辑器,但我没有找到执行此操作的方法。谁能指导我如何通过上下文菜单向编辑器动态添加图形,即添加操作/命令。


由于 Eclipse GEF 插件开发发现可供查看的示例非常少,因此我添加了我的解决方案,以便其他人发现它有用。此代码有助于将节点呈现给编辑器。

用于向编辑器呈现图形的 Action 类的源代码:

public class AddNodeAction extends EditorPartAction
{
public static final String ADD_NODE = "ADDNODE";

public AddNodeAction(IEditorPart editor) {
super(editor);
setText("Add a Node");
setId(ADD_NODE); // Important to set ID
}

public void run()
{
<ParentModelClass> parent= (<ParentModelClass>)getEditorPart().getAdapter(<ParentModelClass>.class);

if (parent== null)
return;
CommandStack command = (CommandStack)getEditorPart().getAdapter(CommandStack.class);

if (command != null)
{
CompoundCommand totalCmd = new CompoundCommand();
<ChildModelToRenderFigureCommand>cmd = new <ChildModelToRenderFigureCommand>(parent);
cmd.setParent(parent);
<ChildModelClass> newNode = new <ChildModelClass>();
cmd.setNode(newNode);
cmd.setLocation(getLocation()); // Any location you wish to set to
totalCmd.add(cmd);
command.execute(totalCmd);
}
}

@Override
protected boolean calculateEnabled()
{
return true;
}
}

最佳答案

我认为您在这里需要多种不同的东西。请记住,GEF 希望您拥有适当的 MVC 模式,您可以在其中拥有自己的模型,将 Figures 作为 View,将 EditParts 作为 Controller 。

从我的头顶我会说你至少需要这些东西:

  • 创建命令
    • 包含您需要的所有模型级修改执行将您的新数据添加到您的数据模型(可撤销和交易)
  • 创建 Action
    • 创建 CreateCommand 实例,使用当前选择对其进行初始化并在 editdomain 中执行该命令
  • 上下文菜单提供者
    • 将 CreateAction 提供给上下文菜单

如果您碰巧使用 GMF,当您在命令中进行模型修改时,规范机制会自动为您生成 editparts,但如果您不使用 GMF,则必须确保您自己的模型和 editparts 正在处理并刷新正确添加的新项目。

编辑:好的,这里有一些处理请求的代码建议。

public void run() {
// Fetch viewer from editor part (might not work, if not, try some other way)
EditPartViewer viewer = (EditPartViewer) part.getAdapter(EditPartViewer.class);
// get Target EditPart that is under the mouse
EditPart targetEditPart = viewer.findObjectAt(getLocation());
// If nothing under mouse, set root item as target (just playing safe)
if(targetEditPart == null)
targetEditPart = viewer.getContents();

// Make and initialize create request with proper information
CreateRequest createReq = new CreateRequest();
createReq.setLocation(getLocation());
createReq.setFactory(new OwnFactoryImplementation());

// Ask from target editpart command for this request
Command command = targetEditPart.getCommand(createReq);

// If command is ok, and it can be executed, go and execute it on commandstack
if(command != null && command.canExecute()) {
viewer.getEditDomain().getCommandStack().execute(command);
}
}

现在发生的是将请求创建 editpart,因此操作本身不知道命令是如何工作的,是什么让它客观地反对命令。

因此,为了让事情正常进行,您需要将新的 EditPolicy 安装到您的 EditPart。可以在 EditParts 的 createDefaultEditPolicies() 函数上安装 EditPolicies。当有 CreateRequest 时,这个 EditPolicy 必须 react 并返回命令。这样任何 child 都可以提供自己的命令来为自己创建 child 。

这是它如何工作的一个很好的图像( Controller 是 EditPart): Diagram

请询问我是否可以为您提供更多帮助。我知道这看起来有点复杂,但这会让您的生活更轻松,并且在您完成之后,您实际上已经很好地理解命令请求模式,并且可以在许多不同的地方重复使用它。

关于java - 使用上下文菜单添加图形 - Eclipse GEF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527613/

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