獨自等待
那曾經從自己身邊溜走的人……
BlogJava
首頁
新隨筆
新文章
聯系
聚合
管理
posts - 0,comments - 3,trackbacks - 0
<
2025年7月
>
日
一
二
三
四
五
六
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
5
6
7
8
9
留言簿
給我留言
查看公開留言
查看私人留言
隨筆分類
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
自由
閱讀(679)
評論(0)
編輯
收藏
所屬分類:
Eclipse
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Eclipse RCP中超長任務單線程,異步線程處理
從插件/Rcp中獲取文件路徑的方法
為SourceViewer添加Undo、Redo功能
Copyright ©2025 自由 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
高唐县
|
白朗县
|
资阳市
|
江山市
|
平遥县
|
阿克陶县
|
汕尾市
|
旬邑县
|
临城县
|
谢通门县
|
宜春市
|
叙永县
|
武功县
|
双江
|
麦盖提县
|
象山县
|
黄梅县
|
咸丰县
|
南宁市
|
遂溪县
|
常山县
|
宁强县
|
忻城县
|
鄂伦春自治旗
|
疏附县
|
稻城县
|
海林市
|
宣武区
|
凌云县
|
宜兴市
|
思茅市
|
新巴尔虎左旗
|
吉木乃县
|
鸡西市
|
年辖:市辖区
|
西乌珠穆沁旗
|
揭阳市
|
哈巴河县
|
丰台区
|
科技
|
高尔夫
|