重定向Retarget Action 小結

2021-09-01 21:42:36 字數 4809 閱讀 1167

根據資料系統整理、明確一下

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...