根據資料系統整理、明確一下
retarget action
這個概念(以在
gef中的應用為例)。
它是一種具有一定語義但沒有實際功能的
action
。它唯一的作用是在主選單或是主工具條上佔據乙個位置,編輯器將具有實際功能的
action
對映到這個
retarget action
上,當編輯器被啟用時,這個
retarget action
將具有那個
action
的功能。
舉例,eclipse
提供了iworkbenchactionconstants.copy
這個retarget action
,它的文字、圖示登時預先定義好的,而
abcaction
是乙個具體的動作類,通過在某個
editor
中geteditorsite().getactionbars().setglobalactionhandler(iworkbenchactionconstants.copy, abcaction)
就實現了對映。
一般地,
eclipse
自帶的action
(redo/undo
等)繫結到
eclipse
自帶的常量
id上。自己定義的
action
繫結到自己的常量
id上。當然,也可以交叉。
eclipse
引入retargetaction
的目的是為了儘量減少選單
/工具條的重建消耗,利用使用者使用上的一致性。
重定向的操作分為
eclipse
中已定義的操作和未定義的操作,已定義的操作如
redo/undo
等;未定義的操作就是自己需要定義的操作。
1通過contributorclass
的實現類,在該類內部的
buildactions()
方法中新建,並用
addretargetaction()
方法繫結。 2
不用buildactions
內建立新類,隱含在
gef的
editor
內部的createactions()
方法中呼叫
super.createactions()
也可以建立
(對於非
eclipse
定義的操作,我們在
createactions()
中自己新增
)。這時可以在
contributorclass
類的declareglobalactionkey()
方法通過呼叫
addglobalactionkey
()來繫結。 3
不利用contributorclass
類,而在
gef的編輯器初始化時,在
createactions()
方法中建立
action
新增到actionregistry
中,並利用類似下面的**繫結操作:
比如,在
initializegraphicalviewer()
方法中通過
geteditorsite().getactionbars()
得到actionbars
,並通過
getactionregistry()
方法得到
actionregistry。
//………
//準備從actionregistry
中找actionid
對應的處理動作
actionregistry registry = getactionregistry();
//actionbar
上按鈕的重定向
iactionbars bars =this.geteditorsite().getactionbars();
i*******manager *******manager = bars.get*******manager();
//action的id
string id = actionfactory.
undo
.getid();
bars.setglobalactionhandler(id, registry.getaction(id));
//動作繫結到工具欄上
*******manager.add(registry.getaction(id));
與檢視不同編輯器沒有自己的選單和工具條,它的選單只能新增到主選單內,因此在擴充套件編輯器的時候,元素有乙個
contributorclass
屬性。通過這個屬性定義的類的
buildactions()
方法將選單重定向到主選單上。
protectedvoidbuildactions()
publicvoidcontributeto*******(i*******manager *******manager)
publicvoidcontributetomenu(imenumanager menumanager)
/* * 對於已經有的
retarget action
,我們應該在這個方法中呼叫
addglobalactionkey()
方法來宣告
* 當編輯器被啟用時,在
globalactionkeys
中的id
指向的action
將被對映到
regargetaction上。
* 不再需要
setglobalactionhandler("id",handler).
因此上面
buildactions
()中可以刪除,變為下面形式
*/protectedvoiddeclareglobalactionkeys()
在gef
內沒有定義的相應的
action
,這些action
是這個編輯器所獨有的。假定,我們選擇的3個
figure
,要給這3個
figure
統一設定優先順序屬性。即當選中這幾個
figure
時,我們插入到主選單中的設定優先順序的
action
可用。
我們建立的
action
應該是gef
中selectionaction
的子類,
因為我們需要對選中的
figure
操作。還需要將
action
新增到selectionactions中。
privatevoidcreatemyactions()
這個selectionaction
需要自己實現
calculateenabled()
方法。另外,因為在
gef編輯器中的動作都是支援
redo/undo
的。因此我們需要在這個
action.run
()的時候建立命令並推入命令棧,
action
的執行是靠命令,而不是直接執行。如果選中的
figure有3
個,可能需要建立
3個命令,這時為執行
redo/undo
也能一次性操作,而不是乙個乙個的來,可能需要乙個
compoundcommand.將3
個命令組合成乙個命令。注意的是:在建立命令之前判斷選中的
figure
對應的editpart
(getselectedobjects()
)是否是可以執行
action
的物件。
在gef editor
中的configuregraphicalviewer()
方法中,新增**
//右鍵選單
mycontextmenuprovider provider =newmycontextmenuprovider(getgraphicalviewer(), getactionregistry());
this.getgraphicalviewer().setcontextmenu(provider);
即可。其中
mycontextmenuprovider
是gef
中contexmenuprovider
的子類(而
contextmenuprovider
是jface.action
中menumanager
的子類),我們需要實現
buildcontextmenu()
方法,在該方法中一般第一句呼叫
gefactionconstants.addstandardactiongroups(menu);
以對上下文選單項新增預設分組。然後將
action
新增到分組中(
action
復用actionregistry
中的action)。
node 重定向 express 重定向
服務端重定向對非同步請求無效 如何通過伺服器讓客戶端重定向 1.狀態碼設定為302 臨時重定向,301永久重定向 瀏覽器會記住 當再次請求相同位址的時候,瀏覽器不會重新請求該位址,會直接跳轉上一次請求該位址時的重定向位址 res.statuscode 2.在響應頭中通過 location 告訴客戶端...
輸入重定向,正確輸出重定向,錯誤輸出重定向
一 標準輸入 stdin a.輸入重定向 標準輸入 作用 將原先鍵盤輸入的內容改由檔案內容代替 root wenwen cat test.txt asdas asdas asdas 按crtl d 退出 將network內容匯入到test.txt中去 root wenwen cat test.txt...
icmp重定向實驗ensp icmp重定向實驗
一 實驗拓撲圖 二 實驗要求 三 實驗步驟配置 1 配置r0 r1 r2 r3的ip位址 r0 int f0 0 ip add 10.1.1.1 255.0.0.0 no sh r1 int f0 0 ip add 10.2.2.2 255.0.0.0 no sh r2 int f0 0 ip ad...