2

从 Eclipse GMF 删除对象时,我想向用户显示确认删除对话框。我已经覆盖了特定 EditPart 的组件角色编辑策略中的 createDeleteSemanticCommand 以包含删除确认对话框。以下是我所做的代码片段。

/////// RESPECTIVE EDIT PART CLASS,安装editpolicy的地方

protected void createDefaultEditPolicies() {
installEditPolicy(EditPolicy.COMPONENT_ROLE, new 
            ComponentRoleEditPolicy()); 

/////// RESPECTIVE EDITPOLICY CLASS,其中完成自定义删除对话框操作(ComponentRoleEditPolicy)

protected Command createDeleteSemanticCommand(GroupRequest deleteRequest)
{
if(deleteRequest instanceof GroupRequestViaKeyboard) {
     if(deleteDialog(foo.getName())) 
            {
                return super.createDeleteSemanticCommand(deleteRequest);
            } 
            else {
                return UnexecutableCommand.INSTANCE;
            }
       }
return UnexecutableCommand.INSTANCE;
}

////// 删除确认方法

public static boolean deleteDialog(String name) {
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    boolean delete = MessageDialog.openConfirm(shell, "Delete", "Are you sure you want to delete "
    + name + " ?");
    return delete;
}

对于每个不同的编辑部分,我最初编写了这段代码来要求删除确认。后来,我意识到在图表中选择多个编辑部分并执行删除按钮,我得到'n'删除图表中选择的'n'个片段的确认框。如何解决这个问题呢。请帮我解决这个问题。

谢谢。

4

1 回答 1

0

这是我为解决问题而遵循的解决方案。

在自定义生成的 DeleteAction 类中,重写以下方法

// confirm dialog for rightclicking and selecting "Delete from Model"
@Override
public void runWithEvent(Event event) {
    if(deleteDialog("the selected element(s)"))
        super.runWithEvent(event);
}
// Confirm dialog for pressing delete key. 
@Override
public void run() {
    if(deleteDialog("the selected element(s)")) {
        super.run();
    }
}

添加删除键操作,在生成的 XXXDiagramEditor 类中,

// In the generated configureGraphicalViewer() - Change to @Generated NOT
KeyHandler keyHandler = getDiagramGraphicalViewer().getKeyHandler();
keyHandler.put(KeyStroke.getPressed(SWT.DEL, 127, 0), new DeleteElementAction(this)/*Custom generated delete action*/);
getDiagramGraphicalViewer().setKeyHandler(keyHandler);

添加这些代码后,一切都像魅力一样。当我们按下删除(即使在选择任意数量的元素之后)并执行所需的操作时,它会要求确认对话框。同样,当我们右键单击并选择从模型中删除时,它也可以工作。此外,我们不需要组件角色编辑策略。我已将其从installEditPolicy()[还有 editPolicy 文件] 中删除。

于 2013-02-21T14:56:32.233 回答