獨自等待
那曾經從自己身邊溜走的人……
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
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
新乐市
|
高雄市
|
金门县
|
泸定县
|
怀集县
|
和龙市
|
曲沃县
|
凌云县
|
府谷县
|
深水埗区
|
奉新县
|
建水县
|
崇礼县
|
山西省
|
牙克石市
|
芒康县
|
晋宁县
|
台南县
|
砚山县
|
黄平县
|
泸水县
|
长汀县
|
京山县
|
海门市
|
泽普县
|
乐昌市
|
乳山市
|
香港
|
闽清县
|
青铜峡市
|
江达县
|
东辽县
|
嘉黎县
|
霍林郭勒市
|
巩留县
|
香河县
|
石台县
|
林州市
|
云南省
|
三都
|
东乡族自治县
|