2013-08-07 47 views
2

我已經實現了我的操作類,並且它擴展了org.eclipse.core.commands.operations.AbstractOperation,因此它實現了方法execute(),redo ()和undo()。起初,我只能調用execute()方法,但我永遠無法在我的Eclipse undo redo按鈕上看到undo或redo命令。如何在我的RCP應用程序中使用我自己的IUndoContext實現IUndoableOperation

然後我在我的RCP應用程序(org.eclipse.ui.examples.undo)中安裝了一個插件示例,魔術開始發生。

使用示例插件附帶的視圖「撤消歷史視圖」,我可以看到我的自定義撤消和重做項目被添加到堆棧中進行撤消和重做。此外,當「撤消歷史視圖」處於活動狀態時,我的自定義撤銷重做操作將顯示在Eclipse撤消重做按鈕中。所以,它工作,但有一個問題。

當我選擇我的視圖部件時,項目從Eclipse中消失undo redo按鈕。我的假設是我沒有正確使用IUndoContext。

以下是我對該操作的執行情況。我的InventoryLabelOperation類擴展了org.eclipse.core.commands.operations.AbstractOperation。 activePart字段是我的View部件的一個實例,我希望能夠正確使用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); 

有沒有人看到我在這裏失蹤?

回答

1

事實證明,我在事物的操作創建方面做了一切正確的事情。問題結果是,我正在開發的視圖部分擴展了擴展ViewPart的CommonNavigator類(因爲我的視圖利用了Common Navigator Framework)。我沒有意識到,CommonNavigator正在設置自己的上下文,因此導致使用工作臺上下文的撤消操作正確顯示。

一旦我有我的操作可以從該調用返回的背景下...

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

事情開始出現在UI了預期。

相關問題