独自等待
那曾经从自己身边溜走的人……
posts - 0,comments - 3,trackbacks - 0
    前阵子,做了一个表达式编辑器,基于JavaScript语法的,支持表达式语法验证错误提示、内容辅助输入、语法高亮等,JS语法解析部分采用ANTLR3.0实现,诸如编辑器内容辅助、内容信息装饰等在网络上有相当多的文章介绍,google搜索能有一堆,这里就不再叙述了。
    简单说回本篇文章的主题吧,Undo、Redo功能在代码编辑器中应该是最基本的也是必备的功能,翻阅了一下SourceViewer的代码,发现它提供了一个setUndoManager(IUndoManager undoManager) 方法,再详细的阅读了下SourceViewer对Undo/Redo部分的相关支持,要实现Undo/Redo功能还是相当简单方便的,还是闲话少说,贴出代码片段大家看看就很明白了

SourceViewer expressionViewer = new SourceViewer(viewerComposite, null
                    SWT.V_SCROLL 
| SWT.H_SCROLL | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
            expressionViewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));



//支持99次
IUndoManager undoManager = new TextViewerUndoManager(99);
            undoManager.connect(expressionViewer);
            expressionViewer.setUndoManager(undoManager);
            
            Control styleTextWidget 
= expressionViewer.getTextWidget();
            expressionViewer.appendVerifyKeyListener(
new VerifyKeyListener() {
                
public void verifyKey(VerifyEvent event) {
                    
if ((event.stateMask & SWT.CTRL) != 0)
                        event.doit 
= false;
                }

            }
);
            styleTextWidget.addKeyListener(
new KeyAdapter() {
                
public void keyPressed(KeyEvent e) {
                    
// Only if CTRL was pressed
                    if ((e.stateMask & SWT.CTRL) == 0return;
                    
int operation = 0;
                    
if (e.character == ' '{
                        
// Ctrl + Spacebar: Content Assist
                        operation = SourceViewer.CONTENTASSIST_PROPOSALS;
                    }
 else if ((e.character | '\u0040'== 'Z'{
                        
// Ctrl + Z: Undo
                        operation = ITextOperationTarget.UNDO;
                    }
 else if ((e.character | '\u0040'== 'Y'{
                        
// Ctrl + Y: Redo
                        operation = ITextOperationTarget.REDO;
                    }

                    
// Check if operation is possible
                    if (operation != 0 && expressionViewer.canDoOperation(operation)) 
                        
// Perform operation
                        expressionViewer.doOperation(operation);
                }

            }
);
大家现在可以试试了,Ctrl+Z Undo; Ctrl+Y Redo
posted on 2008-09-28 14:41 自由 阅读(666) 评论(0)  编辑  收藏 所属分类: Eclipse

只有注册用户登录后才能发表评论。


网站导航: