我需要在源代码查看器中添加撤消重做功能。下面是我的代码。
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] 删除。
我来说两句