如何将undomanager用于sourceviewer

克里斯纳文尼

我需要在源代码查看器中添加撤消重做功能。下面是我的代码。

public class MyViewer extends SourceViewer {
    public MyViewer(final Composite parent, final int styles) {
        super(parent, null, styles);

        final Font font = JFaceResources.getFont(MyConstants.EDITOR_TEXT_FONT);
        getTextWidget().setFont(font);
        IUndoManager undoManager = getUndoManager(); //new TextViewerUndoManager(25);
        //setUndoManager(undoManager); //new TextViewerUndoManager(10));
        //undoManager.connect(this);
        if (undoManager != null) {
            undoManager.reset();
        } else {
            undoManager = new TextViewerUndoManager(25);
            setUndoManager(undoManager);
            undoManager.connect(this);
        }
    }

    @Override
    public void setDocument(final IDocument document) {
    ...
    }

    @Override
    public void setHyperlinkPresenter(final IHyperlinkPresenter hyperlinkPresenter) throws IllegalStateException {
    ...
    }

}

我添加了一个按键绑定,如下图所示。

在此处输入图片说明

撤消重做仍然不起作用。我不确定键绑定是否错误,或者我的代码中缺少某些内容,还是两者都缺少。请强调我的错误。

克里斯纳文尼

我从这里找到了下面的代码

viewer.getTextWidget().addKeyListener(new KeyListener() {
 @Override
  public void keyReleased(KeyEvent e) {
       // TODO Auto-generated method stub
  }

 @Override
 public void keyPressed(KeyEvent e) {
   if( isUndoKeyPress( e )){
     viewer.doOperation(ITextOperationTarget.UNDO);
   }  else if( isRedoKeyPress( e )) {
      viewer.doOperation(ITextOperationTarget.REDO);
   }
 }

  private boolean isRedoKeyPress(KeyEvent e) {
     return (( e.stateMask & SWT.CONTROL ) > 0) && ((e.keyCode =='y' ) (e.keyCode == 'Y'));
   }

   private boolean isUndoKeyPress(KeyEvent e) {
          return (( e.stateMask & SWT.CONTROL) > 0 ) && ((e.keyCode == 'z' ) (e.keyCode =='Z'));
   }
});

添加此代码后,我能够进行撤消和重做工作。似乎不需要我在首选项页面中完成的其他键绑定。现在,首选项页面如下所示

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章