2

Eclipse GMF からオブジェクトを削除するときに、削除の確認ダイアログをユーザーに表示したいと考えていました。特定の EditPart のコンポーネント ロール編集ポリシーで createDeleteSemanticCommand をオーバーライドして、削除確認ダイアログを含めました。以下は、私が行ったコードスニペットです。

/////// editpolicy がインストールされている RESPECTIVE EDIT PART CLASS

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 に答える