2

操作クラスを実装しました。これは org.eclipse.core.commands.operations.AbstractOperation を拡張するため、execute()、redo()、および undo() メソッドの実装が含まれています。最初は、execute() メソッドを呼び出すことしかできませんでしたが、Eclipse の取り消しまたはやり直しボタンで取り消しまたはやり直しコマンドが使用可能になることはありませんでした。

次に、RCP アプリケーション (org.eclipse.ui.examples.undo) にサンプル プラグインをインストールすると、魔法が起こり始めました。

サンプル プラグインに付属のビュー「元に戻す履歴ビュー」を使用すると、カスタムの元に戻す項目とやり直し項目が、元に戻す項目とやり直す項目のスタックに追加されていることがわかりました。さらに、「元に戻す履歴ビュー」がアクティブな場合、カスタムの元に戻すやり直しアクションが Eclipse の元に戻すやり直しボタンに表示されます。それで、それは機能していますが、問題があります。

ビュー パーツを選択すると、項目が Eclipse の元に戻すやり直しボタンから消えます。私の仮定は、IUndoContext を正しく使用していないということです。

操作の実行に関して私が持っているものは次のとおりです。私の InventoryLabelOperation クラスは、org.eclipse.core.commands.operations.AbstractOperation を拡張します。また、activePart フィールドは、IUndoContext で正しく再生したいビュー パーツのインスタンスですが、そうではありません。

InventoryLabelOperation operation = new InventoryLabelOperation(message + name);
IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
IWorkbench workbench = activePart.getSite().getWorkbenchWindow().getWorkbench();
IUndoContext undoContext = workbench.getOperationSupport().getUndoContext();
operation.addContext(undoContext);
operationHistory.execute(operation, new NullProgressMonitor(), null);

ここで私が見逃しているものを見ている人はいますか?

4

1 に答える 1

1

操作の作成側ですべてを正しく行っていたことがわかりました。問題は、私が開発しているビュー パーツが ViewPart を拡張する CommonNavigator クラスを拡張するという事実であることが判明しました (私のビューは Common Navigator Framework を利用しているため)。CommonNavigator が独自のコンテキストを設定しているため、ワークベンチ コンテキストを使用していた元に戻す操作が正しく表示されないことに気付きませんでした。

この呼び出しから返されたコンテキストを操作に使用すると...

undoContext = 
    (IUndoContext) ResourcesPlugin.getWorkspace().getAdapter(IUndoContext.class);

期待どおりに UI に表示されるようになりました。

于 2013-08-12T14:58:15.080 に答える