独自等待
那曾经从自己身边溜走的人……
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 0,comments - 3,trackbacks - 0
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Java
文章分类
(12)
Birt(2)
Eclipse(3)
EMF(1)
GEF
GMF
Java(3)
SWT(3)
文章档案
(11)
2009年3月 (1)
2009年1月 (1)
2008年12月 (1)
2008年11月 (3)
2008年9月 (1)
2008年6月 (3)
2008年5月 (1)
搜索
最新评论
1. re: SWT显示图片[未登录]
擦擦擦
--1
2. re: 自定义 CellEditor[未登录]
评论内容较长,点击标题查看
--杨
3. re: 自定义 CellEditor
怎么调用呢?能给个例子么?
--ljj
为SourceViewer添加Undo、Redo功能
前阵子,做了一个表达式编辑器,基于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)
==
0
)
return
;
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
自由
阅读(668)
评论(0)
编辑
收藏
所属分类:
Eclipse
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Eclipse RCP中超长任务单线程,异步线程处理
从插件/Rcp中获取文件路径的方法
为SourceViewer添加Undo、Redo功能