gpt4 book ai didi

java - 使用 SourceViewer 的 Eclipse 4 RCP 编辑器撤消和重做操作不起作用

转载 作者:行者123 更新时间:2023-12-02 05:54:45 25 4
gpt4 key购买 nike

我正在使用“SourceViewer”创建一个编辑器。下面给出的是我的“@PostConstruct”方法的代码片段。

// viewer is my SourceViewer instance   
viewer = new SourceViewer(parent,verticalRuler, styles);

IUndoManager undoManager = new TextViewerUndoManager(25);
undoManager.connect(viewer);
viewer.setUndoManager(undoManager);

即使默认的“TextViewerUndoManager”与“SourceViewer”关联。 Ctrl+Z 和 Ctrl+Y 不起作用。

我尝试的另一种选择是重写“SourceViewerConfiguration”子类的“IUndoManager getUndoManager(ISourceViewer sourceViewer)”并返回“TextViewerUndoManager”。这种方法也没有给出预期的结果。

请让我知道上述方法中缺少什么。

最佳答案

通常是 SourceViewerConfiguration 提供撤消管理器,SourceViewer 期望这一点并从中设置管理器。默认值已设置 TextViewerUndoManager

在 e4 应用程序中,您没有任何默认的键绑定(bind)、命令或处理程序,因此您必须设置所有这些才能使用撤消管理器。

在您的应用程序模型中声明用于撤消和重做的命令。

声明 Ctrl+Z 和 Ctrl+Y 的键绑定(bind)来指定您的命令。您可能希望将键绑定(bind)放入特定于文本编辑器的绑定(bind)表中。

声明撤消和重做命令的处理程序,撤消代码可能如下所示:

public class UndoHandler
{
@Inject
private Adapter _adapter;

@Execute
public void execute(@Named(IServiceConstants.ACTIVE_PART) final MPart part)
{
final ITextOperationTarget opTarget = _adapter.adapt(part.getObject(), ITextOperationTarget.class);

opTarget.doOperation(ITextOperationTarget.UNDO);
}

@CanExecute
public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) final MPart part)
{
final ITextOperationTarget opTarget = _adapter.adapt(part.getObject(), ITextOperationTarget.class);
if (opTarget == null)
return false;

return opTarget.canDoOperation(ITextOperationTarget.UNDO);
}
}

重做类似,但使用 ITextOperationTarget.REDO

关于java - 使用 SourceViewer 的 Eclipse 4 RCP 编辑器撤消和重做操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209675/

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